Passer au contenu principal

[Workflow Builder - GCW] Utiliser l'activité JavaScript avec le moteur V2

Juliana Maciel Maruri da Cunha avatar
Écrit par Juliana Maciel Maruri da Cunha
Mis à jour il y a plus de 2 semaines

Cet article propose un guide complet sur l'utilisation de l'activité JavaScript dans Workflow Builder. Il couvre les concepts de base, les fonctions disponibles, la manière d'accéder et de modifier le contexte du workflow, ainsi que les meilleures pratiques pour écrire un code JavaScript efficace. À la fin de cet article, vous aurez une compréhension claire de la manière d'utiliser JavaScript pour améliorer vos workflows.


Comprendre l'activité JavaScript

L'activité JavaScript dans Workflow Builder vous permet d'exécuter du code JavaScript personnalisé directement dans vos workflows. Cette fonctionnalité permet une manipulation avancée des données, la configuration de logique conditionnelle et l'intégration avec d'autres systèmes, selon la configuration de votre workflow. Le code JavaScript s'exécute dans un environnement sécurisé alimenté par Goja, qui est une implémentation pure Go d'ECMAScript 5.1, garantissant stabilité et sécurité.


Fonctions et objets disponibles

Dans l'activité JavaScript, vous avez accès à un ensemble limité d'objets JavaScript intégrés et à une fonction log personnalisée pour enregistrer des messages. Les objets disponibles incluent :

  • Math : Fournit des fonctions et des constantes mathématiques (par exemple, Math.random(), Math.floor()).

  • JSON : méthodes d'analyse et de conversion de données JSON (par exemple, JSON.parse(), JSON.stringify()).

  • Date : Fonctions pour gérer les dates et les heures (par exemple, new Date(), Date.now()).

  • Array : l'objet Array global pour la manipulation de tableaux.

  • String : l'objet String global pour la manipulation de texte.

  • Number : l'objet Number global pour les opérations numériques.

  • Boolean : L'objet booléen global pour les valeurs vrai/faux.

  • Error : l'objet d'erreur global pour la gestion des erreurs.

  • log : une fonction personnalisée pour afficher des messages dans les journaux d'activité.

Exemple d'utilisation de la fonction log :

JavaScript
log("This message will appear in the activity logs.");log("The value of a variable is: " + someVariable);

Accéder au contexte du workflow

Votre code JavaScript peut accéder à l'ensemble du contexte du workflow via une variable globale nommée context. Cet objet contient l'état actuel et les données de votre workflow, vous permettant de lire et de modifier les valeurs selon la configuration de votre workflow.

Voici un exemple de structure context typique :

JSON
{  "flow:batch:0": {    "batchUid": "692576827",    "batchedBy": {      "CoatingType": "glossy-lamination",      "ColorType": "4-4"    },    "quantity": "1"  },  "payload": {    "facility": {      "countryId": "DE",      "name": "DE_GCSB",      "timeZone": "Europe/Berlin"    },    "files": {      "default": "https://..."    },    "order": {      "amount": "19.99",      "clientId": "test-orders",      "deliveryAddress": {        "address_line_1": "123 Test St",        "city": "Testville",        // ... more address details      },      // ... more order details    },    "part": {      "id": "7101535136",      "productDetails": {        "attributes": {          "CoatingType": "glossy-lamination",          "ColorType": "4-4",          // ... more attributes        },        "derivedAttributes": {          "height": {            "value": "55"          },          // ... more derived attributes        }      }    }    // ... more payload data  },  "step:print:0": {    "machine": {      "0": "digital-presses-hp-indigo-7900",      "#": "1"    },    "machineTypes": "digital-presses",    "sheetSizes": {      "0": "sra3",      "#": "1"    }  }}

L'objet context contient de nombreuses données, notamment payload, flow:batch:0 et step:print:0.

Exemples d'accès aux valeurs du context :

JavaScript
// Get the client ID from the order payloadvar clientId = context.payload.order.clientId;log("Client ID: " + clientId);// Access a product attributevar coatingType = context.payload.part.productDetails.attributes.CoatingType;log("Product Coating Type: " + coatingType);// Access a derived attribute's valuevar productHeight = context.payload.part.productDetails.derivedAttributes.height.value;log("Product Height: " + productHeight);// Get the customer's city from the delivery addressvar city = context.payload.order.deliveryAddress.city;log("Delivery City: " + city);// You can also modify context values (if allowed by workflow permissions)context.payload.order.deliveryAddress.city = "New Testville";log("Updated Delivery City: " + context.payload.order.deliveryAddress.city);

Remarque importante : La structure de l'objet context varie en fonction de votre workflow. Référez-vous toujours à l'entrée de votre workflow et aux sorties d'activités précédentes pour obtenir des chemins de données précis.


Écrire votre code JavaScript

Votre code JavaScript sera automatiquement encapsulé dans une expression de fonction immédiatement invoquée (IIFE) pour une exécution sécurisée. Vous n'avez pas besoin d'inclure cet encapsuleur dans votre code. Écrivez simplement les instructions JavaScript que vous souhaitez exécuter.


Retour des résultats

L'activité JavaScript peut renvoyer des valeurs qui seront stockées dans la sortie de l'activité. Le format de la valeur renvoyée dépend de son type :

  • Retour d'un objet JavaScript : les propriétés seront mappées comme des paires clé-valeur dans le JSCodeOutput.

  • Retour d'autres valeurs : Les valeurs comme les chaînes de caractères, les nombres, les booléens ou les tableaux seront enveloppées sous une clé par défaut appelée "result" dans le JSCodeOutput .

Exemple : retour d'un objet

JavaScript
var myResult = {  status: "success",  message: "Order processed",  orderId: context.payload.order.id};return myResult;

Cela produira un résultat similaire à :

JSON
{  "flow:js-script:1": {    "message": "Order processed",    "orderId": "048aa79f-7d6e-45bd-930a-81be07be0f19",    "status": "success"  },  "payload": {...}}

Exemple : retour d'une valeur qui n'est pas un objet (chaîne)

JavaScript
return "Processing complete for order " + context.payload.order.customerOrderId;

Cela donnera un résultat comme :

JSON
{  "result": "Processing complete for order test-order-ref"}

Exemple : retour d'un tableau

JavaScript
var attributes = context.payload.part.productDetails.attributes;var attributeNames = Object.keys(attributes);return attributeNames;

Cela donnera un résultat comme :

JSON
{  "result": ["CoatingType", "ColorType", "Orientation", "PaperFormat", "PaperType", "ProductStatus", "ProtectionType", "ShapeEdgeType", "SpotFinishingType", "State", "Variable"]}

Débogage et journalisation

La fonction log() est essentielle pour le débogage dans l'activité JavaScript. Tous les messages envoyés à log() seront affichés dans la section Logs de la sortie de l'activité, ce qui vous permet de suivre le flux d'exécution et d'inspecter les valeurs des variables.


Bonnes pratiques

  • Restez concentré : Utilisez l'activité JavaScript pour des transformations de données spécifiques ou des vérifications conditionnelles. Une logique plus complexe est mieux gérée par des étapes de workflow dédiées ou des services externes.

  • Utilisez try...catch : Encadrez votre code dans des blocs try...catch pour gérer les erreurs inattendues de manière élégante et éviter les échecs de workflow.

  • Valider les entrées : vérifiez toujours que les données du contexte existent et sont dans le format attendu avant de les utiliser.

  • Testez en profondeur : testez rigoureusement votre code JavaScript avec différentes entrées pour garantir un comportement correct dans divers scénarios.

En suivant ces directives, vous pouvez utiliser efficacement l'activité JavaScript pour introduire une logique personnalisée puissante et de la flexibilité dans vos workflows Workflow Builder.


📝 Pas ce dont vous aviez besoin ?

Aidez-nous à améliorer cet article, envoyez-nous un e-mail à [email protected] — veuillez inclure le titre de l'article.

Avez-vous trouvé la réponse à votre question ?