Executar fragmentos de código em fluxos de trabalho com operações de Código Inline no Azure Logic Apps

Aplica-se a: Azure Logic Apps (Consumo + Standard)

Para criar e executar um fragmento de código no fluxo de trabalho da aplicação lógica sem muita configuração, pode utilizar o conector incorporado do Código Inline . Este conector tem uma ação que devolve o resultado do fragmento de código para que possa utilizar essa saída nas ações subsequentes do fluxo de trabalho.

Atualmente, o conector tem apenas uma única ação, que funciona melhor para um fragmento de código com os seguintes atributos, mas estão em desenvolvimento mais ações. O conector incorporado do Código Inline também tem limites diferentes, com base no facto de o fluxo de trabalho da aplicação lógica ser Consumo ou Standard.

Ação Linguagem Versão do idioma Duração da execução Tamanho dos dados Outras notas
Executar Código JavaScript JavaScript Padrão:
Node.js 16.x.x

Consumo:
Node.js 8.11.1

Para obter mais informações, veja Objetos incorporados Standard.
Termina em 5 segundos ou menos. Processa dados até 50 MB. - Não requer trabalhar com as ações variáveis, que não são suportadas pela ação.

- Não suporta a require() função para executar JavaScript.

Para executar código que não se ajuste a estes atributos, pode criar e chamar uma função através de Funções do Azure.

Este artigo mostra como a ação funciona num fluxo de trabalho de exemplo que começa com um Office 365 acionador do Outlook. O fluxo de trabalho é executado quando é recebido um novo e-mail na conta de e-mail do Outlook associada. O fragmento de código de exemplo extrai todos os endereços de e-mail existentes no corpo do e-mail e devolve esses endereços como saída que pode utilizar numa ação subsequente.

O diagrama seguinte mostra os destaques do fluxo de trabalho de exemplo:

Pré-requisitos

Adicionar a ação Executar Código JavaScript

  1. Na portal do Azure, abra o fluxo de trabalho da aplicação lógica Consumo no estruturador.

  2. No estruturador, siga estes passos gerais para adicionar a ação Código Inline com o nome Executar Código JavaScript ao seu fluxo de trabalho.

    Este exemplo adiciona a ação no Office 365 acionador do Outlook. Por predefinição, a ação contém algum código de exemplo, incluindo uma return instrução.

    Captura de ecrã a mostrar a ação Executar Código JavaScript com o código de exemplo predefinido.

  3. Na caixa Código , elimine o código de exemplo e introduza o seu código. Escreva o código que colocaria dentro de um método, mas sem a assinatura do método.

    Dica

    Quando o cursor estiver na caixa Código , é apresentada a lista de conteúdos dinâmicos. Apesar de utilizar esta lista mais tarde, pode ignorar e deixar a lista aberta por enquanto. Não selecione Ocultar.

    Se começar a escrever uma palavra-chave reconhecida, a lista de preenchimento automático é apresentada para que possa selecionar a partir de palavras-chave disponíveis, por exemplo:

    Captura de ecrã a mostrar o fluxo de trabalho Consumo, a ação Executar Código JavaScript e a lista de preenchimento automático de palavras-chave.

    O fragmento de código de exemplo seguinte cria primeiro uma variável com o nome myResult que armazena uma expressão regular, que especifica um padrão para corresponder no texto de entrada. Em seguida, o código cria uma variável denominada e-mail que armazena o conteúdo do corpo da mensagem de e-mail a partir das saídas do acionador.

    Captura de ecrã a mostrar o fluxo de trabalho Consumo, a ação Executar Código JavaScript e código de exemplo que cria variáveis.

  4. Com o cursor ainda na caixa Código , na lista de conteúdos dinâmicos abertos, localize a secção Quando é recebido um novo e-mail e selecione a propriedade Corpo , que faz referência ao corpo da mensagem de e-mail.

    Captura de ecrã a mostrar o fluxo de trabalho Consumo, a ação Executar Código JavaScript, a lista de conteúdos dinâmicos e a propriedade

    A lista de conteúdos dinâmicos mostra as saídas do acionador e quaisquer ações anteriores quando essas saídas correspondem ao formato de entrada da caixa de edição que está atualmente em foco. Esta lista facilita a utilização e referência destas saídas a partir do fluxo de trabalho. Para este exemplo, a lista mostra as saídas do acionador do Outlook, incluindo a propriedade Corpo da mensagem de e-mail.

    Depois de selecionar a propriedade Corpo , a ação Executar Código JavaScript resolve o token para um objeto JSON só workflowContext de leitura, que o fragmento pode utilizar como entrada. O workflowContext objeto inclui propriedades que dão acesso ao código às saídas do acionador e ações anteriores no fluxo de trabalho, como a propriedade do body acionador, que difere da propriedade Corpo da mensagem de e-mail. Para obter mais informações sobre o workflowContext objeto, veja Reference trigger and action outputs using the workflowContext object (Acionador de referência e saídas de ação com o objeto workflowContext ) mais à frente neste artigo.

    Importante

    Se o fragmento de código referenciar nomes de ações que incluam o operador de ponto (.), essas referências têm de incluir estes nomes de ações com parênteses retos ([]) e aspas (""), por exemplo:

    // Correct
    workflowContext.actions["my.action.name"].body

    // Incorrect
    workflowContext.actions.my.action.name.body

    Além disso, na ação Executar Código JavaScript, tem de adicionar o parâmetro Actions (Ações) e, em seguida, adicionar estes nomes de ações a esse parâmetro. Para obter mais informações, veja Adicionar dependências como parâmetros a uma ação Executar Código JavaScript mais à frente neste artigo.

  5. Para diferenciar a propriedade Corpo da mensagem de e-mail que selecionou a partir da propriedade do body acionador, mude o nome da segunda body propriedade para Body . Adicione o ponto e vírgula de fecho (;) no final para concluir a instrução de código.

    Captura de ecrã a mostrar o fluxo de trabalho da aplicação lógica Consumo, a ação Executar Código JavaScript e a propriedade

    A ação Executar Código JavaScript não requer sintaticamente uma return instrução. No entanto, ao incluir a return instrução, pode referenciar mais facilmente os resultados da ação mais tarde no fluxo de trabalho ao utilizar o token Resultado em ações posteriores.

    Neste exemplo, o fragmento de código devolve o resultado ao chamar a match() função, que encontra correspondências no corpo da mensagem de e-mail para a expressão regular especificada. Em seguida, a ação Criar tabela HTML utiliza o token Resultado para referenciar os resultados da ação Executar Código JavaScript e cria um único resultado.

    Captura de ecrã a mostrar o fluxo de trabalho da aplicação lógica Consumo concluída.

  6. Quando terminar, guarde o fluxo de trabalho.

Acionador de referência e saídas de ação com o objeto workflowContext

A partir do fragmento de código no estruturador, pode utilizar a lista de conteúdos dinâmicos para selecionar um token que faça referência à saída do acionador ou a qualquer ação anterior. Quando seleciona o token, a ação Executar Código JavaScript resolve esse token para um objeto JSON só workflowContext de leitura. Este objeto dá ao código acesso às saídas do acionador, quaisquer ações anteriores e ao fluxo de trabalho. O objeto utiliza a seguinte estrutura e inclui as actionspropriedades , triggere workflow , que também são objetos:

{
   "workflowContext": {
      "actions": {
         "<action-name-1>": @actions('<action-name-1>'),
         "<action-name-2>": @actions('<action-name-2>')
      },
      "trigger": {
         @trigger()
      },
      "workflow": {
         @workflow()
      }
   }
}

A tabela seguinte tem mais informações sobre estas propriedades:

Propriedade Tipo Description
actions Coleção de objetos Os objetos resultantes de quaisquer ações anteriores executadas antes da execução do fragmento de código. Cada objeto tem um par chave-valor em que a chave é o nome da ação e o valor é equivalente ao resultado da chamada da função actions() com a @actions('<action-name>') expressão.

O nome da ação utiliza o mesmo nome de ação que aparece na definição de fluxo de trabalho subjacente, que substitui espaços (" ") no nome da ação por carateres de sublinhado (_). Esta coleção de objetos fornece acesso aos valores de propriedade da ação a partir da execução da instância de fluxo de trabalho atual.
trigger Objeto O objeto de resultado do acionador em que o resultado é equivalente a chamar a função trigger(). Este objeto fornece acesso aos valores de propriedade do acionador da execução da instância de fluxo de trabalho atual.
workflow Objeto O objeto de fluxo de trabalho que é equivalente a chamar a função workflow(). Este objeto fornece acesso aos valores das propriedades, como o nome do fluxo de trabalho, o ID de execução, etc., a partir da execução da instância do fluxo de trabalho atual.

No exemplo deste artigo, o workflowContext objeto JSON pode ter as seguintes propriedades e valores de exemplo do acionador do Outlook:

{
   "workflowContext": {
      "trigger": {
         "name": "When_a_new_email_arrives",
         "inputs": {
            "host": {
               "connection": {
                  "name": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Web/connections/office365"
               }
            },
            "method": "get",
            "path": "/Mail/OnNewEmail",
            "queries": {
               "includeAttachments": "False"
            }
         },
         "outputs": {
            "headers": {
               "Pragma": "no-cache",
               "Content-Type": "application/json; charset=utf-8",
               "Expires": "-1",
               "Content-Length": "962095"
            },
            "body": {
               "Id": "AAMkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgBGAAAAAABmZwxUQtCGTqSPpjjMQeD",
               "DateTimeReceived": "2019-03-28T19:42:16+00:00",
               "HasAttachment": false,
               "Subject": "Hello World",
               "BodyPreview": "Hello World",
               "Importance": 1,
               "ConversationId": "AAQkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgAQ",
               "IsRead": false,
               "IsHtml": true,
               "Body": "Hello World",
               "From": "<sender>@<domain>.com",
               "To": "<recipient-2>@<domain>.com;<recipient-2>@<domain>.com",
               "Cc": null,
               "Bcc": null,
               "Attachments": []
            }
         },
         "startTime": "2019-05-03T14:30:45.971564Z",
         "endTime": "2019-05-03T14:30:50.1746874Z",
         "scheduledTime": "2019-05-03T14:30:45.8778117Z",
         "trackingId": "1cd5ffbd-f989-4df5-a96a-6e9ce31d03c5",
         "clientTrackingId": "08586447130394969981639729333CU06",
         "originHistoryName": "08586447130394969981639729333CU06",
         "code": "OK",
         "status": "Succeeded"
      },
      "workflow": {
         "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>",
         "name": "<logic-app-workflow-name>",
         "type": "Microsoft.Logic/workflows",
         "location": "<Azure-region>",
         "run": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>/runs/08586453954668694173655267965CU00",
            "name": "08586453954668694173655267965CU00",
            "type": "Microsoft.Logic/workflows/runs"
         }
      }
   }
}

Adicionar dependências como parâmetros a uma ação Executar Código JavaScript

Em alguns cenários, poderá ter de exigir explicitamente que a ação Executar Código JavaScript inclua saídas do acionador ou ações que o código referencia como dependências. Por exemplo, tem de dar este passo adicional quando o código referencia saídas que não estão disponíveis no tempo de execução do fluxo de trabalho. Durante o tempo de criação do fluxo de trabalho, o motor do Azure Logic Apps analisa o fragmento de código para determinar se o código referencia quaisquer saídas de acionador ou ação. Se essas referências existirem, o motor inclui essas saídas automaticamente. No tempo de execução do fluxo de trabalho, se o acionador referenciado ou a saída de ação não for encontrado no workflowContext objeto, o motor gera um erro. Para resolver este erro, tem de adicionar esse acionador ou ação como uma dependência explícita para a ação Executar Código JavaScript . Outro cenário que requer que siga este passo é quando o workflowContext objeto referencia um nome de acionador ou de ação que utiliza o operador de ponto (.).

Para adicionar um acionador ou ação como dependência, adicione os parâmetros Acionador ou Ações , conforme aplicável à ação Executar Código JavaScript . Em seguida, adicione os nomes do acionador ou da ação à medida que aparecem na definição JSON subjacente do fluxo de trabalho.

Nota

Não pode adicionar operações de Variáveis , ciclos como Para cada ou Até e índices de iteração como dependências explícitas.

Se planear reutilizar o seu código, certifique-se de que utiliza sempre a caixa de edição do fragmento de código para referenciar as saídas do acionador e da ação. Dessa forma, o código inclui as referências de tokens resolvidos, em vez de apenas adicionar os resultados do acionador ou da ação como dependências explícitas.

Por exemplo, suponha que o Office 365 ação Enviar e-mail de aprovação do conector do Outlook precede o fragmento de código no fluxo de trabalho de exemplo. O fragmento de código de exemplo seguinte inclui uma referência à saída SelectedOption desta ação.

Para este exemplo, tem de adicionar apenas o parâmetro Actions e, em seguida, adicionar o nome JSON da ação, Send_approval_email, ao parâmetro . Dessa forma, especifique que a ação Executar Código JavaScript inclui explicitamente o resultado da ação Enviar e-mail de aprovação .

Localizar o nome JSON do acionador ou da ação

Antes de começar, precisa do nome JSON para o acionador ou ação na definição de fluxo de trabalho subjacente.

  • Os nomes na definição do fluxo de trabalho utilizam um caráter de sublinhado (_), não um espaço.

  • Se um nome de ação utilizar o operador de ponto (.), inclua esse operador, por exemplo:

    My.Action.Name

  1. Na barra de ferramentas do estruturador de fluxo de trabalho, selecione Vista de código. actions No objeto, localize o nome da ação.

    Por exemplo, Send_approval_email é o nome JSON da ação Enviar e-mail de aprovação .

    Captura de ecrã a mostrar o nome da ação em JSON.

  2. Para regressar à vista de estruturador, na barra de ferramentas da vista de código, selecione Designer.

  3. Agora, adicione o nome JSON à ação Executar Código JavaScript .

Adicionar o nome do acionador ou da ação à ação Executar Código JavaScript

  1. Na ação Executar Código JavaScript , abra a lista Adicionar novo parâmetro .

  2. Na lista de parâmetros, selecione os seguintes parâmetros, conforme o seu cenário requer.

    Parâmetro Descrição
    Ações Inclua saídas de ações anteriores como dependências. Quando seleciona este parâmetro, ser-lhe-ão pedidas as ações que pretende adicionar.
    Acionador Inclua saídas do acionador como dependências. Quando seleciona este parâmetro, ser-lhe-á perguntado se deve incluir os resultados do acionador. Assim, na lista Acionador , selecione Sim.
  3. Para este exemplo, selecione o parâmetro Ações .

    Captura de ecrã a mostrar a ação Executar Código JavaScript com o parâmetro Actions (Ações) selecionado.

  4. Na caixa Ações Item - 1 , introduza o nome JSON da ação.

    Captura de ecrã a mostrar a caixa Item de Ações -1 e o nome JSON da ação.

  5. Para adicionar outro nome de ação, selecione Adicionar novo item.

  6. Quando terminar, guarde o fluxo de trabalho.

Referência de ação

Para obter mais informações sobre a estrutura e sintaxe da ação Executar Código JavaScript na definição do fluxo de trabalho subjacente com a Linguagem de Definição de Fluxo de Trabalho, veja a secção de referência desta ação.

Passos seguintes