Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: Azure Logic Apps (Consumo + Standard)
Para repetir ações em um fluxo de trabalho de aplicativo lógico, você pode adicionar o loop For each ou Until ao seu fluxo de trabalho, com base nas necessidades do seu cenário.
Nota
Procurando documentação do Power Automate sobre loops? Consulte Utilizar ciclos.
Com base no seu caso de uso, você pode escolher entre os seguintes tipos de ações de loop:
Para repetir uma ou mais ações em itens de uma matriz ou coleção, adicione a ação Para cada ao seu fluxo de trabalho.
Como alternativa, se você tiver um gatilho que possa manipular matrizes e quiser executar uma instância de fluxo de trabalho para cada item de matriz, poderá desagrupar a matriz definindo a propriedade Split on trigger.
Para repetir uma ou mais ações até que uma condição seja atendida ou um estado específico seja alterado, adicione a ação Até ao seu fluxo de trabalho.
Seu fluxo de trabalho primeiro executa todas as ações dentro do loop e, em seguida, verifica a condição ou o estado. Se a condição se verificar, o ciclo para. Caso contrário, o loop se repete. Para conhecer os limites predefinidos e máximos para o número de ciclos Until que um fluxo de trabalho pode ter, consulte Limites de simultaneidade, ciclos e divisão de lotes.
Pré-requisitos
Uma conta do Azure e uma subscrição do Azure. Se não tiver uma subscrição, inscreva-se numa conta do Azure gratuita.
Um recurso de aplicativo lógico onde você pode criar e editar um fluxo de trabalho. Consulte O que são os Aplicativos Lógicos do Azure.
O recurso de aplicativo lógico e fluxo de trabalho onde você deseja repetir uma ação em um loop e um gatilho que inicia o fluxo de trabalho.
Antes de adicionar uma ação de loop, seu fluxo de trabalho deve começar com um gatilho como primeira etapa. Para obter mais informações, consulte Adicionar um gatilho ou ação para criar um fluxo de trabalho.
As etapas a seguir usam o portal do Azure, mas com a extensão apropriada dos Aplicativos Lógicos do Azure, você também pode usar as seguintes ferramentas para criar fluxos de trabalho de aplicativos lógicos:
- Fluxos de trabalho de utilização: Visual Studio Code
- Fluxos de trabalho padrão: Visual Studio Code
Algumas etapas diferem ligeiramente consoante tenha um workflow de Consumo ou Padrão.
Para cada
A ação For each funciona apenas em arrays. Esse loop repete uma ou mais ações em cada item de uma matriz. Analise as seguintes considerações para cada ação :
A ação For each pode processar um número limitado de elementos da matriz. Para esse limite, consulte Limites de simultaneidade, looping e debatching.
Por predefinição, os ciclos ou iterações numa ação Para cada são executados em simultâneo, em paralelo.
Este comportamento difere do ciclo do Power Automate Apply to each, onde as iterações se executam uma de cada vez, ou sequencialmente. Se o seu caso de uso exigir processamento sequencial, você pode configurar Para cada iteração para executar uma de cada vez. Por exemplo, se quiser pausar a iteração seguinte numa ação Para cada utilizando a Ação Atrasar, tem de configurar cada iteração para ser executada sequencialmente.
Como exceção ao comportamento predefinido, as iterações de uma ação For each aninhada são sempre executadas sequencialmente, e não em paralelo. Para executar ações em simultâneo sobre itens de um array numa ação For each aninhada, crie e chame um fluxo de trabalho filho.
Para obter resultados previsíveis de operações em variáveis durante cada iteração, execute as iterações sequencialmente. Por exemplo, quando uma iteração executada em simultâneo termina, as operações Incrementar variável, Decrementar variável e Anexar à variável devolvem resultados previsíveis. No entanto, durante cada iteração no loop em execução simultânea, essas operações podem retornar resultados imprevisíveis.
As ações num ciclo For each utilizam a função
item()para referir e processar cada item no array. Se você especificar dados que não estão em uma matriz, o fluxo de trabalho falhará.
O fluxo de trabalho de exemplo a seguir envia um resumo diário para um RSS feed de site. O fluxo de trabalho usa uma ação For each que envia um e-mail para cada item novo.
No portal do Azure, crie um fluxo de trabalho de aplicativo lógico com as seguintes etapas na ordem especificada:
O gatilho RSS denominado Quando um item de feed é publicado
Siga estes passos gerais para adicionar um acionador a um fluxo de trabalho de uma aplicação lógica Consumption ou Standard.
A ação do Outlook.com ou do Office 365 Outlook denominada Enviar um e-mail
Siga estes passos gerais para adicionar uma ação a um fluxo de trabalho de uma aplicação lógica Consumo ou Padrão.
Siga as mesmas etapas gerais para adicionar a ação Para cada entre o gatilho RSS e a ação Enviar um e-mail no seu fluxo de trabalho.
Agora construa o loop:
No item Para cada, selecione na caixa Selecionar uma saída das etapas anteriores e, em seguida, selecione o ícone de relâmpago.
Na lista de conteúdo dinâmico que se abre, em Quando um item de feed é publicado, selecione Ligações do feed, que corresponde a uma saída em matriz do gatilho RSS.
Nota
Se a saída Ligações de feed não aparecer, selecione Ver mais junto ao rótulo da secção do acionador. Na lista de conteúdo dinâmico, você pode selecionar apenas saídas de etapas anteriores.
Quando terminar, a saída da matriz selecionada aparecerá como no exemplo a seguir:
Para executar uma ação existente em cada item do array, arraste a ação Enviar um e-mail para o ciclo Para cada.
Agora, seu fluxo de trabalho se parece com o exemplo a seguir:
Quando tiver terminado, guarde o fluxo de trabalho.
Para testar manualmente seu fluxo de trabalho, na barra de ferramentas do designer, selecione Executar>Executar.
Para cada definição de ação (JSON)
Se você estiver trabalhando na visualização de código, poderá definir a For_each ação na definição JSON do seu fluxo de trabalho, por exemplo:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{item()}",
"Subject": "New CNN post @{triggerBody()?['publishDate']}",
"To": "me@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach"
}
},
Para cada: Executar em sequência
Por predefinição, as iterações numa ação For each são executadas em paralelo. No entanto, se tiver ciclos aninhados ou variáveis dentro de ciclos das quais espera resultados previsíveis, deve executar esses ciclos sequencialmente, um de cada vez.
No estruturador, selecione a ação Para cada para abrir o painel de informações e, em seguida, selecione Definições.
Em Controle de simultaneidade, altere a configuração de Desativado para Ativado.
Mova o controle deslizante Grau de paralelismo para 1.
Para cada definição de ação (JSON): Executar sequencialmente
Se você estiver trabalhando na visualização de código com a For_each ação na definição JSON do seu fluxo de trabalho, adicione o operationOptions parâmetro e defina o valor do parâmetro como Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Até
A ação Until executa e repete uma ou mais ações até que a condição especificada necessária seja satisfeita. Se a condição se verificar, o ciclo para. Caso contrário, o loop se repete. Para consultar os limites predefinidos e máximos do número de ações ou de iterações de Until, veja Limites de simultaneidade, iteração e desagregação em lotes.
A lista seguinte contém alguns cenários comuns em que pode utilizar uma ação Até:
Chame um endpoint até obter a resposta pretendida.
Crie um registro em um banco de dados. Aguarde até que um campo específico nesse registro seja aprovado. Continue o processamento.
Por padrão, a ação Até é bem-sucedida ou falha das seguintes maneiras:
O loop Until terá êxito se todas as ações dentro do loop forem bem-sucedidas e se o limite do loop for atingido, com base no comportamento run after.
Se todas as ações na última iteração do loop Until forem bem-sucedidas, todo o loop Until será marcado como Succeeded.
Se alguma ação falhar na última iteração do loop Até, todo o loop Até será marcado como Falhou.
Se alguma ação falhar em uma iteração diferente da última iteração, a próxima iteração continuará a ser executada e toda a ação Until não será marcada como Falha.
Para fazer com que a ação falhe, altere o comportamento padrão na definição JSON do loop adicionando o parâmetro chamado
operationOptions, e definindo o valor comoFailWhenLimitsReached, por exemplo:"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable_8": [ "Succeeded" ] }, "type": "Until" }
No fluxo de trabalho de exemplo a seguir, a partir das 8h00 todos os dias, a ação Until incrementa uma variável até que o valor da variável seja igual a 10. Em seguida, o fluxo de trabalho envia um e-mail que confirma o valor atual. O exemplo usa o Office 365 Outlook, mas você pode usar qualquer provedor de email suportado pelos Aplicativos Lógicos do Azure. Se você usar outra conta de e-mail, as etapas gerais permanecerão as mesmas, mas parecerão ligeiramente diferentes.
No portal do Azure, crie um recurso de aplicativo lógico com um fluxo de trabalho em branco. Consulte o procedimento anterior.
No designer, siga os passos gerais para adicionar o acionador incorporado Agenda com o nome Recorrência ao seu fluxo de trabalho Consumo ou Padrão.
No gatilho Recorrência , especifique o intervalo, a frequência e o tempo para o disparo do gatilho.
Parâmetro valor Intervalo 1 Frequência Dia At these hours (A estas horas) 8 Nestes minutos 00 Nestas horas e nestes minutos aparecem depois de definir Frequência para Dia.
Quando terminar, o gatilho Recorrência se parece com o exemplo a seguir:
No acionador, siga estes passos gerais para adicionar a ação incorporada Variáveis denominada Inicializar variáveis ao workflow da sua aplicação lógica Consumption ou Standard.
Na ação Inicializar variáveis , forneça os seguintes valores:
Parâmetro valor Descrição Nome Limite O nome da sua variável Tipo Inteiro O tipo de dados da sua variável Valor 0 Valor inicial da sua variável Na ação Inicializar variáveis, siga estes passos gerais para adicionar a ação incorporada Controlo com o nome Até que ao fluxo de trabalho da sua aplicação lógica Consumo ou Padrão.
Na ação Até, forneça os seguintes valores para configurar a condição de parada para o loop.
Selecione dentro da caixa Loop Until e selecione o ícone de relâmpago para abrir a lista de conteúdo dinâmico.
Na lista, em Variáveis, selecione a variável chamada Limite.
Em Contagem, insira 10 como o valor de comparação.
Dentro da ação Até , selecione +>Adicionar uma ação.
Siga estes passos gerais para adicionar a ação incorporada Variables denominada Increment variable à ação Until no fluxo de trabalho da sua aplicação lógica Consumption ou Standard.
Na ação Variável de incremento, forneça os seguintes valores para incrementar o valor da variável Limite em 1:
Parâmetro valor Limite Selecione a variável Limit . Valor 1 Fora e abaixo da ação Until, siga estes passos gerais para adicionar uma ação que envia correio eletrónico no fluxo de trabalho da aplicação lógica de Consumo ou Padrão.
Este exemplo continua com a ação do Office 365 Outlook chamada Enviar um email.
Na ação de email, forneça os seguintes valores:
Parâmetro valor Descrição Para < e-mail-address@domain> O endereço de e-mail do destinatário. Para testar, use seu próprio endereço de e-mail. Assunto O valor atual para a variável "Limit" é:Limit O assunto do e-mail. Para este exemplo, certifique-se de incluir a variável Limit para confirmar se o valor atual atende à condição especificada:
1. Selecione dentro da caixa Assunto e, em seguida, selecione o ícone de relâmpago.
2. Na lista de conteúdo dinâmico que se abre, junto ao cabeçalho da secção Variáveis , selecione Ver mais.
3. Selecione Limite.Corpo < conteúdo de e-mail> O conteúdo da mensagem de email que você deseja enviar. Para este exemplo, insira o texto desejado. Quando terminar, sua ação de email será semelhante ao exemplo a seguir:
Salve seu fluxo de trabalho.
Testar o fluxo de trabalho
Para testar manualmente o fluxo de trabalho do aplicativo lógico:
- Na barra de ferramentas do designer, na opção Executar , selecione Executar.
Depois que o fluxo de trabalho começar a ser executado, você receberá um e-mail com o conteúdo especificado:
Evite ciclos infinitos
A ação Até interrompe a execução com base nos parâmetros opcionais Contagem e Tempo Limite . Certifique-se de definir esses valores de parâmetro de acordo:
| Parâmetro | Descrição |
|---|---|
| Contagem | O número máximo de iterações executadas antes da saída do loop. Para os limites predefinido e máximo do número de ações Until que um fluxo de trabalho pode ter, consulte Limites de concorrência, repetição em ciclo e debatching. |
| Tempo limite | O tempo máximo durante o qual a ação Until, incluindo todas as iterações, é executada antes de o ciclo terminar. Este valor é especificado no formato ISO 8601 e é avaliado para cada iteração. Se qualquer ação no loop demorar mais do que o limite de tempo limite, a iteração atual não será interrompida. No entanto, a próxima iteração não se inicia porque a condição de tempo limite é atingida. Para os limites predefinidos e máximos do valor de Timeout, consulte Limites de concorrência, de repetição em ciclo e de desagregação em lotes. |
Revise o histórico de execuções das iterações do ciclo Until
Quando visualiza o histórico de execução de um fluxo de trabalho que inclui um ciclo Until, o estado detalhado e os resultados das ações dentro do ciclo só estão disponíveis após o ciclo concluir toda a sua execução. Enquanto o loop Until ainda está a executar as suas iterações, a ação do loop mostra o estado Running , mas não podes expandir ou percorrer os resultados individuais da iteração até que o loop saia.
O ciclo termina quando se verifica uma das seguintes condições:
- A expressão especificada avalia-se como verdadeira.
- O ciclo atinge o limite de Count.
- O ciclo atinge o limite de Timeout .
Depois de o ciclo terminar, pode selecionar a ação Until no histórico de execução para visualizar cada iteração e o estado das ações filhas dentro dessa iteração.
Nota
Se o seu ciclo Until for executado durante um período prolongado, tem de esperar que o ciclo termine completamente antes de poder consultar o histórico de execução para ver os resultados das iterações individuais. Para monitorizar ciclos de longa duração e em andamento, considere adicionar ações de registo ou notificação dentro do ciclo que emitam estado de forma independente, por exemplo, enviando uma mensagem para uma fila ou atualizando uma variável que um branch paralelo possa ler.
Definição de "até" (JSON)
Se você estiver trabalhando na visualização de código, poderá definir uma Until ação na definição JSON do seu fluxo de trabalho, por exemplo:
"actions": {
"Initialize_variable": {
// Definition for initialize variable action
},
"Send_an_email": {
// Definition for send email action
},
"Until": {
"type": "Until",
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Limit",
"value": 1
},
"runAfter": {}
}
},
"expression": "@equals(variables('Limit'), 10)",
// To prevent endless loops, an "Until" loop
// includes these default limits that stop the loop.
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
}
}
}
Este exemplo de ciclo Until invoca um terminal HTTP, que cria um recurso. O ciclo termina quando o corpo da resposta HTTP é devolvido com o estado Completed. Para evitar ciclos intermináveis, o ciclo também é interrompido se ocorrer alguma das seguintes condições:
O ciclo foi executado 10 vezes conforme especificado pelo atributo
count. O padrão é 60 vezes.O ciclo foi executado durante duas horas, conforme especificado pelo atributo
timeoutno formato ISO 8601. O padrão é uma hora.
"actions": {
"myUntilLoopName": {
"type": "Until",
"actions": {
"Create_new_resource": {
"type": "Http",
"inputs": {
"body": {
"resourceId": "@triggerBody()"
},
"url": "https://domain.com/provisionResource/create-resource"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(body('Create_new_resource'), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}