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
Uma conta e subscrição do Azure. Se não tiver uma subscrição, inscreva-se numa conta do Azure gratuita.
O fluxo de trabalho da aplicação lógica onde pretende adicionar o fragmento de código. O fluxo de trabalho já tem de começar com um acionador.
O exemplo deste artigo utiliza a Office 365 acionador do Outlook com o nome Quando é recebido um novo e-mail.
Se não tiver um fluxo de trabalho, veja a seguinte documentação:
Com base no facto de a sua aplicação lógica ser Consumo ou Standard, reveja os seguintes requisitos:
Consumo: requer Node.js versão 8.11.10 e uma ligação para uma conta de integração, vazia ou não, a partir do recurso da aplicação lógica.
Importante
Certifique-se de que utiliza uma conta de integração adequada para o seu cenário ou caso de utilização.
Por exemplo, as contas de integração de escalão gratuito destinam-se apenas a cenários exploratórios e cargas de trabalho, não a cenários de produção, são limitadas na utilização e no débito e não são suportadas por um contrato de nível de serviço (SLA).
Outros escalões de conta de integração incorrem em custos, mas incluem suporte de SLA, oferecem mais débito e têm limites mais elevados. Saiba mais sobre os escalões de conta de integração, os limites e os preços.
Padrão: requer Node.js versões 16.x.x, mas sem conta de integração.
Adicionar a ação Executar Código JavaScript
Na portal do Azure, abra o fluxo de trabalho da aplicação lógica Consumo no estruturador.
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.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:
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.
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.
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. OworkflowContext
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 dobody
acionador, que difere da propriedade Corpo da mensagem de e-mail. Para obter mais informações sobre oworkflowContext
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.
Para diferenciar a propriedade Corpo da mensagem de e-mail que selecionou a partir da propriedade do
body
acionador, mude o nome da segundabody
propriedade paraBody
. Adicione o ponto e vírgula de fecho (;) no final para concluir a instrução de código.A ação Executar Código JavaScript não requer sintaticamente uma
return
instrução. No entanto, ao incluir areturn
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.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 actions
propriedades , trigger
e 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
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 .Para regressar à vista de estruturador, na barra de ferramentas da vista de código, selecione Designer.
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
Na ação Executar Código JavaScript , abra a lista Adicionar novo parâmetro .
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. Para este exemplo, selecione o parâmetro Ações .
Na caixa Ações Item - 1 , introduza o nome JSON da ação.
Para adicionar outro nome de ação, selecione Adicionar novo item.
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.