CPQ Référence du langage de script
Affichez les opérateurs, les objets et les mots-clés pris en CPQ charge, ainsi que des informations sur la conversion de type, la vérification de type, les scripts alternatifs pour les opérations non prises en charge et l’accès aux propriétés des objets.
CPQ utilise un langage de type JavaScript pour modifier dynamiquement la valeur des champs et des données BOM via des règles et des enrichissements. JavaScript est un langage complexe construit sur près de trente ans, et bien que nous ne soyons pas en mesure de reproduire toutes les fonctionnalités qu’un développeur attendrait normalement en codant, CPQ le scripting reste un outil puissant pour aider à la configuration dynamique des produits.
Les capacités du scripting ne cessent de CPQ s’étendre. Revenez pour voir les fonctionnalités les plus récentes.
Opérateurs pris en charge
Opérateurs arithmétiques :
- +
- Addition
- -
- Soustraction
- *
- Multiplication
- /
- Division
- %
- Module
- ++
- Incrément
- --
- Décrément
Opérateurs de chaîne :
- +
- Concaténation
- +=
- Affectation d’ajout
Opérateurs d’affectation :
- =
- Affectation
- +=
- Affectation d’ajout
- -=
- Affectation de soustraction
Opérateurs de comparaison :
- ==
- Égal à
- ===
- Valeur égale et type égal
- !=
- Non égal à
- !==
- Valeur ni type différent
- >
- Supérieur à
- <
- Inférieur à
- >=
- Supérieur ou égal à
- <=
- Inférieur ou égal à
Opérateurs logiques :
- &&
- Et
- ||
- Ou
Objets pris en charge
Chaque objet pris en charge peut être déclaré avec ce qui suit :
- [ ]
- Tableau
- " "
- Chaîne
- ( )
- Numéro
- vrai | faux
- Booléen
- { }, nouvelle carte ( )
- Carte
- nouvelle date ( )
- Date
non défini, NaN et nul ne sont pas pris en charge.
Mots clés pris en charge
varSoitConstnouveauifsinon sisinonpourpour/derendre
Nous ne prenons pas en charge les boucles while ou inconditionnelles avecpause, en raison du risque que des boucles infinies arrêtent les performances.
Nous ne prenons pas en charge les fonctions, car le script lui-même doit être suffisamment petit pour être considéré comme une seule fonction. Si votre script est long avec de nombreuses conditions et variables, envisagez de créer une table gérée et d’utiliser une requête de table. Pour plus d’informations sur l’utilisation des tables gérées et des requêtes de table, consultez Chargeur de matrice : chargement de table CSV et Réduction des requêtes de table.
Scripts alternatifs pour les opérations non prises en charge
Affectation multiplication et division (/= ou *=) : nombre = nombre * otherNumber ;, nombre = nombre / otherNumber ;
Exponentiation (x**y) : Math.pow(x, y) ;
Conversion de type
Convertir les tableaux en chaînes : Array.toString()
Convertir les nombres en chaînes : [nombre] + « »
Convertir des chaînes numériques en nombres : [chaîne] - 0
.length fonctionne pour les chaînes.Vérification de type
Ce qui suit renvoie une valeur booléenne indiquant si une entrée est un nombre : LGK.isNumber(123)
Accéder aux propriétés d’un objet
Vous pouvez accéder aux propriétés des objets de carte tels que cfgRequest de deux manières.
objectName.propertyName
//or
objectName["propertyName"]Ceci est utile pour remplacer de grandes quantités de code répétitif par les résultats d’une recherche dans une table, car le texte « propertyName » pourrait être remplacé par une variable.
Par exemple, imaginons un plan auquel les champs suivants sont associés et une table gérée nommée shipstatebooleantest.
- shipState
- booléen 1
- booléen 2
- booléen 3
- quantity1
- quantity2
- quantity3
| id | shipState | trueBoolean | quantitéTest | Quantité de lignes |
| 1 | Arizona (États-Unis) | booléen 1 | quantité1 | 1 |
| 2 | Maine (États-Unis) | booléen 2 | quantité2 | 2 |
| 3 | California | booléen 3 | quantité3 | 3 |
Au lieu d’avoir une instruction if identique qui vérifie ce qu’est shipState et de définir les valeurs booléennes et les quantités en conséquence, vous pouvez la remplacer par une seule instruction if qui définit les valeurs en fonction des résultats d’une recherche dans une table.
Dans le script Configurer/Reconfigurer, si le champ shipState a une valeur, les champs renvoyés par la fonction de recherche sont définis. Si le champ shipState est vide, tous les champs booléens et de quantité sont définis.
if (cfgRequest.shipState.value != "" && cfgRequest.shipState.value != null){
var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest where shipState = :value", { "value": cfgRequest.shipState.value });
console.log(fieldMapping);
if (fieldMapping != []){
cfgRequest[fieldMapping[0].trueBoolean].set("value",true);
cfgRequest[fieldMapping[0].quantityTest].set("value",fieldMapping[0].rowQuantity);
}
}
else{
var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest");
console.log(fieldMapping);
for (var row of fieldMapping) {
cfgRequest[row.trueBoolean].set("value",true);
cfgRequest[row.quantityTest].set("value",row.rowQuantity);
}
} Si votre instance a besoin de CPQ fonctionnalités non décrites ici, contactez-support@logik.io avec votre cas d’utilisation.