Controlo de Loop
- Tipo de Tarefa:
loop-control
A Tarefa Controlo de Loop é um componente de fluxo especializado que permite criar ciclos complexos, semelhantes a uma estrutura while em programação. Diferente da Tarefa Repeat, que repete apenas a ação imediatamente anterior, o Controlo de Loop atua como um ponto de "salto" (goto), permitindo criar ciclos que incluem uma sequência de várias Tarefas.
Configuração
A configuração define os limites e a temporização do ciclo.
- Limite de iterações: O número máximo de vezes que o ciclo pode ser executado. Pode ser inserido manualmente ou através de um parâmetro dinâmico (ex:
#>parametro_num<#). - Intervalo entre iterações (s): O intervalo de espera, em segundos, entre o final de uma iteração e o início da seguinte.
Arquitetura do Ciclo
Para um funcionamento correto, o ciclo requer uma arquitetura específica de três componentes:
- Corpo do Loop: Uma ou mais ações (Tarefas) que devem ser executadas repetidamente (ex: Enviar um e-mail, atualizar uma variável).
- Tarefa anterior ao CONTROLO DE LOOP: A última Tarefa dentro do corpo do loop terá:
- Uma condição especial do tipo "LOOP": enquanto esta expressão for verdadeira, o fluxo é direcionado para a Tarefa Controlo de Loop para continuar o ciclo. Quando a condição "LOOP" se torna falsa, o fluxo segue um destes caminhos alternativos ou termina o Workflow, saindo definitivamente do ciclo.
- Tarefa "Controlo de Loop": O motor do ciclo. Quando recebe o fluxo, incrementa o seu contador e redireciona-o para a primeira Tarefa do corpo do loop.
Funcionamento Detalhado
Em cada passo, o fluxo é o seguinte:
- São executadas as ações no corpo do loop.
- A "Tarefa anterior ao Controlo de Loop" avalia as suas condições.
- Se a condição "LOOP" for verdadeira, o fluxo vai para o "Controlo de Loop", que o redireciona para o início.
- Se a condição "LOOP" for falsa, o fluxo sai do ciclo através de outro caminho.
Exemplo 1
Este é o cenário padrão. O ciclo termina porque uma condição lógica é satisfeita.
Fluxo de Execução (baseado na última captura de tela):
- Declarar variáveis define uma variável
x a "0". - O Workflow executa E-Mail Out v.2, depois Definir variáveis incrementa o valor da variável
x di 1. - Decisão: A Tarefa Definir variáveis avalia as suas saídas:
- A condição "LOOP"
x == "hello"é falsa.
- Saída do Ciclo: O fluxo segue o caminho
x != "hello"e prossegue para o Tarefa E-Mail End. O ciclo é interrompido corretamente, e o "Controlo de Loop" nunca é alcançado.
Exemplo 2: Loop Contínuo até o Limite (Lógica "While True")
Este cenário é pensado para executar uma ação um número predefinido de vezes. Aqui, a condição de saída lógica não existe ou é sempre verdadeira.
Fluxo de Execução:
- Declarar variáveis define uma variável x como "0".
- O fluxo executa a sequência E-Mail Out v.2 -> Definir variáveis incrementa o valor da variável x em 1.
- A Tarefa Definir variáveis tem uma condição "LOOP" que, neste cenário, é sempre verdadeira.
- O fluxo passa para o "Controlo de Loop".
- O "Controlo de Loop" redireciona o fluxo para o início, em E-Mail Out v.2.
- Este processo repete-se. O ciclo é intencional e controlado.
- O "Controlo de Loop" só parará quando o seu contador interno atingir o Limite de iterações (definido como 10). Nesse ponto, a Tarefa vai para FALHADO com a mensagem "Maximum Number of Iterations Reached (10)".
Parâmetros de Saída
- loopCount: Um contador que retorna o número da iteração atual. Este valor começa em 0 e é fundamental para criar condições de saída baseadas no número de ciclos executados (ex:
#>Controllo loop.loopCount<# < 5). - result: Contém uma mensagem de texto descritiva apenas no caso de o ciclo ser interrompido forçadamente pelo limite máximo (ex: "Maximum Number of Iterations Reached (10)").
- resultJson: Representa o resultado da execução da tarefa em formato JSON, incluindo informações gerais, configurações e detalhes da execução.
Notas Importantes
- As iterações começam em 0. Consequentemente, um Limite de iterações de 2 executará 3 iterações (0, 1 e 2).
- A Tarefa fica em FALHADO após esgotar as iterações.
Exemplo de ResultJson
{
"run_info": {
"status": "Completed",
"run_result": "Success"
},
"output_parameters": {
"exitStatus": "0"
}
}