ANS-0767 · DéVELOPPEMENT SUITESCRIPT

Comment déclarer et gérer les constantes dans NetSuite SuiteScript ?

Déclarez correctement les constantes dans SuiteScript afin d’éviter tout conflit avec les variables du navigateur et les autres scripts déployés.

Solution courte

Pour éviter tout conflit avec les objets du navigateur et d’autres scripts, encapsulez les constantes au sein d’un objet unique. Bien que l’encapsulation manuelle soit efficace, les versions modernes de SuiteScript 2.x et 2.1 tirent parti de l’architecture modulaire (AMD) pour une encapsulation intégrée et une gestion des dépendances, offrant ainsi une approche plus structurée. Utilisez toujours « const » pour les véritables constantes.

Scénario

Lors du développement de SuiteScript, en particulier de scripts côté client, les développeurs peuvent rencontrer des problèmes liés à des conflits de variables globales. Ces conflits peuvent résulter de constantes partageant des noms avec des variables de l’objet Window du navigateur ou avec des constantes déclarées dans d’autres scripts déployés sur le même enregistrement, ce qui entraîne un comportement inattendu et des divergences de données.

Solution

Afin de limiter les conflits potentiels avec les variables du navigateur et d’autres scripts, les constantes doivent être encapsulées dans un objet. Cet objet nécessite un identifiant unique, tel que le nom du script, afin de garantir son caractère unique et d’éviter les conflits de nommage. Bien que cette encapsulation manuelle des objets constitue une méthode efficace pour prévenir les conflits de variables globales, il est important de noter que le développement moderne avec SuiteScript 2.x et 2.1 s'appuie sur une architecture modulaire (AMD) qui offre une encapsulation et une gestion des dépendances intégrées, proposant ainsi une manière plus structurée et plus conforme aux conventions de gestion du code et permettant d'éviter la pollution de l'espace de noms global. De plus, les bonnes pratiques JavaScript modernes, prises en charge par SuiteScript 2.1, recommandent d’utiliser const

pour déclarer de véritables constantes plutôt que var

.

Considérez les exemples suivants illustrant les problèmes et la solution encapsulée :

Problème n° 1 : conflits avec les variables du navigateur

  1. Pour accéder aux informations client du navigateur :

javascript
window.clientInformation
  1. Cela renvoie un objet tel que :

Navigator {geolocation: Geolocation, doNotTrack: null, webkitPersistentStorage: StorageQuota, webkitTemporaryStorage: StorageQuota, onLine: true…}
  1. Cependant, si une constante globale portant le même nom est déclarée à d’autres fins :

javascript
const clientInformation = 989;
  1. Et si l’on tente à nouveau d’accéder aux informations du client du navigateur, cela renverra :

989

. Cela démontre que toute variable d’objet Window peut être remplacée si une constante porte le même nom.

Problème n° 2 : scripts partageant les mêmes noms de constantes

Lorsque plusieurs scripts sont déployés sur le même enregistrement, ils peuvent partager leurs constantes globales. Prenons les exemples suivants avec deux scripts côté client, tous deux déclenchés lors de l’initialisation de la page, où une constante porte le même nom :

  1. Script n° 1

javascript
const GOOSE_EGG = 0;
function pageInit_test(type) {
    alert(GOOSE_EGG);
}
  1. Script n° 2

javascript
const GOOSE_EGG = 1;
function pageInit_test2(type) {
    alert(GOOSE_EGG);
}

Lors de la création ou de la modification de l’enregistrement sur lequel ces scripts sont déployés, deux fenêtres d’alerte s’afficheront, indiquant toutes deux la valeur :

1

Les deux scripts utiliseront la valeur du script n° 2 (le dernier script créé dans NetSuite).

Solution : encapsuler les constantes dans un objet

Pour garantir que les noms de constantes soient uniques et n’entrent pas en conflit avec les variables du navigateur ou d’autres scripts, encapsulez-les dans un objet. Le nom du script peut servir d’identifiant unique pour cet objet.

Exemple :

javascript
const ITR_SUE_AUTOPOPULATE = {};
ITR_SUE_AUTOPOPULATE.MAX_RESULTS = 1000;

Il peut alors être référencé comme suit :

javascript
ITR_SUE_AUTOPOPULATE.MAX_RESULTS

Cette approche permet d’éviter les incohérences et garantit que les valeurs des constantes sont confinées à leurs scripts respectifs.

Support expert NetSuite

Besoin d’aide pour cet enjeu NetSuite ?

Accompagnement-conseil et configuration pour Développement SuiteScript

Parler à un consultant