Passar para o conteúdo principal

[Workflow Builder - GCW] Usando a Atividade JavaScript com o Motor V2

Juliana Maciel Maruri da Cunha avatar
Escrito por Juliana Maciel Maruri da Cunha
Atualizado essa semana

Este artigo fornece um guia abrangente sobre como utilizar a atividade JavaScript dentro do Workflow Builder. Ele aborda os conceitos fundamentais, funções disponíveis, como acessar e modificar o contexto do fluxo de trabalho, e as melhores práticas para escrever código JavaScript eficaz. Ao final deste artigo, você terá um entendimento claro de como aproveitar o JavaScript para aprimorar seus fluxos de trabalho.


Entendendo a Atividade JavaScript

A atividade JavaScript no Workflow Builder permite que você execute código JavaScript personalizado diretamente em seus fluxos de trabalho. Este recurso possibilita manipulação avançada de dados, configuração de lógica condicional e integração com outros sistemas, dependendo da configuração do seu fluxo de trabalho. O código JavaScript é executado em um ambiente seguro alimentado pelo Goja, que é uma implementação pura em Go do ECMAScript 5.1, garantindo estabilidade e segurança.


Funções e Objetos Disponíveis

Na atividade JavaScript, você tem acesso a um conjunto limitado de objetos JavaScript integrados e uma função log personalizada para registrar mensagens. Os objetos disponíveis incluem:

  • Math: Fornece funções e constantes matemáticas (por exemplo, Math.random(), Math.floor()).

  • JSON: Métodos para analisar e transformar dados JSON em string (por exemplo, JSON.parse(), JSON.stringify()).

  • Date: Funções para manipulação de datas e horários (por exemplo, new Date(), Date.now()).

  • Array: O objeto global Array para manipulação de arrays.

  • String: O objeto global String para manipulação de texto.

  • Number: O objeto global Number para operações numéricas.

  • Boolean: O objeto global Boolean para valores verdadeiro/falso.

  • Error: O objeto Error global para tratamento de erros.

  • log: Uma função personalizada para enviar mensagens aos logs da atividade.

Exemplo de uso da função log:

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

Acessando o Contexto do Workflow

Seu código JavaScript pode acessar todo o contexto do workflow através de uma variável global chamada context. Este objeto contém o estado atual e os dados do seu workflow, permitindo que você leia e modifique valores conforme permitido pela configuração do seu Workflow builder.

Aqui está um exemplo de uma estrutura típica de context:

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

O objeto context é rico em dados, incluindo payload, flow:batch:0 e step:print:0.

Exemplos de acesso a valores do 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);

Nota Importante: A estrutura do objeto context varia com base no seu fluxo de trabalho específico. Sempre consulte as entradas do seu fluxo de trabalho e as saídas de atividades anteriores para obter caminhos de dados precisos.


Escrevendo seu código JavaScript

Seu código JavaScript será automaticamente envolvido em uma expressão de função imediatamente invocada (IIFE) para execução segura. Você não precisa incluir este invólucro no seu código; simplesmente escreva as instruções JavaScript que deseja executar.


Retornando resultados

A atividade JavaScript pode retornar valores que serão armazenados na saída da atividade. O formato do valor retornado depende do seu tipo:

  • Retornando um objeto JavaScript: As propriedades serão mapeadas como pares de chave-valor no JSCodeOutput.

  • Retornando outros valores: Valores como strings, números, booleanos ou arrays serão empacotados sob uma chave padrão chamada "result" no JSCodeOutput.

Exemplo: Retornando um objeto

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

Isso produzirá um resultado semelhante a:

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

Exemplo: Retornando um valor não-objeto (string)

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

Isso resultará em uma saída como:

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

Exemplo: Retornando um array

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

Isso resultará em uma saída como:

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

Depuração e Registro

A função log() é essencial para depuração dentro da atividade JavaScript. Qualquer mensagem enviada para log() será exibida na seção Logs da saída da atividade, permitindo que você acompanhe o fluxo de execução e inspecione valores de variáveis.


Melhores práticas

  • Mantenha o foco: Use a atividade JavaScript para transformações de dados específicas ou verificações condicionais. Lógicas mais complexas são melhor tratadas por etapas dedicadas do workflow ou serviços externos.

  • Use try...catch: Envolva seu código em blocos try...catch para lidar com erros inesperados de forma elegante e evitar falhas no fluxo de trabalho.

  • Validar entradas: Sempre verifique se os dados do context existem e estão no formato esperado antes de usá-los.

  • Teste minuciosamente: Teste seu código JavaScript de forma rigorosa com várias entradas para garantir o comportamento correto em diferentes cenários.

Ao seguir essas diretrizes, você pode utilizar efetivamente a atividade JavaScript para introduzir uma lógica personalizada poderosa e flexibilidade em seus fluxos de trabalho do Workflow Builder.


📝 Não é o que você precisava?

Ajude-nos a melhorar este artigo, envie-nos um e-mail para [email protected] — por favor, inclua o título do artigo.

Respondeu à sua pergunta?