Hoppa till huvudinnehåll

[Workflow Builder – GCW] Använda JavaScript-aktiviteten med V2 Engine

Juliana Maciel Maruri da Cunha avatar
Skrivet av Juliana Maciel Maruri da Cunha
Uppdaterad för mer än 2 veckor sedan

Den här artikeln är en omfattande guide om hur du använder JavaScript-aktiviteten i Workflow Builder. Den tar upp kärnkoncept, tillgängliga funktioner, hur du får tillgång till och ändrar arbetsflödeskontexten och bästa praxis för att skriva effektiv JavaScript-kod. I slutet av den här artikeln kommer du att ha en tydlig förståelse för hur du kan använda JavaScript för att förbättra dina arbetsflöden.


Förstå JavaScript-aktiviteten

JavaScript-aktiviteten i Workflow Builder låter dig köra anpassad JavaScript-kod direkt i dina arbetsflöden. Den här funktionen möjliggör avancerad datamanipulation, inställning av villkorslogik och integration med andra system, beroende på konfigurationen av ditt arbetsflöde. JavaScript-koden körs i en säker miljö som drivs av Goja, som är en ren Go-implementation av ECMAScript 5.1, vilket garanterar stabilitet och säkerhet.


Tillgängliga funktioner och objekt

I JavaScript-aktiviteten har du tillgång till en begränsad uppsättning inbyggda JavaScript-objekt och en anpassad log-funktion för att logga meddelanden. De tillgängliga objekten inkluderar:

  • Math: Ger matematiska funktioner och konstanter (t.ex. Math.random(), Math.floor()).

  • JSON: Metoder för att analysera och serialisera JSON-data (t.ex. JSON.parse(), JSON.stringify()).

  • Date: Funktioner för att hantera datum och tider (t.ex. new Date(), Date.now()).

  • Array: Det globala Array-objektet för arraymanipulation.

  • String: Det globala String-objektet för textmanipulation.

  • Number: Det globala Number-objektet för numeriska operationer.

  • Boolean: Det globala Boolean-objektet för true/false-värden.

  • Error: Det globala Error-objektet för felhantering.

  • log: En anpassad funktion för att skicka meddelanden till aktivitetens loggar.

Exempel på hur log-funktionen används:

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

Komma åt arbetsflödeskontext

Din JavaScript-kod kan komma åt hela arbetsflödeskontexten via en global variabel som heter context. Det här objektet innehåller det aktuella tillståndet och data för ditt arbetsflöde, vilket gör att du kan läsa och ändra värden enligt din arbetsflödeskonfiguration.

Här är ett exempel på en typisk context-struktur:

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"    }  }}

context-objektet är fullt av data, inklusive payload, flow:batch:0 och step:print:0.

Exempel på hur du får tillgång till värden från 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);

Viktigt meddelande: Strukturen för context-objektet varierar beroende på ditt specifika arbetsflöde. Titta alltid på ditt arbetsflödes indata och tidigare aktivitetsutdata för att hitta korrekta datavägar.


Skriva din JavaScript-kod

Din JavaScript-kod kommer automatiskt att omslutas i ett omedelbart anropat funktionsuttryck (IIFE) för säker körning. Du behöver inte inkludera denna omslutning i din kod, utan skriv bara de JavaScript-satser du vill köra.


Returnerar resultat

JavaScript-aktiviteten kan returnera värden som lagras i aktivitetens output. Formatet på det returnerade värdet beror på dess typ:

  • Returnera ett JavaScript-objekt: Egenskaperna kommer att mappas som nyckel-värdepar i JSCodeOutput.

  • Returnera andra värden: Värden som strängar, siffror, booleans eller matriser kommer att slås in under en standardnyckel som kallas "result" i JSCodeOutput.

Exempel: Returnera ett objekt

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

Detta kommer att ge ett resultat som liknar:

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

Exempel: Returnera ett värde som inte är ett objekt (sträng)

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

Detta kommer att resultera i en output som:

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

Exempel: Returnera en array

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

Detta kommer att resultera i en output som:

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

Felsökning och loggning

log()-funktionen är viktig för felsökning i JavaScript-aktiviteten. Alla meddelanden som skickas till log() kommer att visas i avsnittet Loggar i aktivitetens output, så att du kan följa exekveringsflödet och inspektera variabelvärden.


Bästa praxis

  • Håll det fokuserat: Använd JavaScript-aktiviteten för specifika datatransformationer eller villkorskontroller. Mer komplex logik hanteras bättre av dedikerade arbetsflödessteg eller externa tjänster.

  • Använd try...catch: Omge din kod med try...catch-block för att hantera oväntade fel på ett smidigt sätt och förhindra att arbetsflödet misslyckas.

  • Validera indata: Kontrollera alltid att data från context finns och har det förväntade formatet innan du använder den.

  • Testa noggrant: Testa din JavaScript-kod noggrant med olika indata för att säkerställa korrekt beteende under olika scenarier.

Genom att följa dessa riktlinjer kan du effektivt använda JavaScript-aktiviteten för att införa kraftfull anpassad logik och flexibilitet i dina Workflow Builder-arbetsflöden.


📝 Inte vad du behövde?

Hjälp oss förbättra denna artikel, skicka ett mejl till [email protected] — vänligen inkludera artikelns titel.

Fick du svar på din fråga?