CPQ Référence du langage de script

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 3 minutes de lecture
  • 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.

    Remarque :
    Impossible de renvoyer les objets Date, mais ils peuvent être référencés et manipulés à l’aide des API Date du menu Aide.

    Mots clés pris en charge

    • var
    • Soit
    • Const
    • nouveau
    • if
    • sinon si
    • sinon
    • pour
    • pour/de
    • rendre

    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

    Remarque :
    Les chaînes ne peuvent pas être traitées comme des tableaux, mais .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
    Tableau 1. ShipStateBooleanTest
    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.