Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 ACCEPTEDresposta.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
splitOnpropriedade, 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:
No [portal do Azure], abra o recurso do aplicativo lógico.
Abra o fluxo de trabalho no designer.
No designer, selecione o gatilho que dá suporte a depuração para abrir o painel de informações do gatilho.
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:
Tipos de ação integrada como esses exemplos e muito mais:
HTTP para chamar pontos de extremidade por HTTP ou HTTPS
Resposta para responder a solicitações
Executar código JavaScript para executar trechos de código JavaScript
Função para chamar o Azure Functions
Ações de operação de dados como Junção, Redação, Tabela, Seleção e outras que criam ou transformam dados de várias entradas
Fluxo de trabalho para chamar outro fluxo de trabalho de aplicativo lógico
Tipos de ação de API gerenciados, como ApiConnection e ApiConnectionWebHook que chame vários conectores e APIs gerenciadas pela Microsoft, por exemplo, o barramento de serviço do Azure, Office 365 Outlook, Power BI, o armazenamento de BLOBs do Azure, OneDrive, GitHub e muito mais
Tipos de ação de fluxo de trabalho de controle, como se, Foreach, Switch , Escopo, e até, que contêm outras ações e ajudá-lo organizar a execução de fluxo de trabalho
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:
| ID | Product_Name |
|---|---|
| 0 | Apples |
| 1 | Oranges |
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_ID | Description |
|---|---|
| 0 | Maçãs orgânicas |
| 1 | Laranjas 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.
No menu do aplicativo lógico, selecione Visão geral.
Na seção Histórico de execuções , selecione a instância mais antiga que ainda está em execução, por exemplo:
Tip
Para exibir apenas as instâncias que ainda estão em execução, abra a lista Todos e selecione Executar.
Em Execução do aplicativo lógico, selecione Cancelar 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:
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.
Em Tempo Limite, especifique a duração do tempo limite no formato ISO 8601.
Para executar seu aplicativo lógico sequencialmente, defina a simultaneidade do gatilho como
1usando o editor de visualização de código ou o designer. Verifique se você também não definiu a propriedadeoperationOptionsdo gatilho comoSingleInstanceno 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
No canto superior direito do gatilho, selecione o botão de reticências (...) e selecione Configurações.
Em Controle de Simultaneidade, defina Limite como Ativado.
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
Na ação For each , no canto superior direito, selecione o botão de reticências (...) e selecione Configurações.
Em Controle de Simultaneidade, defina o Controle de Simultaneidade como Ativado.
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
No canto superior direito do gatilho, selecione o botão de reticências (...) e selecione Configurações.
Em Controle de Simultaneidade, defina Limite como Ativado.
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
No canto superior direito de cada ação, selecione o botão de reticências (...) e selecione Configurações.
Em Controle de Simultaneidade, defina o Controle de Simultaneidade como Ativado.
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:
Na barra de título da ação HTTP, selecione o botão de reticências (...), que abre as configurações da ação.
Localize a configuração padrão assíncrono .
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:
- Evitar tempos limite de HTTP para tarefas de longa duração
- Desabilitar verificação de cabeçalhos de localização
Nesses casos, você pode fazer uma ação ser executada de forma síncrona usando estas opções:
Substitua a versão de sondagem dessa ação por uma versão do webhook, se disponível.
Desabilite o comportamento assíncrono da ação seguindo uma das opções a seguir:
No Designer do Aplicativo Lógico, desative a configuração Padrão assíncrono.
Na definição de JSON subjacente da ação, adicione a opção de operação
"DisableAsyncPattern".
Desativar a configuração padrão assíncrono
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.
Localize a configuração Padrão Assíncrono , desative a configuração se habilitada e selecione Concluído.
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
- Saiba mais sobre Linguagem de Definição de Fluxo de Dados