Guia de referência de esquema para gatilho e tipos de ação em Aplicativos Lógicos do Azure
Esta referência descreve os tipos gerais usados para identificar gatilhos e ações na definição de fluxo de trabalho subjacente do aplicativo lógico, que é descrita e validada pela Linguagem de Definição de Fluxo de Trabalho. Para localizar gatilhos e ações de conectores específicos que você pode usar em seus aplicativos lógicos, consulte a lista na Visão geral dos conectores.
Visão geral de 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 acionador de polling, que verifica o terminal de um serviço em intervalos regulares
Um acionador push, que cria uma assinatura para um terminal e fornece um URL de retorno de chamada para que o terminal possa notificar o acionador quando o evento especificado acontecer 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>"
},
Necessário
Valor | Type | Descrição |
---|---|---|
<nome do gatilho> | String | O nome do gatilho |
<tipo de gatilho> | String | O tipo de gatilho como "Http" ou "ApiConnection" |
<entradas do gatilho> | Objeto JSON | As entradas que definem o comportamento do gatilho |
<unidade de tempo> | 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> | Inteiro | Um valor que especifica a frequência com que o gatilho é acionado com base na frequência, que é o número de unidades de tempo para aguardar até que o gatilho seja acionado novamente Aqui estão os intervalos mínimo e máximo: - 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. |
Opcional
Valor | Type | Descrição |
---|---|---|
<matriz com condições> | 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. |
<Opções de configuração de runtime> | 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. |
<expressão splitOn> | 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. |
<opção de operação> | 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 | Descrição |
---|---|
HTTP | Verifica ou pesquisas 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. |
Recorrência | 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 | Descrição |
---|---|
ApiConnection | Verifica ou sonda um ponto de extremidade usando “conectores” ou APIs gerenciadas pela Microsoft. |
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 “conectores” ou API gerenciadas pela Microsoft para que os parâmetros desse gatilho possam diferir 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>"
}
Obrigatório
Propriedade | Valor | Type | Descrição |
---|---|---|---|
Nenhum | <APIConnection_trigger_name> | String | O nome do gatilho |
host.connection.name | <connection-name> | 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 comunicação com a API gerenciada: GET, PUT, POST, PATCH, DELETE |
caminho | <operação de API> | String | A operação de API para chamar |
recorrência.frequência | <unidade de tempo> | String | A unidade de tempo que descreve a frequência com que o gatilho dispara: Segundo, Minuto, Hora, Dia, Semana, Mês |
recorrência.intervalo | <número de unidades de tempo> | Inteiro | Um valor que especifica a frequência com que o gatilho é acionado com base na frequência, que é o número de unidades de tempo para aguardar até que o gatilho seja acionado novamente Aqui estão os intervalos mínimo e máximo: - 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. |
Opcional
Propriedade | Valor | Type | Descrição |
---|---|---|---|
retryPolicy | <comportamento de repetição> | 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. |
Consultas | <parâmetros de consulta> | 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 | <execuções de max> | Integer | Por padrão, as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
runtimeConfiguration.maximumWaitingRuns | <máximo de execuções de fila> | Inteiro | Se o fluxo de trabalho já estiver executando o número máximo de instâncias, todas as 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 . Nota: Se você definir o |
splitOn | <expressão splitOn> | 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 | <opção de operação> | String | Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação. |
Saídas
Elemento | Type | Descrição |
---|---|---|
headers | Objeto JSON | Os cabeçalhos da resposta |
Corpo | Objeto JSON | O corpo da resposta |
código de status | Integer | O código de status da resposta |
Exemplo
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 acionador envia uma solicitação de assinatura para um endpoint usando uma API gerenciada pela Microsoft, fornece um URL de retorno de chamada para o ponto de extremidade enviar uma resposta e espera que o endpoint responda. Para obter mais informações, consulte assinaturas de 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>"
}
Necessário
Valor | Type | Descrição |
---|---|---|
<connection-name> | 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 |
Opcional
Valor | Type | Descrição |
---|---|---|
<comportamento de repetição> | 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. |
<parâmetros de consulta> | Objeto JSON | Quaisquer parâmetros de consulta a serem incluídos com a chamada de API Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada. |
<execuções de max> | Integer | Por padrão, as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
<máximo de execuções de fila> | Integer | Quando seu fluxo de trabalho já estiver executando o número máximo de instâncias, que você pode alterar com base na propriedade runtimeConfiguration.concurrency.runs , 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. |
<expressão splitOn> | 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'] |
<opção de operação> | String | Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação. |
Exemplo
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>"
}
Necessário
Propriedade | Valor | Type | Descrição |
---|---|---|---|
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-or-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 |
<unidade de tempo> | 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> | Inteiro | Um valor que especifica a frequência com que o gatilho é acionado com base na frequência, que é o número de unidades de tempo para aguardar até que o gatilho seja acionado novamente Aqui estão os intervalos mínimo e máximo: - 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. |
Opcional
Propriedade | Valor | Type | Descrição |
---|---|---|---|
headers |
<conteúdo do cabeçalho> | Objeto JSON | Todos os cabeçalhos que você precisa incluir com a solicitação Por exemplo, para definir o idioma e digitar: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
<parâmetros de consulta> | Objeto JSON | Quaisquer parâmetros de consulta que você precise 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 |
<autenticação-tipo-e-propriedade-valores> | 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 |
<comportamento de repetição> | 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 |
<execuções de max> | Integer | Por padrão, as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
maximumWaitingRuns |
<máximo de execuções de fila> | Integer | Quando seu fluxo de trabalho já estiver executando o número máximo de instâncias, que você pode alterar com base na propriedade runtimeConfiguration.concurrency.runs , 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. |
operationOptions |
<opção de operação> | String | Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação. |
Saídas
Elemento | Type | Descrição |
---|---|---|
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:
Propriedade | Obrigatório | Descrição |
---|---|---|
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 Retry-after | Não | O número de segundos até o seu aplicativo lógico pesquisar o ponto de extremidade novamente |
Cabeçalho do local | Não | 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 | Comportamento |
---|---|---|
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 assinaturas de ponto de extremidade.
Você também pode especificar limites assíncronos em um HTTPWebhook gatilho. 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 <tipo de método>, estão disponíveis para ambos os "subscribe"
e "unsubscribe"
objetos.
Necessário
Valor | Type | Descrição |
---|---|---|
<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 |
Opcional
Valor | Type | Descrição |
---|---|---|
<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 |
<autenticação-tipo> | 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. |
<comportamento de repetição> | 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. |
<execuções de max> | Integer | Por padrão, todas as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
<máximo de execuções de fila> | Integer | Quando seu fluxo de trabalho já estiver executando o número máximo de instâncias, que você pode alterar com base na propriedade runtimeConfiguration.concurrency.runs , 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. |
<opção de operação> | String | Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação. |
Saídas
Elemento | Type | Descrição |
---|---|---|
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 |
Exemplo
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>"
}
Necessário
Valor | Type | Descrição |
---|---|---|
<unidade de tempo> | 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> | Inteiro | Um valor que especifica a frequência com que o gatilho é acionado com base na frequência, que é o número de unidades de tempo para aguardar até que o gatilho seja acionado novamente Aqui estão os intervalos mínimo e máximo: - 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. |
Opcional
Valor | Type | Descrição |
---|---|---|
<start-date-time-with-format-YYYY-MM-DDThh:mm:ss> | String | A data e hora de início neste formato: YYYY-MM-DDThh:mm:ss se você especificar um fuso horário -ou- YYYY-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. |
<time-zone> | 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. |
<um-ou-mais--marcas de hora> | 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. |
<uma-ou-mais--marcas de minuto> | 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” |
<execuções de max> | Integer | Por padrão, todas as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
<máximo de execuções de fila> | Integer | Quando seu fluxo de trabalho já estiver executando o número máximo de instâncias, que você pode alterar com base na propriedade runtimeConfiguration.concurrency.runs , 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. |
<opção de operação> | 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.
Para chamar esse gatilho, você deve usar a listCallbackUrl
API, 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.
"manual": {
"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>"
}
Necessário
Valor | Type | Descrição |
---|---|---|
<nome da propriedade> | String | O nome de uma propriedade no esquema JSON, que descreve a carga útil |
<tipo de propriedade> | String | O tipo da propriedade |
Opcional
Valor | Type | Descrição |
---|---|---|
<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 |
<execuções de max> | Integer | Por padrão, todas as instâncias do 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 <contagem> de valor, consulte simultaneidade do gatilho de alteração. |
<máximo de execuções de fila> | Integer | Quando seu fluxo de trabalho já estiver executando o número máximo de instâncias, que você pode alterar com base na propriedade runtimeConfiguration.concurrency.runs , 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. |
<opção de operação> | String | Você pode alterar o comportamento padrão definindo a operationOptions propriedade. Para obter mais informações, consulte opções de operação. |
Exemplo
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:
"manual": {
"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 em uma matriz
Se o gatilho receber uma matriz para o fluxo de trabalho processar, às vezes, um loop “for each” poderá levar muito tempo para processar cada item da matriz. Em vez disso, você pode usar a propriedade SplitOn em seu gatilho para retirar em lote a matriz. A retirada em lote divide os itens da matriz e inicia uma nova instância do fluxo de trabalho que é executado para cada item da matriz. Essa abordagem é útil, por exemplo, quando você deseja sondar um ponto de extremidade que pode retornar vários itens novos entre os intervalos de sondagem.
Se o arquivo Swagger do gatilho descrever uma carga que é uma matriz, a propriedade SplitOn será adicionada automaticamente ao seu gatilho. Caso contrário, adicione essa propriedade dentro da carga de resposta que tem a matriz da qual deseja remover o lote.
Antes de usar a funcionalidade SplitOn, examine as seguintes considerações:
Se a simultaneidade do gatilho está habilitada, o limite do SplitOn é reduzido significativamente. Se o número de itens exceder esse limite, o recurso SplitOn será desabilitado.
Você não pode usar o recurso do SplitOn com um padrão de resposta síncrona. Qualquer fluxo de trabalho que usa a propriedade SplitOn e inclui uma ação de resposta é executado de forma assíncrona e envia imediatamente uma resposta
202 ACCEPTED
.Para o número máximo de itens de matriz que o SplitOn pode processar em uma execução única do fluxo de trabalho, consulte Limites e configuração.
Exemplo
Suponha que você tenha um gatilho HTTP que chama uma API e recebe essa resposta:
{
"Status": "Succeeded",
"Rows": [
{
"id": 938109380,
"name": "customer-name-one"
},
{
"id": 938109381,
"name": "customer-name-two"
}
]
}
Seu fluxo de trabalho apenas precisa do conteúdo da matriz na Rows
, portanto, você pode criar um gatilho como neste exemplo:
"HTTP_Debatch": {
"type": "Http",
"inputs": {
"uri": "https://mydomain.com/myAPI",
"method": "GET"
},
"recurrence": {
"frequency": "Second",
"interval": 1
},
"splitOn": "@triggerBody()?.Rows"
}
Observação
Portanto, se você usar o comando SplitOn
, não será possível obter as propriedades que estão fora da matriz.
Portanto, para este exemplo, não é possível obter a propriedade status
na resposta retornada da API.
Para evitar uma falha se a propriedade Rows
não existir, este exemplo usa o operador ?
.
Sua definição de fluxo de trabalho agora pode usar @triggerBody().name
para obter os valoresname
, que são "customer-name-one"
da primeira execução e"customer-name-two"
da segunda execução. Portanto, as saídas do gatilho ficam como neste exemplo:
{
"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>"
},
Necessário
Valor | Type | Descrição |
---|---|---|
<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 de entrada> | String | O nome de uma entrada que define o comportamento da ação |
<valor de entrada> | Vários | O valor de entrada, que pode ser uma cadeia de caracteres, inteiro, objeto JSON e assim por diante |
<anterior – gatilho-ou-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 |
Opcional
Valor | Type | Descrição |
---|---|---|
<comportamento de repetição> | 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. |
<Opções de configuração de runtime> | 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. |
<opção de operação> | 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 via HTTP ou HTTPS
Resposta para responder às solicitações
Executar código JavaScript para executar trechos de código JavaScript
Função para chamar funções do Azure
Ações de operação de dados, como ingressar, Compose, tabela, Selecionare outras pessoas que criam ou transformar dados de várias entradas
Fluxo de trabalho para chamar outro fluxo 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 | Descrição |
---|---|
Compor | 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. |
Função | Chama uma função do Azure. |
HTTP | Chama um ponto de extremidade HTTP. |
Ingressar | 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. |
Consulta | Cria uma matriz de itens em outra matriz com base em uma condição ou filtro. |
Resposta | Cria uma resposta a uma chamada de entrada ou a solicitação. |
Selecionar | Cria uma matriz com objetos JSON, transformando itens de outra matriz com base no mapa especificado. |
Tabela | Cria uma tabela CSV ou HTML de uma matriz. |
Encerrar | Interrompe um fluxo de trabalho ativo. |
Aguarde | Pausa seu fluxo de trabalho por um período especificado ou até a data e a hora especificadas. |
Fluxo de trabalho | Aninha um fluxo de trabalho dentro de outro fluxo de trabalho. |
Ações de API gerenciadas
Tipo de ação | Descrição |
---|---|
ApiConnection | Chama um ponto de extremidade HTTP usando uma API gerenciada pela Microsoft. |
ApiConnectionWebhook | Funciona como o HTTP Webhook, 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 | Descrição |
---|---|
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. |
Escopo | 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 exige 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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<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" |
<operação de API> | String | A operação de API para chamar |
Opcional
Valor | Type | Descrição |
---|---|---|
<outras propriedades específicas de entrada de ação> | Objeto JSON | Quaisquer outras propriedades de entrada que se aplicam a essa ação específica |
<comportamento de repetição> | 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. |
<parâmetros de consulta> | 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 que outras é ação> | Objeto JSON | Outras propriedades que se aplicam a essa ação específica |
Exemplo
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 meio de HTTP para um ponto de extremidade usando um API gerenciada pela Microsoft, fornece uma URL de retorno de chamada onde o ponto de extremidade pode enviar uma resposta e aguarda o ponto de extremidade responda. Para obter mais informações, consulte assinaturas de 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 <tipo de método>, estão disponíveis para ambos os "subscribe"
e "unsubscribe"
objetos.
Necessário
Valor | Type | Descrição |
---|---|---|
<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 |
Opcional
Valor | Type | Descrição |
---|---|---|
<Cancelar assinatura-URL da API> | String | O URI a ser usado para cancelar a inscrição da API |
<conteúdo do cabeçalho> | Objeto JSON | Quaisquer cabeçalhos a serem enviados na 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 |
<autenticação-tipo> | 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. |
<comportamento de repetição> | 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. |
<parâmetros de consulta> | Objeto JSON | Quaisquer parâmetros de consulta a serem incluídos com a chamada de API Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada. |
<outras propriedades específicas de entrada de ação> | Objeto JSON | Quaisquer outras propriedades de entrada que se aplicam a essa ação específica |
<propriedades específicas que outras é ação> | Objeto JSON | Outras propriedades que se aplicam a essa ação específica |
Você também pode especificar limites em um ApiConnectionWebhook ação da mesma forma como limites assíncronos do HTTP.
Ação para compor
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": {}
},
Necessário
Valor | Type | Descrição |
---|---|---|
<entradas para compor> | Qualquer | 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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<JavaScript-código-trecho> | Varia | 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
.
Valor | Type | Descrição |
---|---|---|
<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 na 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 criado anteriormente função do Azure.
"<Azure-function-name>": {
"type": "Function",
"inputs": {
"function": {
"id": "<Azure-function-ID>"
},
"method": "<method-type>",
"headers": { "<header-content>" },
"body": { "<body-content>" },
"queries": { "<query-parameters>" }
},
"runAfter": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<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". |
Opcional
Valor | Type | Descrição |
---|---|---|
<conteúdo do cabeçalho> | Objeto JSON | Quaisquer cabeçalhos a serem enviados 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 |
<parâmetros de consulta> | Objeto JSON | Quaisquer parâmetros de consulta a serem incluídos com a chamada de API Por exemplo, o "queries": { "api-version": "2018-01-01" } objeto adiciona ?api-version=2018-01-01 para a chamada. |
<outras propriedades específicas de entrada de ação> | Objeto JSON | Quaisquer outras propriedades de entrada que se aplicam a essa ação específica |
<propriedades específicas que outras é ação> | Objeto JSON | Outras propriedades que se aplicam a essa ação específica |
Quando você salva seu aplicativo lógico, os Aplicativos Lógicos do Azure executam 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 alguma operação invalidar a URL em cache, a ação Função falhará no 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.
Exemplo
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": {}
}
Necessário
Propriedade | Valor | Type | Descrição |
---|---|---|---|
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-or-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. |
Opcional
Propriedade | Valor | Type | Descrição |
---|---|---|---|
headers |
<conteúdo do cabeçalho> | Objeto JSON | Todos os cabeçalhos que você precisa incluir com a solicitação Por exemplo, para definir o idioma e digitar: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
<parâmetros de consulta> | Objeto JSON | Quaisquer parâmetros de consulta que você precise 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 |
<autenticação-tipo-e-propriedade-valores> | 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 |
<comportamento de repetição> | 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. |
<outras propriedades específicas de entrada de ação> | <entrada-propriedade> | Objeto JSON | Quaisquer outras propriedades de entrada que se aplicam a essa ação específica |
<propriedades específicas que outras é ação> | <propriedade-valor> | Objeto JSON | Outras propriedades que se aplicam a essa ação específica |
Exemplo
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 unir
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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<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. |
<delimiter> | Cadeia de caracteres única | O caractere que separa cada item na cadeia de caracteres |
Exemplo
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 amigáveis ou tokens 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": {}
},
Necessário
Valor | Type | Descrição |
---|---|---|
<Origem do JSON> | Objeto JSON | O conteúdo JSON que você deseja analisar |
<JSON-schema> | 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 uma carga de exemplo para que a ação possa gerar o esquema. |
Exemplo
Essa definição de ação cria estes tokens que você pode usar no fluxo de trabalho, mas apenas em ações executadas após 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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<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. |
<filtro ou condição> | 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. |
Exemplo
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": {}
},
Necessário
Valor | Type | Descrição |
---|---|---|
<código de status de resposta> | 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. |
Opcional
Valor | Type | Descrição |
---|---|---|
<cabeçalhos de resposta> | Objeto JSON | Um ou mais cabeçalhos para incluir com a resposta |
<corpo de resposta> | Vários | O corpo da resposta, que pode ser uma string, um objeto JSON ou até mesmo conteúdo binário de uma ação anterior |
Exemplo
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": {}
}
Restrições
Ao contrário de outras ações, a ação Response tem restrições especiais:
O fluxo de trabalho pode usar o resposta ação somente quando o fluxo de trabalho é iniciado com um gatilho de solicitação HTTP, que significa que seu fluxo de trabalho deve ser disparada por uma solicitação HTTP.
Seu fluxo de trabalho pode usar a ação Resposta em qualquer lugar exceto dentro de Foreach loops, até loops, incluindo loops sequenciais e ramificações paralelas.
A solicitação original obtém a resposta do seu fluxo de trabalho apenas quando todas as ações exigidas pela ação Resposta são concluídas dentro do tempo limite de 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 seu fluxo de trabalho usa a ação Response e um padrão de resposta síncrona, o fluxo de trabalho também não pode usar o comando splitOn na definição do acionador 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 seu fluxo de trabalho usar o comando splitOn e uma ação Response, 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 recebida já recebeu uma resposta, a ação Resposta é marcada como "Falhou" devido ao conflito. E, como resultado, a execução do seu aplicativo lógico também é marcado com status "Falha".
Ação selecionar
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": {}
},
Necessário
Valor | Type | Descrição |
---|---|---|
<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 cria uma matriz vazia. |
<key-name> | String | O nome da propriedade atribuído ao resultado de <expressão> Para adicionar uma nova propriedade a todos os objetos na matriz de saída, forneça um<key-name> para essa propriedade e uma <expressão> para o valor da propriedade. Para remover uma propriedade de todos os objetos na matriz, omita o <key-name> para essa propriedade. |
<expression> | String | A expressão que transforma o item na matriz de origem e atribui o resultado a <key-name> |
A ação Select cria uma matriz como saída, portanto, qualquer ação que queira usar essa saída deve aceitar uma matriz ou converter a matriz no tipo que a ação do consumidor aceita. Por exemplo, para converter a matriz de saída em uma string, você pode passar essa matriz para a ação Compor e, em seguida, referenciar a saída da ação Compor em suas outras ações.
Exemplo
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 matriz de saída em outras ações, passar essa saída em uma redigir ação:
"Compose": {
"type": "Compose",
"inputs": "@body('Select')",
"runAfter": {
"Select": [ "Succeeded" ]
}
},
Em seguida, você pode usar a saída do redigir ação em suas outras ações, por exemplo, o Outlook do Office 365 - enviar um email ação:
"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 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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<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 cria uma tabela vazia. |
Opcional
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.
Valor | Type | Descrição |
---|---|---|
<nome da coluna> | String | O nome do cabeçalho de uma coluna |
<valor da coluna> | Qualquer | 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 from
obté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 from
obté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 | Maçãs |
1 | Laranjas |
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 | Descrição |
---|---|
0 | Maçãs orgânicas |
1 | Laranjas orgânicas |
Ação para finalizar
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 precisar sair completamente de um estado de erro. Essa ação não afeta as ações já concluídas e não pode aparecer dentro de loops Foreach e Until, incluindo loops sequenciais.
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "<status>",
"runError": {
"code": "<error-code-or-name>",
"message": "<error-message>"
}
},
"runAfter": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<Status> | String | O status para retornar para a execução: "Falha", "Cancelado" ou "Êxito" |
Opcional
As propriedades para o objeto "runStatus" aplicam-se somente quando a propriedade "runStatus" está configurada para o status "Failed".
Valor | Type | Descrição |
---|---|---|
<Erro de código ou nome> | 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 |
Exemplo
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 para aguardar
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": {}
},
Tempo especificado
"Delay_until": {
"type": "Wait",
"inputs": {
"until": {
"timestamp": "<date-time-stamp>"
}
},
"runAfter": {}
},
Necessário
Valor | Type | Descrição |
---|---|---|
<número de unidades> | Integer | Para o atraso ação, o número de unidades de espera |
<interval> | String | Para o atraso ação, o intervalo de espera: "Second", "Minuto", "Hour", "Day", "Week", "Mês" |
<carimbo de data-hora> | String | Para o atraso até que ação, a data e 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 do 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 de lógica filho retorne uma resposta.
Os Aplicativos Lógicos do Azure verificam o acesso ao gatilho que você deseja chamar, portanto, verifique se você pode acessar esse gatilho. Além disso, o aplicativo lógico aninhado deve atender a esses critérios:
Um disparador faz com que o aplicativo lógico aninhado pode ser chamado como uma solicitar ou HTTP gatilho
A mesma assinatura do Azure que seu aplicativo lógico de pai
Para usar as saídas do aplicativo lógico aninhado no aplicativo lógico pai, o aplicativo lógico aninhado deve ter uma resposta ação
"<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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<Nested---nome do aplicativo lógico> | String | O nome do aplicativo lógico que você deseja chamar |
<nome do gatilho> | 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 |
Opcional
Valor | Type | Descrição |
---|---|---|
<conteúdo do cabeçalho> | 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 |
Saídas
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.
Exemplo
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>"
}
Necessário
Valor | Type | Descrição |
---|---|---|
<ação-1... n> | String | Os nomes das ações que são executados em cada item da matriz |
<ação-definição-1... n> | Objeto JSON | As definições das ações que são executados |
<para cada expressão> | String | A expressão que referencia cada item na matriz especificada |
Opcional
Valor | Type | Descrição |
---|---|---|
<count> | 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 <contagem> de valor, consulte alterar "loop"for each simultaneidade. |
<opção de operação> | String | Para executar um loop "for each" em sequência, em vez de em paralelo, defina <opção de operação> para Sequential ou <contagem> para 1 , mas não ambos. Para obter mais informações, consulte executar "" for each executa um loop em sequência. |
Exemplo
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 é transmitida como saída do acionador, essa expressão obtém a matriz <nome da matriz> do corpo do acionador. 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 uma ramificação diferente com base no fato de a condição ser 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": {}
}
Valor | Type | Descrição |
---|---|---|
<Condição> | Objeto JSON | A condição, o que pode ser uma expressão, para avaliar |
<ação-1> | Objeto JSON | A ação a ser executada quando a <condição> é avaliada como verdadeira |
<definição de ação> | Objeto JSON | A definição da ação |
<ação-2> | Objeto JSON | A ação a ser executada quando <condição>para avaliada como falsa |
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
Exemplo
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 | Resultado |
---|---|
"expression": "@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() . |
"expression": "@greater(actions('<action>').output.value, parameters('<threshold>'))" | Para funções de comparação, a ação é executada somente quando a saída do <ação> é mais do que <limite> valor. |
"expression": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less(actions('<same-action>').output.value, 100))" | Para funções lógicas e criando aninhados expressões Boolianas, a ação é executada quando a saída do <ação> é mais do que <limite> valor ou em 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
Esta ação agrupa logicamente as ações em escopos, que obtêm seu próprio status depois que as ações nesse escopo terminam a execução. 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": {}
}
}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<interno-ação-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 Switch
Essa ação, também conhecida como switch statement, organiza outras ações em casos e atribui um valor a cada caso, exceto no caso padrão, se existir um. Quando seu fluxo de trabalho é executado, a ação Switch compara o valor de uma expressão, objeto ou token com os valores especificados para cada caso. Se a ação Switch encontrar um caso correspondente, seu fluxo de trabalho executará apenas as ações para esse caso. Toda vez que a ação Switch é executada, apenas um caso correspondente existe ou não existem correspondências. Se nenhuma correspondência existir, o comutador ação executa 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": {}
}
Necessário
Valor | Type | Descrição |
---|---|---|
<expression-object-or-token> | Varia | 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 |
<matching-value> | Varia | O valor para comparar com o resultado avaliado |
Opcional
Valor | Type | Descrição |
---|---|---|
<default-action-name> | String | O nome da ação padrão a ser executada quando nenhum caso correspondente existir |
<definição de ação padrão> | Objeto JSON | A definição para a ação a ser executada quando não existir nenhum caso correspondente |
Exemplo
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 opção, a ação Switch executa as ações do caso correspondente, que é enviar outro e-mail para o respondente, mas com palavras diferentes 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"
]
}
}
Ação Until
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": {}
}
Valor | Type | Descrição |
---|---|---|
<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> | Vários | 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 loop> | 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. |
Observação
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.
Exemplo
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 acionadores e ações se inscrevem nos pontos de extremidade fornecendo um URL de retorno de chamada no qual o terminal 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 Cancelled
com 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.
Propriedade | Type | Descrição | Gatilho ou ação |
---|---|---|---|
runtimeConfiguration.concurrency.runs |
Integer | Altere o limite padrão no número de instâncias do 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 o máximo de instâncias simultâneas. 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. |
Ação: 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 oferecem 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 | Descrição | 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. |
Ações: ApiConnection, HTTP, Response |
IncludeAuthorizationHeadersInOutputs |
String | Para aplicativos lógicos que permitem que o OAuth com ID do Microsoft Entra autorize o acesso para chamadas de entrada a um ponto de extremidade de gatilho baseado em solicitação, inclua o Authorization cabeçalho do token de acesso OAuth nas saídas de disparo. Para obter mais informações, consulte Incluir o cabeçalho 'Autorização' nas saídas do gatilho da solicitação. |
Gatilhos: Pedido, Webhook HTTP |
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. |
Ação: 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. |
Ações: HTTP, Função, 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. |
Gatilhos: Pedido, Webhook HTTP |
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ânea 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 do 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, pois a alteração da configuração de simultaneidade por meio do designer adiciona ou atualiza a runtimeConfiguration.concurrency.runs
propriedade 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, o limite do SplitOn é reduzido significativamente para retirada em lote de matrizes. Se o número de itens exceder esse limite, o recurso SplitOn 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 instâncias mais antigas 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 esteja em execução, por exemplo:
Dica
Para exibir apenas as instâncias que ainda estão em execução, abra a lista Todas e selecione Em execução.
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 do superior direito da ação, selecione o botão de reticências (...) e escolha 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
1
usando o editor de visualização de código ou o designer. Verifique se você também não definiu a propriedadeoperationOptions
do gatilho comoSingleInstance
no editor de visualização de código. Caso contrário, você pode obter um erro de validação. Para obter mais informações, consulte disparar instâncias sequencialmente.
Editar no modo de exibição de código
Na definição de gatilho subjacente, adicione a propriedade runtimeConfiguration.concurrency.runs
e defina o valor com base nos limites de simultaneidade do gatilho. Para executar o fluxo de trabalho sequencialmente, defina o valor da propriedade como 1
.
Este exemplo limita as execuções simultâneas a 10 instâncias:
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 10
}
}
}
Para obter mais informações, consulte Configurações de runtime.
Editar no designer de fluxo de trabalho
No canto do superior direito do gatilho, selecione o botão de reticências ( ... ) e escolha Configurações.
Em Controle de Simultaneidade, defina Limite como Ligado.
Arraste o controle deslizante Grau de Paralelismo para o valor desejado. Para executar seu aplicativo lógico em sequência, 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ânea 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 runtimeConfiguration.concurrency.repetitions
propriedade na definição de ação subjacente "para cada" e vice-versa. Essa propriedade controla o número máximo de iterações que podem ser executadas em paralelo.
Observação
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 operationOptions
propriedade 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 Para cada, no canto superior direito, selecione o botão de reticências ( ... ) e, em seguida, escolha Configurações.
Em Controle de Simultaneidade, defina Controle de Simultaneidade como Ligado.
Arraste o controle deslizante Grau de Paralelismo para o valor desejado. Para executar seu aplicativo lógico em sequência, 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, quaisquer 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 serem executadas. Os gatilhos de solicitação e webhook retornam 429 - Muitos erros de solicitações e gatilhos recorrentes começam a ignorar as tentativas de sondagem.
Você pode alterar o limite padrão na simultaneidade de disparo, bem como o limite padrão em execuções em espera. No entanto, essa mudança diminui principalmente o gatilho para aliviar a pressão devido à simultaneidade. Por exemplo, se você tiver o 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 seu fluxo de trabalho usar um gatilho baseado em solicitação e a fila de 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 o gatilho de sondagem sem introduzir falhas e optam por adicionar essas execuções à fila de espera de qualquer maneira 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 runtimeConfiguration.concurrency.runs
propriedade na definição de gatilho subjacente e vice-versa.
Observação
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 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 do gatilho, defina a essas propriedades, mas não ambos.
Para fazer isso, defina a runtimeConfiguration.concurrency.runs
propriedade para 1
:
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
}
}
- ou -
Para fazer isso, defina a operationOptions
propriedade 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 do superior direito do gatilho, selecione o botão de reticências ( ... ) e escolha Configurações.
Em Controle de Simultaneidade, defina Limite como Ligado.
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 alterar a simultaneidade da ação por meio do designer também adiciona ou atualiza a runtimeConfiguration.concurrency.repetitions
propriedade na definição de ação subjacente e vice-versa.
Observação
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.repetitions
propriedade para 1
:
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
}
}
- ou -
Para fazer isso, defina a operationOptions
propriedade 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 da ação Para cada, selecione o botão de reticências ( ... ) e escolha Configurações.
Em Controle de Simultaneidade, defina Controle de Simultaneidade como Ligado.
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 depois que uma ação chama ou envia uma solicitação para o ponto de extremidade, serviço, sistema ou API especificado, o receptor retorna imediatamente uma resposta "202 ACEITO". Esse código confirma que o receptor aceitou a solicitação, mas não concluiu o processamento. A resposta pode incluir um cabeçalho location
que especifica a URL e uma ID de atualização que o chamador pode usar para pesquisar 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 do Aplicativo Lógico, a ação HTTP, as ações APIConnection e a ação Response 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 do 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, defina-a como Desativado, se estiver ativado, e selecione Concluído.
Desabilitar o padrão assíncrono na definição de JSON da ação
Na definição de JSON subjacente da ação, adicione e defina a propriedade "operationOptions" como "DisableAsyncPattern"
abaixo da seção "inputs"
da 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