Compartilhar via


Guia de referência de esquema para gatilho e tipos de ação em Aplicativos Lógicos do Azure

Esta referência descreve os tipos gerais usados para identificar gatilhos e ações na definição de fluxo de trabalho subjacente do aplicativo lógico, que é descrita e validada pela Linguagem de Definição de Fluxo de Trabalho. Para encontrar gatilhos e ações de conector específicos que você pode usar em seus aplicativos lógicos, consulte a lista na visão geral dos Conectores.

Visão geral dos gatilhos

Cada fluxo de trabalho inclui um gatilho, que define as chamadas que criam uma instância e iniciam o fluxo de trabalho. Aqui estão as categorias gerais de gatilho:

  • Um gatilho de sondagem , que verifica o ponto de extremidade de um serviço em intervalos regulares

  • Um gatilho de push , que cria uma assinatura para um ponto de extremidade e fornece uma URL de retorno de chamada para que o ponto de extremidade possa notificar o gatilho quando o evento especificado ocorrer ou os dados estiverem disponíveis. O gatilho aguarda a resposta do ponto de extremidade antes de disparar.

Os gatilhos têm esses elementos de nível superior, embora alguns sejam opcionais:

"<trigger-name>": {
   "type": "<trigger-type>",
   "inputs": { "<trigger-inputs>" },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "conditions": [ "<array-with-conditions>" ],
   "runtimeConfiguration": { "<runtime-config-options>" },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
},

Required

Value Tipo Description
< trigger-name> String O nome do gatilho
< tipo de gatilho> String O tipo de gatilho como "Http" ou "ApiConnection"
< trigger-inputs> Objeto JSON As entradas que definem o comportamento do gatilho
< time-unit> String A unidade de tempo que descreve com que frequência o acionador dispara: "Segundo", "Minuto", "Hora", "Dia", "Semana", "Mês"
< número de unidades de tempo> Integer Um valor que especifica com que frequência o acionador é disparado com base na frequência, que é o número de unidades de tempo a aguardar até que o acionador seja acionado novamente

Aqui estão os intervalos mínimos e máximos:

- Mês: 1-16 meses
- Dia: 1-500
dias - Hora: 1-12.000 horas
- Minuto: 1-72.000 minutos
- Segundo: 1-9.999.999 segundos

Por exemplo, se o intervalo for 6, e a frequência for "Mês", a recorrência será a cada 6 meses.

Optional

Value Tipo Description
< array-with-conditions> Array Uma matriz que contém uma ou mais condições que determinam se o fluxo de trabalho deve ser executado. Disponível apenas para gatilhos.
< runtime-config-options> Objeto JSON Você pode alterar o comportamento do runtime do acionador configurando as propriedades runtimeConfiguration. Para obter mais informações, consulte Configurações de runtime.
< splitOn-expression> String Para gatilhos que retornam uma matriz, você pode especificar uma expressão que divide ou debitaitens da matriz em várias instâncias de fluxo de trabalho para processamento.
< operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Lista de tipos de gatilho

Cada tipo de gatilho possui uma interface e entradas diferentes que definem o comportamento do gatilho.

Gatilhos internos

Tipo de gatilho Description
HTTP Verifica ou sonda qualquer ponto de extremidade. Esse ponto de extremidade deve estar em conformidade com um contrato de gatilho específico usando um padrão assíncrono 202 ou retornando uma matriz.
HTTPWebhook Cria um ponto de extremidade que pode ser chamado para seu aplicativo lógico, mas chama o URL especificado para registrar ou cancelar o registro.
Recurrence Acionado com base em um agendamento definido. Você pode definir uma data e hora futura para acionar esse gatilho. Com base na frequência, você também pode especificar horários e dias para executar seu fluxo de trabalho.
Request Cria um ponto de extremidade que pode ser chamado para seu aplicativo lógico e também é conhecido como um acionador "manual". Por exemplo, consulte Chamar, disparar ou aninhar fluxos de trabalho com pontos de extremidade HTTP.

Gatilhos de API gerenciados

Tipo de gatilho Description
ApiConnection Verifica ou sonda um ponto de extremidade usando APIs gerenciadas pela Microsoft ou "conectores".
ApiConnectionWebhook Cria um ponto de extremidade para seu fluxo de trabalho do aplicativo lógico chamando “conectores” ou APIs gerenciadas pela Microsoft para assinar e cancelar a assinatura.

Gatilhos - referência detalhada

Gatilho APIConnection

Esse gatilho verifica ou sonda um ponto de extremidade usando APIs gerenciadas pela Microsoft ou "conectores" para que os parâmetros desse gatilho possam ser diferentes com base no ponto de extremidade. Muitas seções nessa definição de gatilho são opcionais. O comportamento do gatilho depende se as seções estão incluídas ou não.

"<APIConnection_trigger_name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": { "<retry-behavior>" },
      "queries": { "<query-parameters>" }
   },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

Required

Property Value Tipo Description
None < APIConnection_trigger_name> String O nome do gatilho
host.connection.name < nome da conexão> String O nome da conexão com a API gerenciada usada pelo fluxo de trabalho
method < tipo de método> String O método HTTP para se comunicar com a API gerenciada: GET, PUT, POST, PATCH, DELETE
path < api-operation> String A operação de API para chamar
recurrence.frequency < time-unit> String A unidade de tempo que descreve a frequência com que o gatilho é acionado: Segundo, Minuto, Hora, Dia, Semana, Mês
recurrence.interval < número de unidades de tempo> Integer Um valor que especifica com que frequência o acionador é disparado com base na frequência, que é o número de unidades de tempo a aguardar até que o acionador seja acionado novamente

Aqui estão os intervalos mínimos e máximos:

– Mês: 1 a 16 meses
–Dia: 1 a 500 dias
– Hora: 1 a 12.000 horas
– Minuto: 1 a 72.000 minutos
– Segundo: 1 a 9.999.999 segundos

Por exemplo, se o intervalo for 6 e a frequência for Mês, a recorrência será a cada 6 meses.

Optional

Property Value Tipo Description
retryPolicy < repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
queries < query-parameters> Objeto JSON Quaisquer parâmetros de consulta para incluir na chamada da API. Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
runtimeConfiguration.concurrency.runs < max-runs> Integer Por padrão, as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
runtimeConfiguration.maximumWaitingRuns < max-runs-queue> Integer Se o fluxo de trabalho já estiver executando o número máximo de instâncias, quaisquer novas execuções serão colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam. Para alterar o número máximo de instâncias, especifique um valor para a propriedade runtimeConfiguration.concurrency.runs .

Observação: se você definir o
splitOn < splitOn-expression> String Para gatilhos que retornam matrizes, essa expressão referencia a matriz a ser usada para que você possa criar e executar uma instância de fluxo de trabalho para cada item de matriz, em vez de usar um loop "para cada".

Por exemplo, essa expressão representa um item na matriz retornada dentro do conteúdo do corpo do acionador: @triggerbody()?['value']
operationOptions < operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Outputs

Element Tipo Description
headers Objeto JSON Os cabeçalhos da resposta
body Objeto JSON O corpo da resposta
código de status Integer O código de status da resposta

Example

Esta definição de gatilho verifica emails todos os dias na caixa de entrada de uma conta corporativa ou de estudante:

"When_a_new_email_arrives": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "get",
      "path": "/Mail/OnNewEmail",
      "queries": {
          "fetchOnlyWithAttachment": false,
          "folderPath": "Inbox",
          "importance": "Any",
          "includeAttachments": false
      }
   },
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

Gatilho ApiConnectionWebhook

Esse gatilho envia uma solicitação de assinatura para um ponto de extremidade usando uma API gerenciada pela Microsoft, fornece uma URL de retorno de chamada para onde o ponto de extremidade pode enviar uma resposta e aguarda o ponto de extremidade responder. Para obter mais informações, consulte as assinaturas do Ponto de Extremidade.

"<ApiConnectionWebhook_trigger_name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
          "NotificationUrl": "@{listCallbackUrl()}"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "retryPolicy": { "<retry-behavior>" },
      "queries": "<query-parameters>"
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

Required

Value Tipo Description
< nome da conexão> String O nome da conexão com a API gerenciada usada pelo fluxo de trabalho
< conteúdo do corpo> Objeto JSON Qualquer conteúdo da mensagem para enviar como carga para a API gerenciada

Optional

Value Tipo Description
< repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
< query-parameters> Objeto JSON Os parâmetros de consulta para incluir com a chamada à API

Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
< max-runs> Integer Por padrão, as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
< max-runs-queue> Integer Quando o fluxo de trabalho já está executando o número máximo de instâncias, que você pode alterar com base na propriedade, todas as runtimeConfiguration.concurrency.runs novas execuções são colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
< splitOn-expression> String Para gatilhos que retornam matrizes, essa expressão referencia a matriz a ser usada para que você possa criar e executar uma instância de fluxo de trabalho para cada item de matriz, em vez de usar um loop "para cada".

Por exemplo, essa expressão representa um item na matriz retornada dentro do conteúdo do corpo do acionador: @triggerbody()?['value']
< operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Example

Essa definição de gatilho se inscreve na API do Office 365 Outlook, fornece uma URL de retorno de chamada ao ponto de extremidade da API e aguarda o ponto de extremidade responder quando chega um novo e-mail.

"When_a_new_email_arrives_(webhook)": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
         "NotificationUrl": "@{listCallbackUrl()}" 
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "path": "/MailSubscription/$subscriptions",
      "queries": {
          "folderPath": "Inbox",
          "hasAttachment": "Any",
          "importance": "Any"
      }
   },
   "splitOn": "@triggerBody()?['value']"
}

Gatilho HTTP

Esse gatilho envia uma solicitação para o ponto de extremidade HTTP ou HTTPS especificado com base na agenda de recorrência especificada. Em seguida, o gatilho verifica a resposta para determinar se o fluxo de trabalho está sendo executado. Para obter mais informações, consulte Chamar pontos de extremidade de serviço por HTTP ou HTTPS a partir de Aplicativos Lógicos do Azure.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": "<query-parameters>",
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      }
   },
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Required

Property Value Tipo Description
method < tipo de método> String O método a ser usado para enviar a solicitação de saída: "GET", "PUT", "POST", "PATCH" ou "DELETE"
uri < HTTP-ou-HTTPS-endpoint-URL> String A URL do ponto de extremidade HTTP ou HTTPS para a qual você deseja enviar a solicitação de saída. Tamanho máximo da cadeia de caracteres: 2 KB

Para um serviço ou recurso do Azure, essa sintaxe de URI inclui a ID do recurso e o caminho para o recurso que você deseja acessar.
frequency < time-unit> String A unidade de tempo que descreve com que frequência o acionador dispara: "Segundo", "Minuto", "Hora", "Dia", "Semana", "Mês"
interval < número de unidades de tempo> Integer Um valor que especifica com que frequência o acionador é disparado com base na frequência, que é o número de unidades de tempo a aguardar até que o acionador seja acionado novamente

Aqui estão os intervalos mínimos e máximos:

- Mês: 1-16 meses
- Dia: 1-500
dias - Hora: 1-12.000 horas
- Minuto: 1-72.000 minutos
- Segundo: 1-9.999.999 segundos

Por exemplo, se o intervalo for 6, e a frequência for "Mês", a recorrência será a cada 6 meses.

Optional

Property Value Tipo Description
headers < cabeçalho-conteúdo> Objeto JSON Todos os cabeçalhos que você precisa incluir com a solicitação

Por exemplo, para definir o idioma e o tipo:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
queries < query-parameters> Objeto JSON Todos os parâmetros de consulta que você precisa usar na solicitação

Por exemplo, o "queries": { "api-version": "2018-01-01" }objeto adiciona?api-version=2018-01-01 à solicitação.
body < conteúdo do corpo> Objeto JSON O conteúdo da mensagem para enviar como carga de solicitação
authentication < authentication-type-and-property-values> Objeto JSON O modelo de autenticação que a solicitação usa para autenticar solicitações de saída. Para obter mais informações, confira Adicionar autenticação a chamadas de saída. Além do Agendador, a propriedade authority tem suporte. Quando não especificado, o valor padrão é https://management.azure.com/, mas você pode usar um valor diferente.
retryPolicy > type < repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
runs < max-runs> Integer Por padrão, as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
maximumWaitingRuns < max-runs-queue> Integer Quando o fluxo de trabalho já está executando o número máximo de instâncias, que você pode alterar com base na propriedade, todas as runtimeConfiguration.concurrency.runs novas execuções são colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
operationOptions < operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Outputs

Element Tipo Description
headers Objeto JSON Os cabeçalhos da resposta
body Objeto JSON O corpo da resposta
status code Integer O código de status da resposta

Requisitos para as solicitações de entrada

Para funcionar bem com seu aplicativo lógico, o ponto de extremidade deve estar de acordo com um padrão de gatilho específico ou o contrato e reconhecer estas propriedades de resposta:

Property Required Description
Código de status Yes O código de status "200 OK" inicia uma execução. Qualquer outro código de status não inicia uma execução.
Cabeçalho de repetição após No O número de segundos até o seu aplicativo lógico pesquisar o ponto de extremidade novamente
Cabeçalho de localização No A URL a chamar no próximo intervalo de sondagem. Se não for especificada, a URL original será usada.

Exemplo de comportamentos para diferentes solicitações

Código de status Tentar novamente após Behavior
200 {none} Execute o fluxo de trabalho e verifique novamente se há mais dados após a recorrência definida.
200 10 segundos Execute o fluxo de trabalho e verifique novamente se há mais dados após 10 segundos.
202 60 segundos Não dispara o fluxo de trabalho. A próxima tentativa ocorre em um minuto, sujeito à recorrência definida. Se a recorrência definida for inferior a um minuto, o cabeçalho retry-after terá precedência. Caso contrário, a recorrência definida será usada.
400 {none} Solicitação inválida, não execute o fluxo de trabalho. Se nenhum retryPolicy for definido, a política padrão será usada. Após a quantidade de novas tentativas ter sido atingida, o gatilho buscará novamente os dados após a recorrência definida.
500 {none} Erro do servidor, não execute o fluxo de trabalho. Se nenhum retryPolicy for definido, a política padrão será usada. Após a quantidade de novas tentativas ter sido atingida, o gatilho buscará novamente os dados após a recorrência definida.

Gatilho HTTPWebhook

Esse acionador permite que seu aplicativo lógico seja chamado criando um terminal que possa registrar uma assinatura chamando o URL do terminal especificado. Quando você cria esse acionador em seu fluxo de trabalho, uma solicitação de saída faz a chamada para registrar a assinatura. Dessa forma, o gatilho pode começar a ouvir eventos. Quando uma operação torna esse acionador inválido, uma solicitação de saída faz automaticamente a chamada para cancelar a assinatura. Para obter mais informações, consulte as assinaturas do Ponto de Extremidade.

Você também pode especificar limites assíncronos em um gatilho HTTPWebhook . Comportamento do gatilho depende das seções que você use ou omite.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<endpoint-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": { "<retry-behavior>" }
      },
      "unsubscribe": {
         "method": "<method-type>",
         "url": "<endpoint-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" }
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Alguns valores, como < o tipo >, estão disponíveis para os objetos e "subscribe" os "unsubscribe" objetos.

Required

Value Tipo Description
< tipo de método> String O método HTTP a ser usado para a solicitação de inscrição: "GET", "PUT", "POST", "PATCH" ou "DELETE"
< endpoint-subscribe-URL> String O URL do ponto final para onde enviar o pedido de subscrição

Optional

Value Tipo Description
< tipo de método> String O método HTTP a ser usado para a solicitação de cancelamento: "GET", "PUT", "POST", "PATCH" ou "DELETE"
< endpoint-unsubscribe-URL> String A URL do ponto de extremidade para onde enviar a solicitação de cancelamento
< conteúdo do corpo> String Qualquer conteúdo de mensagem para enviar na solicitação de assinatura ou cancelamento
< tipo de autenticação> Objeto JSON O modelo de autenticação que a solicitação usa para autenticar solicitações de saída. Para obter mais informações, confira Adicionar autenticação a chamadas de saída.
< repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
< max-runs> Integer Por padrão, todas as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
< max-runs-queue> Integer Quando o fluxo de trabalho já está executando o número máximo de instâncias, que você pode alterar com base na propriedade, todas as runtimeConfiguration.concurrency.runs novas execuções são colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
< operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Outputs

Element Tipo Description
headers Objeto JSON Os cabeçalhos da resposta
body Objeto JSON O corpo da resposta
código de status Integer O código de status da resposta

Example

Esse acionador cria uma assinatura para o terminal especificado, fornece um URL de retorno de chamada exclusivo e aguarda por artigos de tecnologia recém-publicados.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "POST",
         "uri": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{listCallbackUrl()}",
            "hub.mode": "subscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         },
      },
      "unsubscribe": {
         "method": "POST",
         "url": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{workflow().endpoint}@{listCallbackUrl()}",
            "hub.mode": "unsubscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         }
      }
   }
}

Gatilho de recorrência

Esse acionador é executado com base no agendamento de recorrência especificado e fornece uma maneira fácil de criar um fluxo de trabalho regularmente em execução.

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
      "startTime": "<start-date-time-with-format-YYYY-MM-DDThh:mm:ss>",
      "timeZone": "<time-zone>",
      "schedule": {
         // Applies only when frequency is Day or Week. Separate values with commas.
         "hours": [ <one-or-more-hour-marks> ], 
         // Applies only when frequency is Day or Week. Separate values with commas.
         "minutes": [ <one-or-more-minute-marks> ], 
         // Applies only when frequency is Week. Separate values with commas.
         "weekDays": [ "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday" ] 
      }
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Required

Value Tipo Description
< time-unit> String A unidade de tempo que descreve com que frequência o acionador dispara: "Segundo", "Minuto", "Hora", "Dia", "Semana", "Mês"
< número de unidades de tempo> Integer Um valor que especifica com que frequência o acionador é disparado com base na frequência, que é o número de unidades de tempo a aguardar até que o acionador seja acionado novamente

Aqui estão os intervalos mínimos e máximos:

- Mês: 1-16 meses
- Dia: 1-500
dias - Hora: 1-12.000 horas
- Minuto: 1-72.000 minutos
- Segundo: 1-9.999.999 segundos

Por exemplo, se o intervalo for 6, e a frequência for "Mês", a recorrência será a cada 6 meses.

Optional

Value Tipo Description
< start-date-time-with-format-YYYY-MM-DDThh:mm:ss> String A data e hora de início neste formato:

AAAA-MM-DDThh:mm:ss se você especificar um fuso horário

-or-

AAAA-MM-DDThh:mm:ssZ se você não especificar um fuso horário

Por exemplo, se você quiser 18 de setembro de 2017 às 14h00, especifique "2017-09-18T14:00:00" e especifique um fuso horário como "Hora Padrão do Pacífico" ou especifique "2017-09-18T14:00:00Z" sem um fuso horário.

Observação: Esta hora de início tem um máximo de 49 anos no futuro e deve seguir a especificação de data e hora ISO 8601 no formato de data e hora UTC, mas sem uma diferença UTC . Se você não especificar um fuso horário, será necessário adicionar a letra "Z" no final sem espaços. Essa letra "Z" refere-se ao equivalente em hora náutica.

Para agendamentos simples, a hora de início é a primeira ocorrência, enquanto que, para agendamentos complexos, o gatilho não é disparado antes da hora de início. Para obter mais informações sobre datas e horas de início, consulte Criar e agendar tarefas de execução regularmente.
< fuso horário> String Aplica-se somente quando você especifica uma hora de início, porque o gatilho não aceita diferença UTC. Especifique o fuso horário que deseja aplicar.
< marcas de uma ou mais horas> Inteiro ou matriz de inteiros Se você selecionar "Dia" ou "Semana" para frequency, poderá selecionar um ou mais números inteiros, de 0 a 23, separados por vírgulas, como as horas do dia nas quais você deseja executar o fluxo de trabalho.

Por exemplo, se você especificar "10", "12" e "14", você obterá 10h, 12h e 14h como as marcas de hora.
< marcas de um ou mais minutos> Inteiro ou matriz de inteiros Se você selecionar "Dia" ou "Semana" para frequency, poderá selecionar um ou mais números inteiros, de 0 a 59, separados por vírgulas, como os minutos da hora nos quais você deseja executar o fluxo de trabalho.

Por exemplo, você pode especificar "30" como a marca de minutos e, usando o exemplo anterior como as horas do dia, você obtém 10h30, 12h30 e 14h30.
weekDays Cadeia de caracteres ou matriz de cadeia de caracteres Se você selecionar "Semana" para frequency, poderá selecionar um ou mais dias, separados por vírgulas, nos quais deseja executar o fluxo de trabalho: “segunda-feira”, “terça-feira”, “quarta-feira”, “quinta-feira”, “Sexta-feira”, “sábado” e “domingo”
< max-runs> Integer Por padrão, todas as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
< max-runs-queue> Integer Quando o fluxo de trabalho já está executando o número máximo de instâncias, que você pode alterar com base na propriedade, todas as runtimeConfiguration.concurrency.runs novas execuções são colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
< operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Exemplo 1

Esse gatilho de recorrência básica executa diariamente:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

Exemplo 2

É possível especificar uma data e hora de início para acionar o gatilho. Esse gatilho de recorrência inicia na data especificada e, em seguida, é acionado diariamente:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1,
      "startTime": "2017-09-18T00:00:00Z"
   }
}

Exemplo 3

Esse gatilho de recorrência inicia em 9 de setembro de 2017 às 14h00 e é acionado semanalmente às segundas-feiras às 10h30, 12h30 e 14h30, Hora Padrão do Pacífico:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Week",
      "interval": 1,
      "schedule": {
         "hours": [ 10, 12, 14 ],
         "minutes": [ 30 ],
         "weekDays": [ "Monday" ]
      },
      "startTime": "2017-09-07T14:00:00",
      "timeZone": "Pacific Standard Time"
   }
}

Para obter mais informações e exemplos para esse gatilho, consulte Criar e agendar tarefas de execução regularmente.

Gatilho de solicitação

Esse acionador faz seu aplicativo lógico ser chamado criando um terminal que pode aceitar solicitações de entrada. Para esse acionador, forneça um esquema JSON que descreva e valide a carga útil ou entradas que o acionador recebe da solicitação de entrada. O esquema também facilita a referência das propriedades do acionador de ações posteriores no fluxo de trabalho.

Note

O nome original do gatilho de solicitação era manual, que ainda pode aparecer em alguns lugares. Esse nome foi alterado para criar mais consistência em torno do tipo de padrão de fluxo de trabalho que você usa o gatilho para compilar.

Para chamar esse gatilho, você deve usar a listCallbackUrlAPI, descrita na API REST do Serviço de Fluxo de Trabalho. Para saber como usar esse gatilho como um ponto de extremidade HTTP, consulte Chamar, disparar ou aninhar fluxos de trabalho com pontos de extremidade HTTP.

"Request": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "<method-type>",
      "relativePath": "<relative-path-for-accepted-parameter>",
      "schema": {
         "type": "object",
         "properties": { 
            "<property-name>": {
               "type": "<property-type>"
            }
         },
         "required": [ "<required-properties>" ]
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      },
   },
   "operationOptions": "<operation-option>"
}

Required

Value Tipo Description
< property-name> String O nome de uma propriedade no esquema JSON, que descreve a carga útil
< tipo de propriedade> String O tipo da propriedade

Optional

Value Tipo Description
< tipo de método> String O método que as solicitações recebidas devem usar para chamar seu aplicativo lógico: "GET", "PUT", "POST", "PATCH", "DELETE"
< relative-path-for-accepted-parameter> String O caminho relativo para o parâmetro que o URL do seu endpoint pode aceitar
< propriedades obrigatórias> Array Uma ou mais propriedades que exigem valores
< max-runs> Integer Por padrão, todas as instâncias de fluxo de trabalho são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar simultaneidade do gatilho.
< max-runs-queue> Integer Quando o fluxo de trabalho já está executando o número máximo de instâncias, que você pode alterar com base na propriedade, todas as runtimeConfiguration.concurrency.runs novas execuções são colocadas nessa fila até o limite padrão. Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
< operation-option> String Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Example

Esse acionador especifica que uma solicitação recebida deve usar o método HTTP POST para chamar o acionador e inclui um esquema que valide a entrada da solicitação recebida:

"Request": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "POST",
      "schema": {
         "type": "object",
         "properties": {
            "customerName": {
               "type": "String"
            },
            "customerAddress": { 
               "type": "Object",
               "properties": {
                  "streetAddress": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}

Condições de gatilho

Para qualquer gatilho, e apenas gatilhos, você pode incluir uma matriz que contém uma ou mais expressões para condições que determinam se o fluxo de trabalho deve ser executado. Para adicionar a propriedade conditions a um gatilho no seu fluxo de trabalho, abra o aplicativo lógico no editor de visualização de código.

Por exemplo, você pode especificar um gatilho é acionado somente quando um site da Web retorna um erro interno do servidor, fazendo referência a código de status do gatilho na conditions propriedade:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Hour",
      "interval": 1
   },
   "conditions": [ {
      "expression": "@equals(triggers().code, 'InternalServerError')"
   } ]
}

Por padrão, um gatilho dispara somente depois de receber uma resposta "200 OK". Quando uma expressão faz referência ao código de status de um acionador, o comportamento padrão do acionador é substituído. Portanto, se você quiser que o gatilho seja acionado para mais de um código de status, como "200" e o código de status "201", você deve incluir essa expressão como sua condição:

@or(equals(triggers().code, 200),equals(triggers().code, 201))

Disparar várias execuções de fluxo de trabalho em uma matriz

Em cenários em que seu fluxo de trabalho usa um gatilho que recebe matrizes para processamento, às vezes, usar um loop For para cada loop pode demorar muito. Para acelerar o processamento, uma opção é criar branches paralelos. Ou, se o gatilho der suporte à depuração, você poderá fazer com que o gatilho divida os itens da matriz e execute uma instância de fluxo de trabalho separada para cada item de matriz. Essa opção é útil, por exemplo, quando você deseja sondar um ponto de extremidade que pode retornar vários novos itens entre intervalos de sondagem.

Somente os gatilhos que podem aceitar matrizes e retornar matrizes dão suporte a essa funcionalidade, como Solicitação, HTTP, Barramento de Serviço do Azure ou Office Outlook 365. Para esses gatilhos, no designer de fluxo de trabalho, você pode ativar a configuração Dividir, que adiciona a splitOn propriedade à definição de gatilho.

Note

Se o arquivo Swagger do gatilho descrever uma carga que é uma matriz, a splitOn propriedade será adicionada automaticamente à sua definição de gatilho. Caso contrário, e o gatilho pode aceitar matrizes, você pode adicionar a propriedade ao conteúdo de resposta que contém a matriz que você deseja remover.

Antes de usar a funcionalidade de remoção, examine as seguintes considerações:

  • Se a simultaneidade do gatilho também estiver ativada, a divisão no limite será significativamente reduzida. Se o número de itens exceder esse limite, o recurso Dividir na funcionalidade não estará disponível.

  • O recurso Dividir na funcionalidade não funciona com o padrão de resposta síncrona. Se um fluxo de trabalho usa a ação Resposta e ativa a configuração Dividir na configuração é executada de forma assíncrona e envia imediatamente uma 202 ACCEPTED resposta.

  • Existe um limite no número de itens de matriz que a divisão pode processar em uma única execução de fluxo de trabalho. Para obter mais informações, consulte Looping e limites de envio em lote.

  • Se você configurar a depuração por meio da definição de gatilho usando a splitOn propriedade, não poderá referenciar ou acessar diretamente as propriedades que existem fora da matriz. Para evitar falhas, preceda a referência com o ? operador. Para obter exemplos, consulte Ativar a depuração na definição do gatilho.

Ativar a depuração por meio do designer

Siga estas etapas no designer de fluxo de trabalho para configurar a remoção em um gatilho em que há suporte:

  1. No [portal do Azure], abra o recurso do aplicativo lógico.

  2. Abra o fluxo de trabalho no designer.

  3. No designer, selecione o gatilho que dá suporte a depuração para abrir o painel de informações do gatilho.

  4. Na guia Configurações , em Geral, localize a configuração Dividir e altere a configuração para Ativar se não estiver ativada.

Ativar a depuração na definição de gatilho

Alguns gatilhos manipulam matrizes, mas a configuração Dividir na configuração não está disponível por meio do designer. Para esses gatilhos, siga estas etapas para adicionar a splitOn propriedade na definição do gatilho:

Por exemplo, suponha que seu fluxo de trabalho use o gatilho HTTP para chamar uma API e obtenha a seguinte resposta:

{
   "Status": "Succeeded",
   "Rows": [ 
      { 
         "id": 938109380,
         "name": "customer-name-one"
      },
      {
         "id": 938109381,
         "name": "customer-name-two"
      }
   ]
}

Se o fluxo de trabalho precisar apenas do conteúdo da Rows matriz, você poderá adicionar e configurar a splitOn propriedade na definição de gatilho, conforme mostrado no exemplo a seguir:

"HTTP_trigger_debatch": {
   "type": "Http",
    "inputs": {
        "uri": "https://mydomain.com/myAPI",
        "method": "GET"
    },
   "recurrence": {
      "frequency": "Second",
      "interval": 1
    },
    "splitOn": "@triggerBody()?.Rows"
}

Note

Lembre-se de que, se você usar a splitOn propriedade, não poderá acessar ou referenciar diretamente as propriedades que existem fora da matriz. Para evitar falhas, use o ? operador conforme mostrado nos exemplos.

Sua definição de fluxo de trabalho também pode usar splitOn e @triggerBody().name obter valores da name propriedade. Esses valores são "customer-name-one" da primeira execução do fluxo de trabalho e "customer-name-two" da segunda execução do fluxo de trabalho. Para este exemplo, as saídas do gatilho se parecem com os seguintes valores:

{
   "body": {
      "id": 938109380,
      "name": "customer-name-one"
   }
}
{
   "body": {
      "id": 938109381,
      "name": "customer-name-two"
   }
}

Visão geral das ações

Os Aplicativos Lógicos do Azure fornecem vários tipos de ação - cada um com entradas diferentes que definem o comportamento exclusivo de uma ação. As ações têm esses elementos de alto nível, embora alguns sejam opcionais:

"<action-name>": {
   "type": "<action-type>",
   "inputs": { 
      "<input-name>": { "<input-value>" },
      "retryPolicy": "<retry-behavior>" 
   },
   "runAfter": { "<previous-trigger-or-action-status>" },
   "runtimeConfiguration": { "<runtime-config-options>" },
   "operationOptions": "<operation-option>"
},

Required

Value Tipo Description
< nome da ação> String O nome da ação
< tipo de ação> String O tipo de ação, por exemplo, "Http" ou "ApiConnection"
< nome da entrada> String O nome de uma entrada que define o comportamento da ação
< input-value> Various O valor de entrada, que pode ser uma cadeia de caracteres, inteiro, objeto JSON e assim por diante
< previous-trigger-or-action-status> Objeto JSON O nome e o status resultante para o gatilho ou ação que deve ser executado imediatamente antes de executar esta ação atual

Optional

Value Tipo Description
< repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para saber mais, confira Políticas de repetição.
< runtime-config-options> Objeto JSON Para algumas ações, você pode alterar o comportamento da ação em tempo de execução, definindo runtimeConfiguration propriedades. Para obter mais informações, consulte Configurações de runtime.
< operation-option> String Para algumas ações, você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação.

Lista de tipos de ação

Aqui estão alguns tipos de ação comumente usadas:

Ações internas

Tipo de ação Description
Compose Cria uma única saída de entradas, que podem ter vários tipos.
Executar o código JavaScript Execute trechos de código JavaScript que se enquadram dentro de critérios específicos. Para obter os requisitos de código e mais informações, consulte Adicionar e executar trechos de código com código embutido.
Function Chama uma função do Azure.
HTTP Chama um ponto de extremidade HTTP.
Join Cria uma string de todos os itens em uma matriz e separa esses itens com um caractere delimitador especificado.
Analisar JSON Cria conteúdo fácil de usar tokens de propriedades no JSON. Você pode fazer referência a essas propriedades, incluindo os tokens em seu aplicativo lógico.
Query Cria uma matriz de itens em outra matriz com base em uma condição ou filtro.
Response Cria uma resposta a uma chamada de entrada ou a solicitação.
Select Cria uma matriz com objetos JSON, transformando itens de outra matriz com base no mapa especificado.
Table Cria uma tabela CSV ou HTML de uma matriz.
Terminate Interrompe um fluxo de trabalho ativo.
Wait Pausa seu fluxo de trabalho por um período especificado ou até a data e a hora especificadas.
Workflow Aninha um fluxo de trabalho dentro de outro fluxo de trabalho.

Ações de API gerenciadas

Tipo de ação Description
ApiConnection Chama um ponto de extremidade HTTP usando uma API gerenciada pela Microsoft.
ApiConnectionWebhook Funciona como o Webhook HTTP, mas usa uma API gerenciada pela Microsoft.

Ações de controle de fluxo de trabalho

Essas ações ajudam você a controlar a execução do fluxo de trabalho e incluem outras ações. De fora de uma ação de fluxo de trabalho de controle, você pode referenciar diretamente as ações dentro dessa ação de fluxo de trabalho de controle. Por exemplo, se você tiver uma Http ação dentro de um escopo, poderá referenciar a expressão @body('Http') de qualquer lugar no fluxo de trabalho. No entanto, as ações que existem dentro de uma ação de fluxo de trabalho de controle podem apenas "correr atrás" outras ações que estão na mesma estrutura de fluxo de trabalho de controle.

Tipo de ação Description
ForEach Execute as mesmas ações em um loop para cada item em uma matriz.
If Execute ações com base em se a condição especificada é verdadeira ou falsa.
Scope Execute ações com base no status do grupo de um conjunto de ações.
Switch Execute ações organizadas em casos em que valores de expressões, objetos ou tokens correspondam aos valores especificados por cada caso.
Until Execute ações em um loop até que a condição especificada seja verdadeira.

Ações – uma referência detalhada

Ação APIConnection

Essa ação envia uma solicitação HTTP para uma API gerenciada pela Microsoft e requer informações sobre a API e os parâmetros, além de uma referência a uma conexão válida.

"<action-name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<api-name>']['connectionId']"
         },
         "<other-action-specific-input-properties>"        
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": "<retry-behavior>",
      "queries": { "<query-parameters>" },
      "<other-action-specific-properties>"
    },
    "runAfter": {}
}

Required

Value Tipo Description
< nome da ação> String O nome da ação fornecida pelo conector
< nome da api> String O nome da API gerenciada pela Microsoft usada para a conexão
< tipo de método> String O método HTTP para chamar a API: "GET", "PUT", "POST", "PATCH" ou "DELETE"
< api-operation> String A operação de API para chamar

Optional

Value Tipo Description
< other-action-specific-input-properties> Objeto JSON Quaisquer outras propriedades de entrada que se aplicam a essa ação específica
< repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
< query-parameters> Objeto JSON Quaisquer parâmetros de consulta para incluir na chamada da API.

Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
< propriedades específicas de outra ação> Objeto JSON Outras propriedades que se aplicam a essa ação específica

Example

Esta definição descreve a ação Enviar um e-mail para o conector do Office 365 Outlook, que é uma API gerenciada pela Microsoft:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "Thank you for your membership!",
         "Subject": "Hello and welcome!",
         "To": "Sophie.Owen@contoso.com"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "POST",
      "path": "/Mail"
    },
    "runAfter": {}
}

Ação APIConnectionWebhook

Essa ação envia uma solicitação de assinatura por HTTP para um ponto de extremidade usando uma API gerenciada pela Microsoft, fornece uma URL de retorno de chamada para onde o ponto de extremidade pode enviar uma resposta e aguarda o ponto de extremidade responder. Para obter mais informações, consulte as assinaturas do Ponto de Extremidade.

"<action-name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<api-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": "<retry-behavior>",
         "queries": { "<query-parameters>" },
         "<other-action-specific-input-properties>"
      },
      "unsubscribe": {
         "method": "<method-type>",
         "uri": "<api-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "<other-action-specific-properties>"
      },
   },
   "runAfter": {}
}

Alguns valores, como < o tipo >, estão disponíveis para os objetos e "subscribe" os "unsubscribe" objetos.

Required

Value Tipo Description
< nome da ação> String O nome da ação fornecida pelo conector
< tipo de método> String O método HTTP a ser usado para assinar ou cancelar a assinatura de um terminal: "GET", "PUT", "POST", "PATCH" ou "DELETE"
< api-subscribe-URL> String O URI a ser usado para assinar a API

Optional

Value Tipo Description
< api-unsubscribe-URL> String O URI a ser usado para cancelar a inscrição da API
< cabeçalho-conteúdo> Objeto JSON Quaisquer cabeçalhos para enviar a solicitação

Por exemplo, para definir o idioma e o tipo em uma solicitação:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
< conteúdo do corpo> Objeto JSON Qualquer conteúdo da mensagem para enviar a solicitação
< tipo de autenticação> Objeto JSON O modelo de autenticação que a solicitação usa para autenticar solicitações de saída. Para obter mais informações, confira Adicionar autenticação a chamadas de saída.
< repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
< query-parameters> Objeto JSON Os parâmetros de consulta para incluir com a chamada à API

Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
< other-action-specific-input-properties> Objeto JSON Quaisquer outras propriedades de entrada que se aplicam a essa ação específica
< propriedades específicas de outra ação> Objeto JSON Outras propriedades que se aplicam a essa ação específica

Você também pode especificar limites em uma ação ApiConnectionWebhook da mesma forma que os limites assíncronos HTTP.

Compor a ação

Esta ação cria uma única saída de várias entradas, incluindo expressões. Tanto a saída quanto as entradas podem ter qualquer tipo compatível com os Aplicativos Lógicos do Azure, como matrizes, objetos JSON, XML e binário. Em seguida, você pode usar a saída da ação em outras ações.

"Compose": {
   "type": "Compose",
   "inputs": "<inputs-to-compose>",
   "runAfter": {}
},

Required

Value Tipo Description
< inputs-to-compose> Any As entradas para a criação de uma única saída

Exemplo 1

Esta definição de ação mescla abcdefg com um espaço à direita e o valor 1234:

"Compose": {
   "type": "Compose",
   "inputs": "abcdefg 1234",
   "runAfter": {}
},

Aqui está a saída que essa ação cria:

abcdefg 1234

Exemplo 2

Esta definição de ação mescla uma variável de string que contém abcdefg e uma variável inteira que contém 1234:

"Compose": {
   "type": "Compose",
   "inputs": "@{variables('myString')}@{variables('myInteger')}",
   "runAfter": {}
},

Aqui está a saída que essa ação cria:

"abcdefg1234"

Executar a ação do código JavaScript

Essa ação executa um trecho de código JavaScript e retorna os resultados por meio de um token ao qual as ações subsequentes no fluxo de trabalho podem fazer referência.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "<JavaScript-code-snippet>",
      "explicitDependencies": {
         "actions": [ <preceding-actions> ],
         "includeTrigger": true
      }
   },
   "runAfter": {}
}

Required

Value Tipo Description
< JavaScript-code-snippet> Varies O código JavaScript que você deseja executar. Para obter requisitos de código e mais informações, confira Executar snippets de código em fluxos de trabalho.

No atributo code, seu trecho de código pode usar o objeto somente leitura workflowContext como entrada. Este objeto tem subpropriedades que dão ao seu código acesso às saídas do gatilho e quaisquer ações anteriores em seu fluxo de trabalho. Para obter mais informações sobre o objeto workflowContext, confira Referenciar os resultados do gatilho e da ação usando o objeto workflowContext.

Necessário em alguns casos

O atributo explicitDependencies especifica que você deseja incluir explicitamente os resultados do gatilho, ações anteriores ou ambos como dependências para o trecho de código. Para obter mais informações sobre como adicionar essas dependências, confira Adicionar dependências como parâmetros a uma ação de código embutido.

Para o atributo includeTrigger, você pode especificar os valores true ou false.

Value Tipo Description
< preceding-actions> Matriz de cadeia de caracteres Uma matriz com os nomes das ações no formato JSON como dependências. Use os nomes de ação que aparecem em sua definição de fluxo de trabalho em que os nomes de ação usam sublinhados (_), não espaços (" ").

Exemplo 1

Esta ação executa o código que obtém o nome do fluxo de trabalho do aplicativo lógico e retorna o texto "Olá, Mundo de <nome do aplicativo lógico>" como resultado. Neste exemplo, o código faz referência ao nome do fluxo de trabalho acessando a propriedade workflowContext.workflow.name por meio do objeto somente leitura workflowContext. Para obter mais informações sobre como usar o objeto workflowContext, consulte Gatilho de referência e resultados de ação no seu código.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var text = \"Hello world from \" + workflowContext.workflow.name;\r\n\r\nreturn text;"
   },
   "runAfter": {}
}

Exemplo 2

Essa ação executa o código em um fluxo de trabalho de aplicativo lógico que é acionado quando um novo email chega em uma conta do Outlook. O fluxo de trabalho também usa uma ação Enviar email de aprovação do Office 365 Outlook que encaminha o conteúdo do email recebido junto com uma solicitação de aprovação.

O código extrai os endereços de email da propriedade Body da mensagem de email e retorna os endereços junto com o valor da propriedade SelectedOption da ação de aprovação. A ação inclui explicitamente a ação Enviar email de aprovação como uma dependência no objeto actions dentro do objeto explicitDependencies.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var myResult = /(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\r\n\r\nvar email = workflowContext.trigger.outputs.body.Body;\r\n\r\nvar reply = workflowContext.actions.Send_approval_email.outputs.body.SelectedOption;\r\n\r\nreturn email.match(myResult) + \" - \" + reply;\r\n;",
      "explicitDependencies": {
         "actions": [
            "Send_approval_email"
         ]
      }
   },
   "runAfter": {}
}

Ação de função

Essa ação chama uma função do Azure criada anteriormente.

"<Azure-function-name>": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "<Azure-function-ID>"
      },
      "method": "<method-type>",
      "headers": { "<header-content>" },
      "body": { "<body-content>" },
      "queries": { "<query-parameters>" } 
   },
   "runAfter": {}
}

Required

Value Tipo Description
< ID da função do Azure> String O ID do recurso para a função do Azure que você deseja chamar. Aqui está o formato para este valor:

"/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Web/sites/<Azure-function-app-name>/functions/<Azure-function-name>"
< tipo de método> String O método HTTP a ser usado para chamar a função: "GET", "PUT", "POST", "PATCH" ou "DELETE"

Se não for especificado, o padrão é o método "POST".

Optional

Value Tipo Description
< cabeçalho-conteúdo> Objeto JSON Nenhum cabeçalho a ser enviado com a chamada

Por exemplo, para definir o idioma e o tipo em uma solicitação:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
< conteúdo do corpo> Objeto JSON Qualquer conteúdo da mensagem para enviar a solicitação
< query-parameters> Objeto JSON Os parâmetros de consulta para incluir com a chamada à API

Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
< other-action-specific-input-properties> Objeto JSON Quaisquer outras propriedades de entrada que se aplicam a essa ação específica
< propriedades específicas de outra ação> Objeto JSON Outras propriedades que se aplicam a essa ação específica

Ao salvar seu aplicativo lógico, os Aplicativos Lógicos do Azure realizam essas verificações na função referenciada:

  • Seu fluxo de trabalho deve ter acesso à função.

  • Seu fluxo de trabalho pode usar apenas um gatilho HTTP padrão ou gatilho JSON webhook genérico.

    Os Aplicativos Lógicos do Azure obtêm e armazenam em cache a URL do gatilho, que é usada em tempo de execução. No entanto, se qualquer operação invalidar a URL armazenada em cache, a ação de função falhará em runtime. Para corrigir esse problema, salve o aplicativo lógico novamente para que o aplicativo lógico receba e armazene novamente o URL do acionador.

  • A função não pode ter nenhuma rota definida.

  • Apenas os níveis de autorização "função" e "anônimo" são permitidos.

Example

Essa definição de ação chama a função de "GetProductID" criada anteriormente:

"GetProductID": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "/subscriptions/<XXXXXXXXXXXXXXXXXXXX>/resourceGroups/myLogicAppResourceGroup/providers/Microsoft.Web/sites/InventoryChecker/functions/GetProductID"
      },
      "method": "POST",
      "headers": { 
          "x-ms-date": "@utcnow()"
       },
      "body": { 
          "Product_ID": "@variables('ProductID')"
      }
   },
   "runAfter": {}
}

Ação HTTP

Essa ação envia uma solicitação ao ponto de extremidade HTTP ou HTTPS especificado e verifica a resposta para determinar se o fluxo de trabalho está sendo executado. Para obter mais informações, consulte Chamar pontos de extremidade de serviço por HTTP ou HTTPS a partir de Aplicativos Lógicos do Azure.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": { "<query-parameters>" },
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      },
   },
   "runAfter": {}
}

Required

Property Value Tipo Description
method < tipo de método> String O método a ser usado para enviar a solicitação de saída: "GET", "PUT", "POST", "PATCH" ou "DELETE"
uri < HTTP-ou-HTTPS-endpoint-URL> String A URL do ponto de extremidade HTTP ou HTTPS para a qual você deseja enviar a solicitação de saída. Tamanho máximo da cadeia de caracteres: 2 KB

Para um serviço ou recurso do Azure, essa sintaxe de URI inclui a ID do recurso e o caminho para o recurso que você deseja acessar.

Optional

Property Value Tipo Description
headers < cabeçalho-conteúdo> Objeto JSON Todos os cabeçalhos que você precisa incluir com a solicitação

Por exemplo, para definir o idioma e o tipo:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
queries < query-parameters> Objeto JSON Todos os parâmetros de consulta que você precisa usar na solicitação

Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada.
body < conteúdo do corpo> Objeto JSON O conteúdo da mensagem para enviar como carga de solicitação
authentication < authentication-type-and-property-values> Objeto JSON O modelo de autenticação que a solicitação usa para autenticar solicitações de saída. Para obter mais informações, confira Adicionar autenticação a chamadas de saída. Além do Agendador, a propriedade authority tem suporte. Quando não especificado, o valor padrão é https://management.azure.com/, mas você pode usar um valor diferente.
retryPolicy > type < repetição de comportamento> Objeto JSON Personaliza o comportamento de repetição para falhas intermitentes, que têm o código de status 408, 429 e 5XX e todas as exceções de conectividade. Para mais informações, consulte Políticas de repetição.
< other-action-specific-input-properties> < input-property> Objeto JSON Quaisquer outras propriedades de entrada que se aplicam a essa ação específica
< propriedades específicas de outra ação> < property-value> Objeto JSON Outras propriedades que se aplicam a essa ação específica

Example

Esta definição de ação obtém as últimas notícias enviando uma solicitação para o terminal especificado:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "https://mynews.example.com/latest"
   }
}

Ação de junção

Essa ação cria uma cadeia de caracteres de todos os itens em uma matriz e separa os itens com o caractere delimitador especificado.

"Join": {
   "type": "Join",
   "inputs": {
      "from": <array>,
      "joinWith": "<delimiter>"
   },
   "runAfter": {}
}

Required

Value Tipo Description
< array> Array A matriz ou expressão que fornece os itens de origem. Se você especificar uma expressão, coloque essa expressão entre aspas duplas.
< delimitador> Cadeia de caracteres única O caractere que separa cada item na cadeia de caracteres

Example

Suponha que você tenha uma variável "myIntegerArray" criada anteriormente que contenha essa matriz de inteiros:

[1,2,3,4]

Esta definição de ação obtém os valores da variável usando a função variables()em uma expressão e cria essa sequência com esses valores, que são separados por uma vírgula:"1,2,3,4"

"Join": {
   "type": "Join",
   "inputs": {
      "from": "@variables('myIntegerArray')",
      "joinWith": ","
   },
   "runAfter": {}
}

Ação analisar JSON

Essa ação cria campos ou tokens amigáveis das propriedades no conteúdo JSON. Você pode acessar essas propriedades em seu aplicativo lógico usando os tokens. Por exemplo, quando você deseja usar a saída JSON de serviços como o Barramento de Serviço do Azure e o Banco de Dados do Azure Cosmos, é possível incluir essa ação em seu aplicativo lógico para poder referenciar mais facilmente os dados nessa saída.

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": "<JSON-source>",
         "schema": { "<JSON-schema>" }
      },
      "runAfter": {}
},

Required

Value Tipo Description
< Origem JSON> Objeto JSON O conteúdo JSON que você deseja analisar
< Esquema JSON> Objeto JSON O esquema JSON que descreve o conteúdo JSON subjacente, que a ação usa para analisar o conteúdo JSON de origem.

Dica: no designer de fluxo de trabalho, você pode fornecer o esquema ou fornecer um conteúdo de exemplo para que a ação possa gerar o esquema.

Example

Essa definição de ação cria esses tokens que você pode usar em seu fluxo de trabalho, mas somente em ações executadas seguindo a ação Analisar JSON :

FirstName, LastName, e Email

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": {
         "Member": {
            "Email": "Sophie.Owen@contoso.com",
            "FirstName": "Sophie",
            "LastName": "Owen"
         }
      },
      "schema": {
         "type": "object",
         "properties": {
            "Member": {
               "type": "object",
               "properties": {
                  "Email": {
                     "type": "string"
                  },
                  "FirstName": {
                     "type": "string"
                  },
                  "LastName": {
                     "type": "string"
                  }
               }
            }
         }
      }
   },
   "runAfter": { }
},

Neste exemplo, a propriedade "content" especifica o conteúdo JSON da ação a ser analisada. Você também pode fornecer esse conteúdo JSON como a carga útil da amostra para gerar o esquema.

"content": {
   "Member": { 
      "FirstName": "Sophie",
      "LastName": "Owen",
      "Email": "Sophie.Owen@contoso.com"
   }
},

A propriedade "esquema" Especifica o esquema JSON usado para descrever o conteúdo JSON:

"schema": {
   "type": "object",
   "properties": {
      "Member": {
         "type": "object",
         "properties": {
            "FirstName": {
               "type": "string"
            },
            "LastName": {
               "type": "string"
            },
            "Email": {
               "type": "string"
            }
         }
      }
   }
}

Ação de consulta

Essa ação cria uma matriz de itens na outra matriz com base em uma condição especificada ou o filtro.

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": <array>,
      "where": "<condition-or-filter>"
   },
   "runAfter": {}
}

Required

Value Tipo Description
< array> Array A matriz ou expressão que fornece os itens de origem. Se você especificar uma expressão, coloque essa expressão entre aspas duplas.
< condição ou filtro> String A condição usada para filtrar itens na matriz de origem

Observação: se nenhum valor atender à condição, a ação criará uma matriz vazia.

Example

Essa definição de ação cria uma matriz que tem valores maiores do que o valor especificado, o que é dois:

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": [ 1, 3, 0, 5, 4, 2 ],
      "where": "@greater(item(), 2)"
   }
}

Ação de resposta

Essa ação cria a carga para a resposta a uma solicitação HTTP.

"Response" {
    "type": "Response",
    "kind": "http",
    "inputs": {
        "statusCode": 200,
        "headers": { <response-headers> },
        "body": { <response-body> }
    },
    "runAfter": {}
},

Required

Value Tipo Description
< response-status-code> Integer O código de status HTTP enviado para a solicitação recebida. O código padrão é "200 OK", mas o código pode ser qualquer código de status válido que comece com 2xx, 4xx ou 5xx, mas não com 3xxx.

Optional

Value Tipo Description
< cabeçalhos de resposta> Objeto JSON Um ou mais cabeçalhos para incluir com a resposta
< corpo da resposta> Various O corpo da resposta, que pode ser uma string, um objeto JSON ou até mesmo conteúdo binário de uma ação anterior

Example

Esta definição de ação cria uma resposta a uma solicitação HTTP com o código de status, o corpo da mensagem e os cabeçalhos de mensagens especificados:

"Response": {
   "type": "Response",
   "inputs": {
      "statusCode": 200,
      "body": {
         "ProductID": 0,
         "Description": "Organic Apples"
      },
      "headers": {
         "x-ms-date": "@utcnow()",
         "content-type": "application/json"
      }
   },
   "runAfter": {}
}

Restrictions

Ao contrário de outras ações, a ação Resposta tem restrições especiais:

  • Seu fluxo de trabalho só pode usar a ação Resposta quando o fluxo de trabalho começa com um gatilho de solicitação HTTP, o que significa que seu fluxo de trabalho deve ser disparado por uma solicitação HTTP.

  • Seu fluxo de trabalho pode usar a ação Resposta em qualquer lugar, exceto dentro de loops Foreach , loops Until , incluindo loops sequenciais e branches paralelos.

  • A solicitação original obtém a resposta do fluxo de trabalho somente quando todas as ações exigidas pela ação de resposta são concluídas dentro do limite de tempo limite HTTP.

    No entanto, se o seu fluxo de trabalho chamar outro aplicativo lógico como um fluxo de trabalho aninhado, o fluxo de trabalho pai aguardará até que o fluxo de trabalho aninhado seja concluído, independentemente de quanto tempo passe antes que o fluxo de trabalho aninhado seja concluído.

  • Quando o fluxo de trabalho usa a ação Resposta e um padrão de resposta síncrona, o fluxo de trabalho também não pode usar o comando splitOn na definição de gatilho porque esse comando cria várias execuções. Verifique este caso quando o método PUT for usado e, se true, retorne uma resposta "solicitação incorreta".

    Caso contrário, se o fluxo de trabalho usar o comando splitOn e uma ação resposta , o fluxo de trabalho será executado de forma assíncrona e retornará imediatamente uma resposta "202 ACCEPTED".

  • Quando a execução do fluxo de trabalho atinge a ação Resposta , mas a solicitação de entrada já recebeu uma resposta, a ação resposta é marcada como "Falha" devido ao conflito. E, como resultado, a execução do seu aplicativo lógico também é marcado com status "Falha".

Selecionar ação

Essa ação cria uma matriz com objetos JSON, transformando itens de outra matriz com base no mapa especificado. O array de saída e o array de origem sempre tem o mesmo número de itens. Embora não seja possível alterar o número de objetos na matriz de saída, você pode adicionar ou remover propriedades e seus valores nesses objetos. A propriedade select especifica pelo menos um par de valores-chave que define o mapa para transformar itens na matriz de origem. Um par de valores-chave representa uma propriedade e seu valor em todos os objetos na matriz de saída.

"Select": {
   "type": "Select",
   "inputs": {
      "from": <array>,
      "select": { 
          "<key-name>": "<expression>",
          "<key-name>": "<expression>"        
      }
   },
   "runAfter": {}
},

Required

Value Tipo Description
< array> Array A matriz ou expressão que fornece os itens de origem. Certifique-se de que você coloque uma expressão entre aspas duplas.

Observação: se a matriz de origem estiver vazia, a ação criará uma matriz vazia.
< nome da chave> String O nome da propriedade atribuído ao resultado da <expressão>

Para adicionar uma nova propriedade em todos os objetos na matriz de saída, forneça um <nome-chave> para essa propriedade e uma <> para o valor da propriedade.

Para remover uma propriedade de todos os objetos na matriz, omita o < nome > para essa propriedade.
< expressão> String A expressão que transforma o item na matriz de origem e atribui o resultado ao <nome da chave>

A ação Selecionar cria uma matriz como saída, portanto, qualquer ação que queira usar essa saída deve aceitar uma matriz ou você deve converter a matriz no tipo que a ação do consumidor aceita. Por exemplo, para converter a matriz de saída em uma cadeia de caracteres, você pode passar essa matriz para a ação Redigir e referenciar a saída da ação Redigir em suas outras ações.

Example

Essa definição de ação cria uma matriz de objetos JSON de uma matriz de inteiros. A ação itera na matriz de origem, obtém a cada valor de inteiro usando o @item() expressão e atribui cada valor para o "number" propriedade em cada objeto JSON:

"Select": {
   "type": "Select",
   "inputs": {
      "from": [ 1, 2, 3 ],
      "select": { 
         "number": "@item()" 
      }
   },
   "runAfter": {}
},

Aqui está o array que esta ação cria:

[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]

Para usar essa saída de matriz em outras ações, passe essa saída para uma ação redigir :

"Compose": {
   "type": "Compose",
   "inputs": "@body('Select')",
   "runAfter": {
      "Select": [ "Succeeded" ]
   }
},

Em seguida, você pode usar a saída da ação Redigir em suas outras ações, por exemplo, o Office 365 Outlook – Enviar uma ação de email:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "@{outputs('Compose')}",
         "Subject": "Output array from Select and Compose actions",
         "To": "<your-email@domain>"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "post",
      "path": "/Mail"
   },
   "runAfter": {
      "Compose": [ "Succeeded" ]
   }
},

Ação de tabela

Esta ação cria uma tabela CSV ou HTML a partir de uma matriz. Para matrizes com objetos JSON, essa ação cria automaticamente os cabeçalhos das colunas a partir dos nomes das propriedades dos objetos. Para matrizes com outros tipos de dados, você deve especificar os cabeçalhos e valores da coluna. Por exemplo, essa matriz inclui as propriedades "ID" e "Product_Name" que essa ação pode usar para os nomes do cabeçalho da coluna:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

"Create_<CSV | HTML>_table": {
   "type": "Table",
   "inputs": {
      "format": "<CSV | HTML>",
      "from": <array>,
      "columns": [ 
         {
            "header": "<column-name>",
            "value": "<column-value>"
         },
         {
            "header": "<column-name>",
            "value": "<column-value>"
         } 
      ]
   },
   "runAfter": {}
}

Required

Value Tipo Description
<CSV ou HTML> String O formato para a tabela que você deseja criar
< array> Array A matriz ou expressão que fornece os itens de origem para a tabela

Observação: se a matriz de origem estiver vazia, a ação criará uma tabela vazia.

Optional

Para especificar ou customizar cabeçalhos e valores de coluna, use a matrizcolumns. Quando os pares header-value tiverem o mesmo nome de cabeçalho, seus valores aparecerão na mesma coluna sob esse nome de cabeçalho. Caso contrário, cada cabeçalho exclusivo define uma coluna exclusiva.

Value Tipo Description
< nome da coluna> String O nome do cabeçalho de uma coluna
< column-value> Any O valor nessa coluna

Exemplo 1

Suponha que você tenha uma variável "myItemArray" criada anteriormente que atualmente contém essa matriz:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

Esta definição de ação cria uma tabela CSV a partir da variável "myItemArray". A expressão usada pela propriedade fromobtém a matriz de "myItemArray" usando a funçãovariables():

"Create_CSV_table": {
   "type": "Table",
   "inputs": {
      "format": "CSV",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

Aqui está a tabela CSV que esta ação cria:

ID,Product_Name 
0,Apples 
1,Oranges 

Exemplo 2

Esta definição de ação cria uma tabela HTML a partir da variável "myItemArray". A expressão usada pela propriedade fromobtém a matriz de "myItemArray" usando a funçãovariables():

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

Aqui está a tabela HTML que esta ação cria:

IDProduct_Name
0Apples
1Oranges

Exemplo 3

Esta definição de ação cria uma tabela HTML a partir da variável "myItemArray". No entanto, esse exemplo substitui os nomes de cabeçalho de coluna padrão por "Stock_ID" e "Description" e adiciona a palavra "Organic" aos valores na coluna "Descrição".

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')",
      "columns": [ 
         {
            "header": "Stock_ID",
            "value": "@item().ID"
         },
         {
            "header": "Description",
            "value": "@concat('Organic ', item().Product_Name)"
         }
      ]
    },
   "runAfter": {}
},

Aqui está a tabela HTML que esta ação cria:

Stock_IDDescription
0Maçãs orgânicas
1Laranjas Orgânicas

Encerrar a ação

Essa ação interrompe a execução de uma instância do fluxo de trabalho, cancela todas as ações em andamento, ignora todas as ações restantes e retorna o status especificado. Por exemplo, você pode usar a ação Encerrar quando seu aplicativo lógico deve sair completamente de um estado de erro. Essa ação não afeta ações já concluídas e não pode aparecer nos loops Foreach e Until , incluindo loops sequenciais.

"Terminate": {
   "type": "Terminate",
   "inputs": {
       "runStatus": "<status>",
       "runError": {
            "code": "<error-code-or-name>",
            "message": "<error-message>"
       }
   },
   "runAfter": {}
}

Required

Value Tipo Description
< estado> String O status para retornar para a execução: "Falha", "Cancelado" ou "Êxito"

Optional

As propriedades do objeto "runError" se aplicam somente quando a propriedade "runStatus" é definida como o status "Falha".

Value Tipo Description
< error-code-or-name> String O código ou o nome do erro
< mensagem de erro> String A mensagem ou o texto que descreve o erro e as ações do usuário do aplicativo pode levar

Example

Essa definição de ação interrompe uma execução de fluxo de trabalho, define o status de execução como "Falha" e retorna o status, um código de erro e uma mensagem de erro:

"Terminate": {
    "type": "Terminate",
    "inputs": {
        "runStatus": "Failed",
        "runError": {
            "code": "Unexpected response",
            "message": "The service received an unexpected response. Please try again."
        }
   },
   "runAfter": {}
}

Ação de espera

Esta ação pausa a execução do fluxo de trabalho para o intervalo especificado ou até o horário especificado, mas não ambos.

Intervalo especificado

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": <number-of-units>,
         "unit": "<interval>"
      }
   },
   "runAfter": {}
},

Hora especificada

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "<date-time-stamp>"
      }
   },
   "runAfter": {}
},

Required

Value Tipo Description
< número de unidades> Integer Para a ação Atraso , o número de unidades a aguardar
< intervalo> String Para a ação Atraso , o intervalo a aguardar: "Segundo", "Minuto", "Hora", "Dia", "Semana", "Mês"
< carimbo de data e hora> String Para a ação Atrasar Até , a data e a hora para retomar a execução. Esse valor deve usar o formato de hora UTC.

Exemplo 1

Essa definição de ação pausa o fluxo de trabalho por 15 minutos:

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": 15,
         "unit": "Minute"
      }
   },
   "runAfter": {}
},

Exemplo 2

Essa definição de ação pausa o fluxo de trabalho até o tempo especificado:

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "2017-10-01T00:00:00Z"
      }
   },
   "runAfter": {}
},

Ação de fluxo de trabalho

Essa ação chama outro aplicativo lógico criado anteriormente, o que significa que você pode incluir e reutilizar outros fluxos de trabalho de aplicativos lógicos. Você também pode usar as saídas do aplicativo lógico filho ou aninhado em ações que seguem o aplicativo lógico aninhado, desde que o aplicativo lógico filho retorne uma resposta.

Os Aplicativos Lógicos do Azure verificam o acesso ao gatilho que você deseja chamar, portanto, verifique se você tem acesso a esse gatilho. Além disso, o aplicativo lógico aninhado deve atender a esses critérios:

  • Um gatilho torna o aplicativo lógico aninhado que pode ser chamado, como uma solicitação ou um gatilho HTTP

  • A mesma assinatura do Azure que seu aplicativo lógico de pai

  • Para usar as saídas do aplicativo lógico aninhado em seu aplicativo lógico pai, o aplicativo lógico aninhado deve ter uma ação resposta

"<nested-logic-app-name>": {
   "type": "Workflow",
   "inputs": {
      "body": { "<body-content" },
      "headers": { "<header-content>" },
      "host": {
         "triggerName": "<trigger-name>",
         "workflow": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Logic/<nested-logic-app-name>"
         }
      }
   },
   "runAfter": {}
}

Required

Value Tipo Description
< aninhado-logic-app-name> String O nome do aplicativo lógico que você deseja chamar
< trigger-name> String O nome do gatilho no aplicativo lógico aninhado que você deseja chamar
< ID da assinatura do Azure> String A ID de assinatura do Azure para o aplicativo lógico aninhado
< Azure-resource-group> String O nome do grupo de recursos do Azure para o aplicativo lógico aninhado

Optional

Value Tipo Description
< cabeçalho-conteúdo> Objeto JSON Nenhum cabeçalho a ser enviado com a chamada
< conteúdo do corpo> Objeto JSON Qualquer conteúdo da mensagem a ser enviado com a chamada

Outputs

Os resultados desta ação variam com base na ação de resposta do aplicativo lógico aninhado. Se o aplicativo lógico aninhado não incluir uma ação de resposta, as saídas estarão vazias.

Example

Depois que a ação "Start_search" for concluída com êxito, essa definição de ação de fluxo de trabalho chama outro aplicativo lógico chamado "Get_product_information", que passa em entradas especificadas:

"actions": {
   "Start_search": { <action-definition> },
   "Get_product_information": {
      "type": "Workflow",
      "inputs": {
         "body": {
            "ProductID": "24601",
         },
         "host": {
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/InventoryManager-RG/providers/Microsoft.Logic/Get_product_information",
            "triggerName": "Find_product"
         },
         "headers": {
            "content-type": "application/json"
         }
      },
      "runAfter": { 
         "Start_search": [ "Succeeded" ]
      }
   }
},

Detalhes de ação de fluxo de trabalho de controle

Ação Foreach

Essa ação de loop itera através de uma matriz e executa ações em cada item da matriz. Por padrão, o loop "para cada" é executado em paralelo até um número máximo de loops. Para esse máximo, consulte Limites e configuração. Saiba como criar loops "para cada".

"For_each": {
   "type": "Foreach",
   "actions": { 
      "<action-1>": { "<action-definition-1>" },
      "<action-2>": { "<action-definition-2>" }
   },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": <count>
      }
    },
    "operationOptions": "<operation-option>"
}

Required

Value Tipo Description
< action-1... n> String Os nomes das ações que são executados em cada item da matriz
< action-definition-1... n> Objeto JSON As definições das ações que são executados
< for-each-expression> String A expressão que referencia cada item na matriz especificada

Optional

Value Tipo Description
< contagem> Integer Por padrão, as iterações de loop "para cada" são executadas ao mesmo tempo (simultaneamente ou em paralelo) até o limite padrão. Para alterar esse limite definindo um novo < valor de contagem>, consulte Alterar a simultaneidade de loop "para cada".
< operation-option> String Para executar um loop "para cada" sequencialmente, em vez de em paralelo, defina a <opção>Sequential de operação como ou < a >1, mas não ambas. Para obter mais informações, consulte executar "" for each executa um loop em sequência.

Example

Esse loop "para cada" envia um email para cada item da matriz, que contém anexos de um email recebido. O loop envia um email, incluindo o anexo, para uma pessoa que revisa o anexo.

"For_each": {
   "type": "Foreach",
   "actions": {
      "Send_an_email": {
         "type": "ApiConnection",
         "inputs": {
            "body": {
               "Body": "@base64ToString(items('For_each')?['Content'])",
               "Subject": "Review attachment",
               "To": "Sophie.Owen@contoso.com"
                },
            "host": {
               "connection": {
                  "id": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {}
      }
   },
   "foreach": "@triggerBody()?['Attachments']",
   "runAfter": {}
}

Para especificar apenas uma matriz que é passada como saída do gatilho, essa expressão obtém a < matriz de nome> da matriz do corpo do gatilho. Para evitar uma falha se a matriz não existir, a expressão usa o operador ?:

@triggerBody()?['<array-name>']

Ação If

Essa ação, que é uma instrução condicional, avalia uma expressão que representa uma condição e executa um branch diferente com base em se a condição é verdadeira ou falsa. Se a condição for verdadeira, a condição é marcada com o status "Sucedido". Aprenda como criar instruções condicionais.

"Condition": {
   "type": "If",
   "expression": { "<condition>" },
   "actions": {
      "<action-1>": { "<action-definition>" }
   },
   "else": {
      "actions": {
        "<action-2>": { "<action-definition" }
      }
   },
   "runAfter": {}
}
Value Tipo Description
< condição> Objeto JSON A condição, o que pode ser uma expressão, para avaliar
< action-1> Objeto JSON A ação a ser executada quando < a condição> é avaliada como true
< definição de ação> Objeto JSON A definição da ação
< action-2> Objeto JSON A ação a ser executada quando <a condição> é avaliada como false

As ações na actions ou else objetos obtém esses status:

  • "Êxito" quando são executadas e bem-sucedidas
  • "Falha" quando são executadas e falham
  • "Ignorado" quando a respectiva ramificação não é executada

Example

Essa condição especifica que, quando a variável integer tiver um valor maior que zero, o fluxo de trabalho verificará um site. Se a variável for zero ou menos, o fluxo de trabalho verifica um site diferente.

"Condition": {
   "type": "If",
   "expression": {
      "and": [ {
         "greater": [ "@variables('myIntegerVariable')", 0 ] 
      } ]
   },
   "actions": { 
      "HTTP - Check this website": {
         "type": "Http",
         "inputs": {
         "method": "GET",
            "uri": "http://this-url"
         },
         "runAfter": {}
      }
   },
   "else": {
      "actions": {
         "HTTP - Check this other website": {
            "type": "Http",
            "inputs": {
               "method": "GET",
               "uri": "http://this-other-url"
            },
            "runAfter": {}
         }
      }
   },
   "runAfter": {}
}

Como as condições usar expressões

Estes são alguns exemplos que mostram como você pode usar expressões em condições:

JSON Result
"expressão": "@parameters('<hasSpecialAction>')" Apenas para expressões booleanas, a condição passa para qualquer valor que seja avaliado como verdadeiro.

Para converter outros tipos em Boolean, use estas funções: empty() ou equals().
"expressão": "@greater(actions('<'>).output.value, parameters('<threshold>'))" Para funções de comparação, a ação é executada somente quando a saída da <ação> é maior < limite >.
"expressão": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less('<same-action>').output.value, 100))" Para funções lógicas e criação de expressões boolianas aninhadas, a ação é executada quando a saída da <ação> é maior que o < valor limite> ou abaixo de 100.
"expressão": "@equals(length(actions('<action>').outputs.errors), 0)" Você pode usar funções de matriz para verificar se a matriz possui algum item. A ação é executada quando o errors matriz está vazia.

Ação de escopo

Essa ação agrupa logicamente ações em escopos, que obtêm seu próprio status após as ações nesse escopo terminarem de ser executadas. Você pode então usar o status do escopo para determinar se outras ações são executadas. Saiba mais como criar escopos.

"Scope": {
   "type": "Scope",
   "actions": {
      "<inner-action-1>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<inner-action-2>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   }
}

Required

Value Tipo Description
< inner-action-1... n> Objeto JSON Uma ou mais ações que são executadas dentro do escopo
< entradas de ação> Objeto JSON As entradas para cada ação

Ação de alternância

Essa ação, também conhecida como instrução switch, organiza outras ações em casos e atribui um valor a cada caso, exceto pelo caso padrão, se houver. Quando o fluxo de trabalho é executado, a ação Switch compara o valor de uma expressão, objeto ou token em relação aos valores especificados para cada caso. Se a ação Switch encontrar um caso correspondente, o fluxo de trabalho executará apenas as ações para esse caso. Sempre que a ação Switch for executada, apenas um caso correspondente existirá ou nenhuma correspondência existirá. Se nenhuma correspondência existir, a ação Switch executará as ações padrão. Saiba mais como criar instruções switch.

"Switch": {
   "type": "Switch",
   "expression": "<expression-object-or-token>",
   "cases": {
      "Case": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      },
      "Case_2": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      }
   },
   "default": {
      "actions": {
         "<default-action-name>": { "<default-action-definition>" }
      }
   },
   "runAfter": {}
}

Required

Value Tipo Description
< expression-object-or-token> Varies A expressão, um objeto JSON ou um token para avaliar
< nome da ação> String O nome da ação a ser executada para o caso correspondente
< definição de ação> Objeto JSON A definição da ação a ser executada para o caso correspondente
< correspondente-valor> Varies O valor para comparar com o resultado avaliado

Optional

Value Tipo Description
< default-action-name> String O nome da ação padrão a ser executada quando nenhum caso correspondente existir
< default-action-definition> Objeto JSON A definição para a ação a ser executada quando não existir nenhum caso correspondente

Example

Esta definição de ação avalia se a pessoa que está respondendo ao email de solicitação de aprovação selecionou a opção "Aprovar" ou a opção "Rejeitar". Com base nessa escolha, a ação Switch executa as ações para o caso correspondente, que é enviar outro email para o respondente, mas com texto diferente em cada caso.

"Switch": {
   "type": "Switch",
   "expression": "@body('Send_approval_email')?['SelectedOption']",
   "cases": {
      "Case": {
         "actions": {
            "Send_an_email": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your approval.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         },
         "case": "Approve"
      },
      "Case_2": {
         "actions": {
            "Send_an_email_2": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your response.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}     
         },
         "case": "Reject"
      }
   },
   "default": {
      "actions": { 
         "Send_an_email_3": { 
            "type": "ApiConnection",
            "inputs": {
               "Body": "Please respond with either 'Approve' or 'Reject'.",
               "Subject": "Please respond", 
               "To": "Sophie.Owen@contoso.com"
            },
            "host": {
               "connection": {
                  "name": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {} 
      }
   },
   "runAfter": {
      "Send_approval_email": [ 
         "Succeeded"
      ]
   }
}

Até ação

Esta ação de loop contém ações que são executadas até que a condição especificada seja verdadeira. O loop verifica a condição como a última etapa após todas as outras ações terem sido executadas. Você pode incluir mais de uma ação no "actions" objeto e a ação devem definir pelo menos um limite. Saiba mais como criar "loops until".

 "Until": {
   "type": "Until",
   "actions": {
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   },
   "expression": "<condition>",
   "limit": {
      "count": <loop-count>,
      "timeout": "<loop-timeout>"
   },
   "runAfter": {}
}
Value Tipo Description
< nome da ação> String O nome para a ação que você deseja executar dentro do loop
< tipo de ação> String O tipo de ação que você deseja executar
< entradas de ação> Various As entradas para a ação a ser executada
< condição> String A condição ou expressão a ser avaliada depois que todas as ações no loop concluem a execução
< contagem de loops> Integer O limite no maior número de loops que a ação pode executar. Para obter mais informações sobre o limite padrão e o limite máximo, consulte Limites e configuração para Aplicativos Lógicos do Azure.
< tempo limite de loop> String O limite de tempo mais longo que o loop pode ser executados. O padrão timeout valor é PT1H, que é o necessário formato ISO 8601.

Note

Se a expressão depender da saída de qualquer ação dentro do loop Até, certifique-se de levar em consideração qualquer falha resultante dessa ação.

Example

Essa definição de ação de loop envia uma solicitação HTTP para a URL especificada até que uma dessas condições seja atendida:

  • A solicitação obtém uma resposta com o código de status "200 OK".
  • O loop foi executado 60 vezes.
  • O loop foi executado por uma hora.
 "Run_until_loop_succeeds_or_expires": {
    "type": "Until",
    "actions": {
        "HTTP": {
            "type": "Http",
            "inputs": {
                "method": "GET",
                "uri": "http://myurl"
            },
            "runAfter": {}
        }
    },
    "expression": "@equals(outputs('HTTP')['statusCode'], 200)",
    "limit": {
        "count": 60,
        "timeout": "PT1H"
    },
    "runAfter": {}
}

Webhooks e assinaturas

Acionadores e ações com base em Webhook não verificam regularmente os pontos de extremidade, mas aguardam eventos ou dados específicos nesses pontos de extremidade. Esses gatilhos e ações assinam os pontos de extremidade fornecendo uma URL de retorno de chamada em que o ponto de extremidade pode enviar respostas.

A chamada subscribe ocorre quando o fluxo de trabalho é alterado de alguma forma, por exemplo, quando as credenciais são renovadas ou quando os parâmetros de entrada são alterados para um acionador ou uma ação. Essa chamada usa os mesmos parâmetros que ações HTTP padrão.

O unsubscribe chamada ocorre automaticamente quando uma operação faz o gatilho ou ação inválido, por exemplo:

  • Excluir ou desabilitar o gatilho.
  • excluir ou desabilitar o fluxo de trabalho.
  • excluir ou desabilitar a assinatura.

Para suportar essas chamadas, a expressão @listCallbackUrl() retorna um "URL de retorno de chamada" exclusivo para o acionador ou a ação. Essa URL representa um identificador exclusivo para os pontos de extremidade que usam a API REST do serviço. Os parâmetros para essa função são os mesmos do acionador ou ação do webhook.

Alterar a duração assíncrona

Para acionadores e ações, você pode limitar a duração do padrão assíncrono a um intervalo de tempo específico, adicionando a limit.timeout propriedade. Dessa forma, se a ação não tiver terminado quando o intervalo decorrer, o status da ação será marcado como Cancelledcom oActionTimedOut código. O timeout usos de propriedade formato ISO 8601.

"<trigger-or-action-name>": {
   "type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
   "inputs": {},
   "limit": {
      "timeout": "PT10S"
   },
   "runAfter": {}
}

Definições de configuração de runtime

Você pode alterar o comportamento do tempo de execução padrão para gatilhos e ações, adicionando essas propriedades runtimeConfiguration à definição de gatilho ou ação.

Property Tipo Description Gatilho ou ação
runtimeConfiguration.concurrency.runs Integer Altere o limite padrão no número de instâncias de fluxo de trabalho que podem ser executadas ao mesmo tempo (simultaneamente ou em paralelo). O ajuste desse valor pode ajudar a limitar o número de solicitações recebidas pelos sistemas de back-end.

Definindo o runs propriedade para 1 funciona da mesma forma que a configuração a operationOptions propriedade SingleInstance. Você pode definir a propriedade, mas não ambos.

Para alterar o limite padrão, consulte simultaneidade do gatilho de alteração ou disparar instâncias sequencialmente.
Todos os gatilhos
runtimeConfiguration.concurrency.maximumWaitingRuns Integer Altere o limite padrão no número de instâncias de fluxo de trabalho que devem esperar para serem executadas quando seu aplicativo lógico já estiver executando as instâncias simultâneas máximas.

Para alterar o limite padrão, consulte execuções de espera da alteração limitam.
Todos os gatilhos
runtimeConfiguration.concurrency.repetitions Integer Altere o limite padrão no número de iterações de loop "para cada" que podem ser executadas ao mesmo tempo (simultaneamente ou em paralelo).

Definindo o repetitions propriedade para 1 funciona da mesma forma que a configuração a operationOptions propriedade SingleInstance. Você pode definir a propriedade, mas não ambos.

Para alterar o limite padrão, consulte Alterar "para cada" simultaneidade ou Executar "para cada" faz um loop sequencialmente.
Action:

Foreach
runtimeConfiguration.paginationPolicy.minimumItemCount Integer Para ações específicas que dão suporte e têm a paginação ativada, esse valor especifica o número mínimo de resultados a serem recuperados.

Para ativar a paginação, consulte Obter dados, itens ou resultados em massa usando a paginação
Ação: Variada
runtimeConfiguration.secureData.properties Array Em muitos gatilhos e ações, essas configurações ocultam entradas, saídas ou ambas do histórico de execução do aplicativo lógico.

Para saber mais sobre como proteger esses dados, consulte Ocultar entradas e saídas do histórico de execuções.
A maioria dos gatilhos e ações
runtimeConfiguration.staticResult Objeto JSON Para ações que dão suporte e têm a configuração de resultado estático ativada, o staticResult objeto tem estes atributos:

- name, que faz referência ao nome da definição de resultado estático da ação atual, que aparece dentro do atributo staticResults no atributo definition do fluxo de trabalho do aplicativo lógico. Para obter mais informações, consulte Resultados estáticos - Referência de esquema para Linguagem de Definição de Fluxo de Trabalho.

- staticResultOptions, que especifica se os resultados estáticos estão Enabled ou não para a ação atual.

Para ativar os resultados estáticos, consulte Testar aplicativos lógicos com dados fictícios configurando resultados estáticos
Ação: Variada

Opções de operação

Você pode alterar o comportamento padrão de acionadores e ações com a propriedade operationOptions na definição de acionador ou ação.

Opção de operação Tipo Description Gatilho ou ação
DisableAsyncPattern String Execute ações baseadas em HTTP de forma síncrona, em vez de assíncrona.



Para definir essa opção, consulte executar ações de forma síncrona.
Actions:

ApiConnection,
HTTP,
Response
IncludeAuthorizationHeadersInOutputs String Para aplicativos lógicos que habilitam o OAuth com Microsoft Entra ID para autorizar o acesso a chamadas de entrada a um ponto de extremidade de gatilho baseado em solicitação, inclua o cabeçalho Authorization do token de acesso OAuth nas saídas do gatilho. Para obter mais informações, consulte Incluir o cabeçalho 'Autorização' nas saídas do gatilho da solicitação. Triggers:

Request,
HTTP Webhook
Sequential String Execute "for each" loop iterações um por vez, em vez de todos ao mesmo tempo em paralelo.

Esta opção funciona da mesma forma que a configuração da runtimeConfiguration.concurrency.repetitions propriedade para 1. Você pode definir a propriedade, mas não ambos.



Para definir essa opção, consulte executar "for each" executa um loop em sequência.
Action:

Foreach
SingleInstance String Executar o gatilho para cada instância de aplicativo lógico em sequência e aguarde a execução anteriormente ativa concluir antes de disparar a próxima instância do aplicativo lógico.



Esta opção funciona da mesma forma que a configuração da runtimeConfiguration.concurrency.runs propriedade para 1. Você pode definir a propriedade, mas não ambos.

Para definir essa opção, consulte disparar instâncias sequencialmente.
Todos os gatilhos
SuppressWorkflowHeaders String Não envie cabeçalhos de metadados x-ms-* em solicitações de saída. Por padrão, os Aplicativos Lógicos do Azure incluem cabeçalhos de metadados extras com o prefixo x-ms- no nome do cabeçalho como parte das solicitações de saída. No entanto, alguns serviços herdados não aceitam solicitações com cabeçalhos desconhecidos extras, resultando em solicitações com falha. Actions:

HTTP,
Function,
APIManagement
SuppressWorkflowHeadersOnResponse String Não envie cabeçalhos de metadados x-ms-* em respostas para solicitações de gatilho de entrada. Por padrão, os Aplicativos Lógicos do Azure enviam respostas a solicitações de entrada que incluem cabeçalhos de metadados extras com o prefixo x-ms- no nome do cabeçalho. No entanto, alguns serviços herdados não aceitam solicitações ou respostas com cabeçalhos desconhecidos extras, resultando em solicitações com falha. Triggers:

Request,
HTTP Webhook

Simultaneidade do gatilho de alteração

Por padrão, todas as instâncias de fluxo de trabalho do aplicativo lógico são executadas ao mesmo tempo (simultaneamente ou em paralelo). Esse comportamento significa que cada instância do gatilho é acionada antes que a instância de fluxo de trabalho ativa anteriormente termine de ser executada. No entanto, o número de instâncias em execução simultâneas tem um limite padrão. Quando o número de instâncias de fluxo de trabalho em execução simultânea atinge esse limite, todas as outras novas instâncias devem aguardar para serem executadas. Esse limite ajuda a controlar o número de solicitações que os sistemas de back-end recebem.

Quando você ativa o controle de simultaneidade do gatilho, as instâncias de gatilho são executadas em paralelo até o limite padrão. Para alterar esse limite de simultaneidade padrão, você pode usar o editor de exibição de código ou o designer de fluxo de trabalho porque a alteração da configuração de simultaneidade por meio do designer adiciona ou atualiza a propriedade runtimeConfiguration.concurrency.runs na definição de gatilho subjacente e vice-versa. Essa propriedade controla o número máximo de novas instâncias do fluxo de trabalho que podem ser executadas em paralelo.

Antes de habilitar a simultaneidade em um gatilho, examine as seguintes considerações:

  • Você não pode desabilitar a simultaneidade depois de habilitar o controle de simultaneidade.

  • Se o número máximo de execuções de gatilho simultâneo atingir o grau máximo de paralelismo, as execuções de gatilho subsequentes poderão apresentar limitação ou erros de “429 – muitas solicitações”. Se você configurar uma política de repetição que lida com 429 erros, o gatilho poderá experimentar um ciclo de repetição e limitação de comportamento que causa longos atrasos no processamento de novas solicitações de gatilho.

  • Quando a simultaneidade está habilitada, a divisão no limite é significativamente reduzida para desativar matrizes. Se o número de itens exceder esse limite, o recurso Dividir no recurso será desabilitado.

  • Quando a simultaneidade está habilitada, uma instância de aplicativo lógico de execução longa pode fazer com que novas instâncias do aplicativo lógico entrem em um estado de espera. Esse estado impede que os Aplicativos Lógicos do Azure criem novas instâncias e ocorram mesmo quando o número de execuções simultâneas for menor que o número máximo especificado de execuções simultâneas.

    • Para interromper esse estado, cancele as primeiras instâncias que ainda estão em execução.

      1. No menu do aplicativo lógico, selecione Visão geral.

      2. Na seção Histórico de execuções , selecione a instância mais antiga que ainda está em execução, por exemplo:

        Selecionar instância mais antiga em execução

        Tip

        Para exibir apenas as instâncias que ainda estão em execução, abra a lista Todos e selecione Executar.

      3. Em Execução do aplicativo lógico, selecione Cancelar execução.

        Localizar instância mais antiga em execução

    • Para contornar essa possibilidade, adicione um tempo limite a qualquer ação que possa atrasar essas execuções. Se você estiver trabalhando no editor de código, consulte Alterar duração assíncrona. Caso contrário, se você estiver usando o designer, siga estas etapas:

      1. No fluxo de trabalho do aplicativo lógico, selecione a ação em que você deseja adicionar um tempo limite. No canto superior direito da ação, selecione o botão de reticências (...) e selecione Configurações.

        Abrir configurações da ação

      2. Em Tempo Limite, especifique a duração do tempo limite no formato ISO 8601.

        Especificar a duração do tempo limite

  • Para executar seu aplicativo lógico sequencialmente, defina a simultaneidade do gatilho como 1 usando o editor de visualização de código ou o designer. Verifique se você também não definiu a propriedade operationOptions do gatilho como SingleInstance no editor de visualização de código. Caso contrário, você pode obter um erro de validação. Para obter mais informações, consulte disparar instâncias sequencialmente.

Editar no modo de exibição de código

Na definição de gatilho subjacente, adicione a propriedade runtimeConfiguration.concurrency.runs e defina o valor com base nos limites de simultaneidade do gatilho. Para executar o fluxo de trabalho sequencialmente, defina o valor da propriedade como 1.

Este exemplo limita as execuções simultâneas a 10 instâncias:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 10
      }
   }
}

Para obter mais informações, consulte Configurações de runtime.

Editar no designer de fluxo de trabalho

  1. No canto superior direito do gatilho, selecione o botão de reticências (...) e selecione Configurações.

  2. Em Controle de Simultaneidade, defina Limite como Ativado.

  3. Arraste o controle deslizante Grau de Paralelismo para o valor desejado. Para executar seu aplicativo lógico sequencialmente, arraste o valor do controle deslizante para 1.

Alterar a simultaneidade "for each"

Por padrão, todas as iterações de loop "para cada" são executadas ao mesmo tempo (simultaneamente ou em paralelo). Esse comportamento significa que cada iteração começa a ser executada antes que a iteração anterior termine a execução. No entanto, o número de iterações em execução simultâneas tem um limite padrão. Quando o número de iterações em execução simultânea atinge esse limite, todas as outras iterações devem aguardar para serem executadas.

Para alterar o limite padrão, você pode usar o editor de exibição de código ou o designer de fluxo de trabalho porque a alteração da configuração de simultaneidade por meio do designer adiciona ou atualiza a propriedade runtimeConfiguration.concurrency.repetitions na definição da ação "para cada" subjacente e vice-versa. Essa propriedade controla o número máximo de iterações que podem ser executadas em paralelo.

Note

Se você definir a ação "for each" para executar em sequência usando o designer ou editor de exibição de código, não defina a ação operationOptionspropriedade paraSequential no editor de exibição de código. Caso contrário, você pode obter um erro de validação. Para obter mais informações, consulte executar "" for each executa um loop em sequência.

Editar no modo de exibição de código

Na definição subjacente de "para cada", adicione ou atualize a propriedade runtimeConfiguration.concurrency.repetitions, que pode ter um valor que varia de 1 a 50.

Aqui está um exemplo que limita as execuções simultâneas a 10 iterações:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 10
      }
   }
}

Para obter mais informações, consulte Configurações de runtime.

Editar no designer de fluxo de trabalho

  1. Na ação For each , no canto superior direito, selecione o botão de reticências (...) e selecione Configurações.

  2. Em Controle de Simultaneidade, defina o Controle de Simultaneidade como Ativado.

  3. Arraste o controle deslizante Grau de Paralelismo para o valor desejado. Para executar seu aplicativo lógico sequencialmente, arraste o valor do controle deslizante para 1.

Aguardando o limite de execuções de alteração

Por padrão, todas as instâncias de fluxo de trabalho do aplicativo lógico são executadas ao mesmo tempo (simultaneamente ou em paralelo). Esse comportamento significa que cada instância do gatilho é acionada antes que a instância de fluxo de trabalho ativa anteriormente termine de ser executada. No entanto, existe um limite padrão no número de instâncias de fluxo de trabalho em execução simultânea. Quando o número de execuções simultâneas atinge esse limite, outras novas instâncias de fluxo de trabalho devem aguardar para serem executadas. Também existe um limite padrão no número de instâncias de fluxo de trabalho em espera. Quando o número de instâncias em espera atinge esse limite, os Aplicativos Lógicos do Azure não aceitam mais novas instâncias de fluxo de trabalho para execução. Os gatilhos de Solicitação e webhook retornam 429 - Solicitações excessivas erros e os gatilhos recorrentes começam a ignorar as tentativas de sondagem.

Você pode alterar o limite padrão de simultaneidade do gatilho e o limite padrão de execuções em espera. No entanto, essa alteração reduz principalmente a velocidade do gatilho para aliviar a pressão devido à simultaneidade. Por exemplo, se você tiver um gatilho de sondagem e a fila de execuções em espera estiver cheia devido a execuções em andamento, os Aplicativos Lógicos do Azure interromperão a sondagem. Se o fluxo de trabalho usar um gatilho baseado em solicitação e a fila de execuções em espera estiver cheia, os Aplicativos Lógicos do Azure começarão a retornar o erro 429. Existem alguns cenários em que os Aplicativos Lógicos do Azure não podem impedir que o gatilho faça sondagens sem introduzir falhas e optam por adicionar essas execuções à fila de execuções em espera sem falhar nas execuções de chamada.

Na definição do gatilho subjacente, adicione a propriedade runtimeConfiguration.concurrency.maximumWaitingRuns, que pode ter um valor que varia de 1 a 100.

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "maximumWaitingRuns": 50
      }
   }
}

Para obter mais informações, consulte Configurações de runtime.

Disparar as instâncias em sequência

Para executar cada instância do fluxo de trabalho do aplicativo lógico somente depois que a execução da instância anterior terminar, defina o gatilho para ser executado sequencialmente. Você pode usar o editor de exibição de código ou o designer de fluxo de trabalho porque a alteração da configuração de simultaneidade por meio do designer também adiciona ou atualiza a propriedade runtimeConfiguration.concurrency.runs na definição de gatilho subjacente e vice-versa.

Note

Quando você configura um acionador para ser executado sequencialmente usando o designer ou o editor de visualização de código, não defina a operationOptions propriedade do acionador como Sequentialno editor de visualização de código. Caso contrário, você pode obter um erro de validação.

Editar no modo de exibição de código

Na definição do gatilho, defina a essas propriedades, mas não ambos.

Para fazer isso, defina a runtimeConfiguration.concurrency.runspropriedade para 1:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 1
      }
   }
}

-or-

Para fazer isso, defina a operationOptionspropriedade para SingleInstance:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "operationOptions": "SingleInstance"
}

Para obter mais informações, consulte as opções Configurações do tempo de execução e Opções de operação.

Editar no designer de fluxo de trabalho

  1. No canto superior direito do gatilho, selecione o botão de reticências (...) e selecione Configurações.

  2. Em Controle de Simultaneidade, defina Limite como Ativado.

  3. Arraste o grau de paralelismo controle deslizante para o número 1.

Execute "for each" executa um loop em sequência

Para executar uma iteração de loop "para cada" somente após a execução da iteração anterior, defina a ação "para cada" para ser executada sequencialmente. Você pode usar o editor de exibição de código ou o designer de fluxo de trabalho porque a alteração da simultaneidade da ação por meio do designer também adiciona ou atualiza a propriedade runtimeConfiguration.concurrency.repetitions na definição de ação subjacente e vice-versa.

Note

Quando você define uma ação "para cada" para ser executada sequencialmente usando o designer ou o editor de visualização de código, não defina a operationOptions propriedade da ação como Sequential no editor de visualização de código. Caso contrário, você pode obter um erro de validação.

Editar no modo de exibição de código

Na definição de ação, defina uma dessas propriedades, mas não ambas.

Para fazer isso, defina a runtimeConfiguration.concurrency.repetitionspropriedade para 1:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 1
      }
   }
}

-or-

Para fazer isso, defina a operationOptionspropriedade para Sequential:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "operationOptions": "Sequential"
}

Para obter mais informações, consulte as opções Configurações do tempo de execução e Opções de operação.

Editar no designer de fluxo de trabalho

  1. No canto superior direito de cada ação, selecione o botão de reticências (...) e selecione Configurações.

  2. Em Controle de Simultaneidade, defina o Controle de Simultaneidade como Ativado.

  3. Arraste o grau de paralelismo controle deslizante para o número 1.

Executar ações em um padrão de operação síncrona

Por padrão, a ação HTTP e as ações APIConnection nos Aplicativos Lógicos do Azure seguem o padrão de operação assíncrona, enquanto a ação Resposta segue o padrão de operação síncrona. O padrão assíncrono especifica que, após uma ação chamar ou enviar uma solicitação para o ponto de extremidade, serviço, sistema ou API especificado, o receptor retorna imediatamente uma resposta "202 ACCEPTED ". Esse código confirma que o receptor aceitou a solicitação, mas não concluiu o processamento. A resposta pode incluir um location cabeçalho que especifica a URL e uma ID de atualização que o chamador pode usar para sondar ou verificar continuamente o status da solicitação assíncrona até que o receptor pare de processar e retorne uma resposta de sucesso "200 OK" ou outra resposta não 202. Para obter mais informações, consulte A integração assíncrona de microsserviço impõe autonomia de microsserviço.

  • No Designer de Aplicativo Lógico, a ação HTTP, as ações de APIConnection e a ação resposta têm a configuração Padrão Assíncrono . Quando habilitada, essa configuração especifica que o chamador não aguarda o processamento ser concluído e pode passar para a próxima ação, mas continua verificando o status até que o processamento seja interrompido. Se desabilitada, essa configuração especifica que o chamador aguarda o processamento ser concluído antes de passar para a próxima ação. Para localizar essa configuração, siga estas etapas:

    1. Na barra de título da ação HTTP, selecione o botão de reticências (...), que abre as configurações da ação.

    2. Localize a configuração padrão assíncrono .

      Configuração de

  • Na definição de JavaScript Object Notation (JSON) subjacente da ação, a ação HTTP e as ações APIConnection seguem implicitamente o padrão de operação assíncrona.

Em alguns cenários, talvez você queira uma ação para seguir o padrão síncrono. Por exemplo, ao usar a ação HTTP, talvez você queira:

Nesses casos, você pode fazer uma ação ser executada de forma síncrona usando estas opções:

Desativar a configuração padrão assíncrono

  1. No Designer de Aplicativo Lógico, na barra de título da ação, selecione o botão de reticências (...), que abre as configurações da ação.

  2. Localize a configuração Padrão Assíncrono , desative a configuração se habilitada e selecione Concluído.

    Desativar a configuração

Desabilitar o padrão assíncrono na definição de JSON da ação

Na definição JSON subjacente da ação, adicione e defina a propriedade "DisableAsyncPattern" na seção da "inputs" ação, por exemplo:

"<some-long-running-action>": {
   "type": "Http",
   "inputs": { "<action-inputs>" },
   "operationOptions": "DisableAsyncPattern",
   "runAfter": {}
}

Autenticar gatilhos e ações

Os pontos de extremidade HTTP e HTTPS são compatíveis com diferentes tipos de autenticação. Com base no gatilho ou na ação que você usa para fazer chamadas ou solicitações de saída para acessar esses pontos de extremidade, você pode selecionar vários tipos de autenticação. Para obter mais informações, confira Adicionar autenticação a chamadas de saída.

Próximas etapas