Débogage dans CPQ
Comment utiliser le débogueur pour perfectionner vos scripts avant le déploiement.
Lorsque vous devez corriger un script dans CPQ, l’outil de débogage des fonctions avancées et des scripts d’enrichissement peut vous aider. Ce guide vous montre comment écrire des JSON de débogage pour isoler et tester vos scripts avant le déploiement. En suivant ces bonnes pratiques pour déboguer les scripts défectueux, vous pouvez contribuer à garantir que vos plans s’exécutent parfaitement.
Directives générales pour le débogage
Utilisation de console.log() : Lorsque vous codez un comportement complexe, vous devrez peut-être vérifier si certaines valeurs sont définies ou manipulées correctement. Au lieu de ne voir que ce qui est renvoyé par la règle, utilisez la fonction console.log([variableName]) dans un script pour afficher la valeur de la variable à cette ligne lorsqu’elle est exécutée dans le débogueur.
Commenter des blocs de code : lorsqu’un script devient long, il peut être nécessaire de commenter de grandes sections de code pour voir d’où vient le comportement. Cela peut généralement être fait en utilisant ou /* */ puis en déboguer.
Commentez le JSON de débogage pour une utilisation ultérieure : si vous mettez continuellement à jour une règle pendant l’implémentation, il est judicieux d’enregistrer votre JSON de débogage en haut ou en bas du script, dans un bloc de commentaires. Ainsi, lorsque le script est enregistré, le JSON peut également être enregistré pour référence ultérieure.
Pour en savoir plus sur ces fonctionnalités, reportez-vous à la section Utilisation des commentaires et de la console pour déboguer les scripts.
Comment utiliser le débogueur
Dans l’éditeur de script :
- Activez/désactivez les options du dubugger en cliquant sur l’icône de bogue (a).
- Saisissez votre JSON dans la section Entrées du débogueur (b), tel qu’il apparaîtra lorsque votre règle s’exécute pendant la configuration.
- Exécutez votre règle avec les entrées du débogueur en cliquant sur Exécuter le débogueur dans le panneau Sortie du débogueur.Remarque :Il n’est pas nécessaire d’enregistrer le script pour exécuter le débogueur. L’état du script lors d’un clic sur le bouton est utilisé lors du test.
- Les objets renvoyés et les informations console.log s’affichent dans le panneau Sortie du débogueur (d).
Le CPQ débogueur utilise le format JSON, qui est écrit à l’aide de paires attribut-valeur. Les attributs sont les noms de variables des champs utilisés dans la règle, et la valeur est les données du champ dans son format objet.
À noter également :
- Le package JSON est encapsulé à l’aide d’accolades ({ })
- Chaque champ est séparé par une virgule (,).
- Chaque paire attribut-valeur est séparée par deux points (:).
La structure du JSON que vous utilisez dépend du type d’objet de chaque champ, ainsi que de l’utilisation du script pour une règle ou un enrichissement.
Mise en forme JSON spécifique au champ
- Les champs de texte, de nombres, de valeurs booléennes et de listes de sélection unique sont les champs les plus faciles à déboguer, car ils correspondent à des objets simples à valeur singulière tels que des chaînes, des nombres et des valeurs booléennes.
{ "cfg":{ "textField": "value", "singleSelect picklist": "value", "numberField": 123, "booleanField": true } } -
Les champs de date utilisent la norme internationale ISO-8601 pour contenir les informations de date. Si un champ entre des dates dans le débogueur, les données doivent être une chaîne au format
AAAA-MM-JJThh :mm :ss.sssZ.{ "cfg":{ "dateField": "2024-01-01T00:00:00.000Z" } } - Les listes de sélection multiple se présentent sous la forme d’un tableau contenant des chaînes. Même avec une seule option sélectionnée, les chaînes doivent être sous forme de tableau lors du débogage, enveloppées par des accolades carrées ([ ]) et séparées par des virgules (,).
{ "cfg":{ "multiSelect picklist": [ "option 1", "option 2" ] } } - Les sélecteurs de produits sont uniques à la référence dans une règle ou un enrichissement, car ils ont leur propre type de règles simples, des actions en bloc. Ils ne peuvent être référencés que par leur option de liste déroulante, en les traitant comme un champ à sélection unique ou à sélection multiple. Le débogueur peut également référencer un sous-champ de sélecteur de produit ou un agrégat à l’aide de la clé
pkr.{ "cfg": { "productPickerSS": "selectedValue", "productPickerMS": [ "selectedValue1", "selectedValue2" ] }, "pkr": { "productPicker2": { "value": "productPicker2_option1", "select": true, "quantity": 100, "exampleSubfield": "Example Value", "aggregates": { "quantity_max": 100 } } } }Notez que lorsque vous référencez un sous-champ de sélecteur de produit dans une règle, vous devez utiliser l’objet
pkret noncfg.let x = pkr.productPickerName.subFieldName - Les ensembles ne peuvent pas être référencés par les fonctions avancées, mais les champs qu’ils contiennent le peuvent. En raison de la nature du champ d’ensemble, les lignes d’un ensemble ne peuvent être déterminées et référencées que dans l’enrichissement On Configurer/Reconfigurer. Toutefois, vous pouvez tester quand un champ tel que optionValue se trouve dans une règle.
{ "set": { "exampleSet": { "index": 1, "optionValue": "product1", "selectOption": true, "size": 2, "aggregateExample1": 1 } } }Pour en savoir plus sur la définition par défaut des champs d’un ensemble, reportez-vous à la section Scripting : comment renseigner les valeurs définies.
Mise en forme JSON spécifique au contexte
Les entrées de champ sont saisies au format JSON, en utilisant le nom de la variable de champ comme clé et la valeur prévue comme valeur.
{
"cfg": {
"exampleField": "Example Value"
}
}
Lors de la configuration et de la reconfiguration, les entrées sont saisies au format JSON, en utilisant le nom de la variable de champ comme clé. La valeur est un objet composé de deux propriétés : value et userEdited. value doit être défini sur la valeur de champ prévue. userEdited est une valeur booléenne.
Mise en forme JSON spécifique au contexte : champs
{
"cfgRequest": {
"exampleField": {
"value": "Example Value",
"userEdited": false
},
"exampleMultiselect picklist": {
"value": [
"one",
"two"
],
"userEdited": false
}
}
}
Pour plus d’informations sur l’utilisation de la userEdited propriété, consultez Scripting : vérification de la première configuration et des configurations suivantes
Mise en forme JSON spécifique au contexte : sélecteurs de produits
"cfgRequest": {
"pkr": {
"productPicker1": {
"data": [
{
"value": {
"value": "productPicker1_option1",
"userEdited": false
},
"select": {
"value": true,
"userEdited": false
},
"quantity": {
"value": 100,
"userEdited": false
},
"exampleSubfield": {
"value": "Example Value",
"userEdited": false
}
}
],
"aggregates": {
"quantity_max": {
"value": 100
}
}
}
},
"productPicker2": {
"value": "productPicker2_option1",
"userEdited": false
}
}
}
Mise en forme JSON spécifique au contexte : ensembles
{
"cfgRequest": {
"set": {
"exampleSet": {
"data": [
{
"index": {
"value": 1
},
"optionValue": {
"value": "product1",
"userEdited": false
},
"selectOption": {
"value": true,
"userEdited": false
},
"textField": {
"value": "a",
"userEdited": false
}
}
],
"size": {
"value": 1,
"userEdited": false
},
"aggregateExample1": {
"value": 1
}
}
}
}
}
Mise en forme JSON spécifique au contexte : sélecteurs de produits dans les ensembles
"cfgRequest": {
"set": {
"exampleSet": {
"data": [
{
"index": {
"value": 1
},
"optionValue": {
"value": "product1",
"userEdited": false
},
"selectOption": {
"value": true,
"userEdited": false
},
"productPicker1InSet": {
"value": [
"option1_Of_productPicker1InSet",
"option2_Of_productPicker1InSet"
],
"userEdited": false
},
"pkr": {
"productPicker2InSet": {
"data": [
{
"value": {
"value": "option1_Of_productPicker2InSet",
"userEdited": false
},
"select": {
"value": true,
"userEdited": false
},
"quantity": {
"value": 100,
"userEdited": false
}
}
],
"aggregates": {
"quantity_max": {
"value": 100
}
}
}
}
}
],
"size": {
"value": 1,
"userEdited": false
},
"aggregateExample1": {
"value": 1
}
}
}
}
}Sur l’enrichissement de la réponse BOM :
Liste de produits : Les entrées sont saisies sous la forme d’un tableau d’objets au format JSON, en utilisant le nom de la variable de propriété comme clé et la valeur prévue comme valeur.
[
{
"id": "test product",
"quantity": 2
},
{
"id": "test product2",
"quantity": 5,
"bomType": "MANUFACTURING"
}
]Extension de la liste déroulante Enrichissement de la tarification :
Demande d’extension de la liste déroulante : les entrées sont saisies sous la forme d’un tableau d’objets au format JSON, en utilisant le nom de la variable de propriété comme clé et la valeur prévue comme valeur. Dans l’exemple, « set » et « index » ne sont nécessaires que si vous utilisez un ensemble.[
{
"fieldVariableName": "myField1",
"set": "mySetVariableName1",
"index": 1,
"optionValue": "Option 1",
"productId": "myProduct1",
"productUniqueIdentifier": "myId"
}
]
Si le comportement du débogueur est différent du comportement d’exécution
Dans presque tous les cas, le JSON de débogage doit correspondre exactement à ce qui serait normalement entré pendant l’exécution comme valeurs valides pour les champs. Assurez-vous d’utiliser le type de données ou les structures corrects décrits ci-dessus.
Dans d’autres cas, des règles similaires peuvent agir sur le même champ. Dans ce cas, le débogueur ne sera pas utile, car il ne peut afficher que le comportement d’une règle à la fois. Il peut être nécessaire de désactiver des règles entières et de les redéployer afin d’exclure le comportement indésirable.
Si tout le reste échoue, veuillez ouvrir un ticket auprès de notre équipe d’assistance ou nous envoyer un e-mail à support@logik.io.