Como Projetar um Fluxo que Evite Loops Infinitos: Erros a Evitar
🔍 WiseChecker

Como Projetar um Fluxo que Evite Loops Infinitos: Erros a Evitar

Um loop infinito em um fluxo do Power Automate faz com que ele seja executado repetidamente sem parar. Isso pode consumir seus limites de solicitação de API, desacelerar seu ambiente e acionar ações indesejadas. A causa mais comum é um gatilho que é reativado com base em uma ação que o próprio fluxo executa. Este artigo explica os erros típicos que criam loops infinitos e como projetar fluxos que param quando deveriam.

Principais Conclusões: Como Impedir que um Fluxo Execute para Sempre

  • Condições de gatilho nas configurações do gatilho: Adicione uma condição que impeça o fluxo de ser executado quando a atualização for feita pelo próprio fluxo.
  • Configure colunas de controle de alterações: Use uma coluna Sim/Não ou uma coluna de carimbo de data/hora para marcar itens que o fluxo já processou.
  • Defina um limite de frequência de execução: Nas configurações do gatilho, configure um número máximo de execuções ou um limite de recorrência para limitar as execuções.

ADVERTISEMENT

Por que Loops Infinitos Acontecem no Power Automate

Um loop infinito ocorre quando um gatilho de fluxo é ativado por uma ação que o mesmo fluxo executa. Por exemplo, um fluxo que é acionado por um novo item em uma lista do SharePoint e depois atualiza esse mesmo item faz com que a atualização dispare o gatilho novamente. Esse ciclo se repete até que o fluxo atinja um limite de serviço ou você o pare manualmente. A causa raiz é a falta de uma condição de proteção que diferencie entre uma ação do usuário e uma ação do fluxo.

O Power Automate não detecta ou bloqueia automaticamente gatilhos autorreferentes. A plataforma assume que o designer do fluxo implementou a lógica adequada para evitar o reacionamento. Sem essa lógica, qualquer atualização na mesma fonte de dados que o gatilho monitora reiniciará o fluxo. Isso é por design, mas coloca a responsabilidade em você para adicionar os controles corretos.

Passos para Projetar um Fluxo que Evite Loops Infinitos

Use os seguintes métodos para evitar loops infinitos. Aplique pelo menos uma dessas técnicas em todo fluxo que atualize a mesma fonte de dados que monitora.

Método 1: Adicione uma Condição de Gatilho que Exclua a Conta do Fluxo

  1. Abra as configurações do gatilho
    No Power Automate, selecione a etapa do gatilho. Clique no menu de reticências e escolha Configurações.
  2. Adicione uma condição de gatilho
    Na seção Condições de Gatilho, adicione uma expressão que verifique o campo Modificado Por. Use a expressão: @not(equals(triggerOutputs()?[‘body/Editor/Claim’], ‘i:0#.f|membership|flowaccount@dominio.com’)). Substitua o endereço de email pela conta de serviço real que executa o fluxo.
  3. Salve e teste
    Salve o fluxo. Crie um novo item manualmente para verificar se o fluxo é executado. Em seguida, atualize esse item usando a conta do fluxo para confirmar que o fluxo não é reacionado.

Método 2: Use uma Coluna de Controle de Alterações

  1. Adicione uma coluna Sim/Não à lista
    No SharePoint, adicione uma coluna chamada FlowProcessed do tipo Sim/Não. Defina o valor padrão como Não.
  2. Modifique a condição do gatilho
    No gatilho do fluxo, adicione uma condição que verifique se FlowProcessed é igual a falso. Use a expressão: @equals(triggerOutputs()?[‘body/FlowProcessed’], false).
  3. Atualize a coluna após o processamento
    No final do fluxo, adicione uma ação para atualizar o item atual. Defina a coluna FlowProcessed como Sim. Isso impede que o fluxo seja acionado novamente no mesmo item.

Método 3: Limite a Frequência de Execução

  1. Abra as configurações do gatilho
    Selecione a etapa do gatilho e clique em Configurações.
  2. Defina um número máximo de execuções
    Na seção Condições de Gatilho, adicione uma expressão que limite o número de execuções. Por exemplo, use: @lessOrEquals(triggerOutputs()?[‘headers/x-ms-workflow-run-id’], 1). Isso permite apenas uma execução por item.
  3. Teste com várias atualizações
    Atualize o mesmo item várias vezes. O fluxo deve ser executado apenas uma vez.

ADVERTISEMENT

Erros Comuns que Criam Loops Infinitos

Atualizar o Mesmo Item Sem uma Proteção

O erro mais frequente é adicionar uma ação de Atualizar Item sem nenhuma condição que impeça o gatilho de disparar novamente. Se o fluxo atualizar a mesma lista ou biblioteca que o iniciou, a atualização aciona uma nova execução. Sempre adicione uma condição, uma coluna de controle de alterações ou uma condição de gatilho antes da ação de atualização.

Usar um Gatilho de Recorrência que Atualiza os Mesmos Dados

Um fluxo agendado que é executado a cada minuto e atualiza uma lista do SharePoint pode criar um loop de feedback se a ação de atualização modificar um campo que o próprio fluxo verifica. Em vez disso, projete o fluxo para atualizar apenas itens que não foram processados. Use uma consulta de filtro na ação Obter Itens para selecionar apenas itens onde a coluna de status não seja Concluído.

Ignorar o Campo Modificado Por

Quando você atualiza um item no SharePoint, o campo Modificado Por muda para a conta que realizou a atualização. Se o fluxo usar uma conta de serviço, essa conta se torna o Modificado Por. Uma condição de gatilho que verifica a conta do fluxo é uma maneira confiável de interromper o reacionamento. Muitos designers esquecem de incluir essa verificação.

Não Usar uma Condição de Término em Loops Do Until

Dentro de um fluxo, uma ação Do Until pode fazer loop infinitamente se a condição de saída nunca for atendida. Por exemplo, um loop que espera que uma coluna mude para Aprovado será executado para sempre se a coluna nunca mudar. Defina um número máximo de iterações na configuração Do Until. O padrão é 60, mas você pode reduzi-lo para 10 ou 20 dependendo do seu cenário.

Gatilho Automático vs. Fluxo Agendado: Principais Diferenças para Prevenção de Loop

Item Gatilho Automático (ex.: Quando um item é criado) Gatilho Agendado (ex.: Recorrência)
Risco de loop Alto — o gatilho é acionado a cada alteração, incluindo alterações feitas pelo fluxo Médio — o gatilho é acionado em um agendamento, mas as atualizações ainda podem causar reacionamentos se o fluxo for executado novamente
Método de proteção principal Condição de gatilho ou coluna de controle de alterações Consulta de filtro em Obter Itens para excluir itens já processados
Controle de limite de execução Condições de gatilho e número máximo de execuções Intervalo de recorrência e limite de iteração Do Until
Melhor para Processamento em tempo real de dados novos ou alterados Processamento em lote em um agendamento fixo

Agora você pode projetar fluxos que param corretamente adicionando condições de gatilho, colunas de controle de alterações ou limites de frequência de execução. Comece revisando seus fluxos existentes em busca de qualquer ação de atualização que tenha como alvo a mesma fonte de dados do gatilho. Aplique pelo menos um método de proteção a cada fluxo. Para fluxos complexos, combine uma condição de gatilho com uma coluna de controle de alterações para proteção dupla.

ADVERTISEMENT