Você criou um fluxo do Power Automate que é executado quando um item do SharePoint é modificado. Mas, em vez de executar uma vez, o fluxo fica se acionando repetidamente. Isso cria um loop infinito que pode gerar milhares de execuções e lentidão no site.
A causa raiz é um gatilho circular: seu fluxo modifica o mesmo item que ele monitora. Cada modificação aciona o fluxo novamente, que modifica o item outra vez, e o ciclo nunca para. O Power Automate não detecta nem bloqueia esse padrão automaticamente.
Este artigo explica exatamente por que o loop acontece e oferece duas soluções confiáveis. Você aprenderá a interromper loops ativos e a redesenhar seu fluxo para que o loop nunca mais ocorra.
Principais Conclusões: Interrompendo e Prevenindo o Loop do Gatilho de Modificação
- Condição de gatilho do Power Automate: Adicione uma condição que ignore o fluxo quando o usuário modificador for o próprio fluxo, quebrando o loop.
- Ação Terminar dentro do fluxo: Use a ação Terminar para interromper uma execução em loop antes que ela modifique o item novamente.
- Histórico de versões do SharePoint: Verifique o histórico de versões do item para confirmar quais alterações o fluxo está fazendo e quantas vezes.
Por que o Gatilho de Modificação Cria um Loop Infinito
O loop ocorre devido a um ciclo simples de causa e efeito:
- Seu fluxo é configurado com o gatilho Quando um item é modificado em uma lista ou biblioteca específica do SharePoint.
- Quando um usuário edita um item, o gatilho é disparado e o fluxo é executado.
- Dentro do fluxo, você tem uma ação que atualiza uma coluna nesse mesmo item. Por exemplo, você define uma coluna Status como “Aprovado” ou adiciona texto a uma coluna Comentários.
- O Power Automate envia a atualização para o SharePoint. O SharePoint registra a alteração como uma modificação.
- Como o item foi modificado novamente, o gatilho é disparado uma segunda vez. O fluxo é executado novamente, e a ação de atualização é executada outra vez.
- Esse ciclo se repete para sempre até que você pare manualmente o fluxo ou o SharePoint o limite.
O Power Automate não distingue entre uma alteração feita por um humano e uma alteração feita pelo fluxo. Ambas contam como modificações. O gatilho não possui filtro interno para ignorar alterações feitas pelo próprio fluxo.
Outra causa comum é usar a ação Atualizar item sem verificar se o valor já corresponde ao alvo. Se o fluxo sempre escreve o mesmo valor, ainda assim dispara um evento de modificação, mesmo que nada tenha mudado de fato. O SharePoint trata toda operação de gravação como uma modificação, independentemente de os dados terem sido alterados.
Como Interromper um Loop Ativo Imediatamente
Se seu fluxo está em loop, você deve interrompê-lo antes de aplicar uma correção permanente. Siga estas etapas para quebrar o ciclo.
- Desligue o fluxo
Vá para o Power Automate, abra seu fluxo e selecione Desligar. Isso impede que novos eventos de gatilho sejam iniciados. As execuções existentes em andamento continuarão até terminar ou expirar. - Cancele instâncias em execução
Na página de detalhes do fluxo, vá para a guia Histórico de execução de 28 dias. Selecione qualquer execução que ainda esteja em andamento. Escolha Cancelar para interrompê-la. Repita para todas as execuções ativas. - Verifique o histórico de versões do item
Abra a lista ou biblioteca do SharePoint. Selecione o item afetado e escolha Histórico de versões. Você verá muitas versões criadas pelo fluxo. Isso confirma o loop e mostra quantas vezes ele foi executado. - Restaure o item para uma versão limpa
No Histórico de versões, selecione a versão anterior ao início do loop. Clique em Restaurar. Isso remove todas as alterações indesejadas feitas pelo fluxo.
Após essas etapas, o loop é interrompido. Não religue o fluxo até aplicar uma das correções abaixo.
Correção 1: Adicionar uma Condição de Gatilho que Verifica o Campo Modificado Por
A correção mais confiável é adicionar uma condição de gatilho que impede o fluxo de ser executado quando a modificação foi feita pelo próprio fluxo. O Power Automate é executado sob uma conta de serviço chamada Microsoft Power Automate ou Proprietário do Fluxo, dependendo do seu ambiente. Você pode verificar o campo Modificado Por do item e ignorar o gatilho se o modificador for essa conta de serviço.
- Abra seu fluxo no modo de edição
Vá para o Power Automate e abra o fluxo em loop. Selecione Editar. - Adicione uma condição de gatilho
Selecione o cartão do gatilho. No menu superior, escolha Configurações. Em Condições de Gatilho, adicione a seguinte expressão:@not(equals(triggerOutputs()?['body/Editor/DisplayName'], 'Microsoft Power Automate'))
Se seu ambiente usar um nome de conta de serviço diferente, substitua Microsoft Power Automate pelo nome de exibição real. - Salve e teste
Salve o fluxo. Modifique um item manualmente para verificar se o fluxo é executado uma vez. Depois, verifique se o fluxo não é executado novamente quando a ação de atualização for concluída. - Condição alternativa usando ID do Editor
Se o nome de exibição não corresponder, use o ID do Editor:@not(equals(triggerOutputs()?['body/Editor/Id'], 'i:0i.t|microsoft.sharepoint.teamservices|flow@sharepoint'))
Este método funciona porque verifica quem fez a última modificação. Se o fluxo fez a alteração, a condição é avaliada como falsa e o gatilho não é disparado.
Correção 2: Usar uma Ação Compose e Lógica Condicional para Evitar Atualizações Desnecessárias
Se você não puder usar uma condição de gatilho, redesenhe o fluxo para atualizar o item apenas quando o valor realmente mudar. Isso evita o loop mesmo que o gatilho seja disparado novamente.
- Obtenha os valores atuais do item
Adicione uma ação Obter item após o gatilho. Use o ID do item da saída do gatilho para recuperar os valores atuais das colunas. - Compare os valores
Adicione uma ação Compose que verifica se a coluna alvo já contém o valor que você deseja escrever. Por exemplo, se você quiser definir Status como “Concluído”, use esta expressão:@equals(outputs('Get_item')?['body/Status'], 'Concluído') - Adicione uma ação Condição
Adicione uma ação Condição. Defina-a para verificar se a saída do Compose é igual a false. Se o valor já estiver definido, a condição falha e o fluxo termina sem atualizar. - Coloque a ação Atualizar item dentro do ramo Sim
Mova sua ação Atualizar item para o ramo Se sim da Condição. Isso garante que a atualização só seja executada quando o valor for diferente.
Essa correção quebra o loop porque o fluxo para de atualizar o item após a primeira execução. O gatilho pode disparar novamente, mas a Condição impede novas atualizações.
Problemas Comuns Após Aplicar a Correção
O fluxo ainda entra em loop mesmo com uma condição de gatilho
A expressão da condição de gatilho pode usar o nome de campo errado ou o nome de exibição da conta de serviço não corresponde. Abra o histórico de execução e veja as saídas do gatilho para uma execução concluída. Encontre o campo Editor e copie o nome de exibição exato. Atualize a expressão com esse nome.
O fluxo para de funcionar para modificações legítimas de usuários
Se a condição de gatilho for muito restritiva, pode bloquear todas as modificações. Teste com uma conta de usuário que não seja o proprietário do fluxo. Se o fluxo não for executado, remova a condição e use o método de comparação e condição.
O fluxo é executado, mas a ação Atualizar item falha com erro de permissão
A conta de serviço do fluxo deve ter permissões de edição na lista ou biblioteca. Vá para o SharePoint, abra as configurações da lista e verifique Permissões para esta lista. Adicione o proprietário do fluxo ou a conta de serviço com acesso de Contribuição.
| Item | Método da Condição de Gatilho | Método de Comparação e Condição |
|---|---|---|
| Complexidade de configuração | Baixa — uma expressão nas configurações do gatilho | Média — várias ações e uma Condição |
| Interrompe o loop imediatamente | Sim, bloqueando o gatilho | Não — o gatilho ainda dispara, mas a atualização é ignorada |
| Funciona com qualquer ação de atualização | Sim | Apenas se você puder comparar valores antes de atualizar |
| Requer o nome exato da conta de serviço | Sim | Não |
| Melhor para | Fluxos simples que sempre atualizam a mesma coluna | Fluxos complexos com atualizações condicionais |
Use o método da condição de gatilho quando quiser uma correção rápida e leve. Use o método de comparação e condição quando precisar de mais controle sobre quando as atualizações ocorrem.
Agora você sabe por que o gatilho de modificação entra em loop e como interrompê-lo. Desligue o fluxo em loop imediatamente, aplique uma das duas correções e teste com uma edição manual. Para fluxos futuros, sempre projete-os de modo que o gatilho e a ação de atualização não possam criar uma referência circular. Uma boa prática é usar uma lista separada para registrar alterações, em vez de atualizar o mesmo item que acionou o fluxo.