ml365

Compartilhando um pouco do mundo Dynamics 365 e outras tecnologias relacionadas

Como cancelar todas a execuções em andamento de um fluxo do Power Automate

Por algumas vezes ao trabalhar com fluxos do Power Automate já lidei com cenários onde o fluxo em questão foi executado diversas vezes, o que resultou em uma lista enorme de execuções no estado ‘Em Execução’:

No cenário do print acima, o fluxo é disparado toda vez que um registro da entidade Contato é atualizado. O que ocorreu para que esse grande número de execuções fosse gerado é que uma rotina de atualização em massa foi realizada, criando, assim, milhares de execuções do fluxo e, por consequência, um problema de lentidão no sistema de destino das execuções do Power Automate, uma vez que esse fluxo em particular ao final de cada execução envia uma requisição HTTP para um outro sistema contendo as atualizações realizadas para o Contato em questão.

Dito isso, como estancar o problema? Infelizmente, a Microsoft não disponibiliza um botão do pânico para utilizarmos em cenários como esse, mas temos as seguintes opções:

Opção Nativa – Usar o template de cancelamento de execuções

Existe um template que podemos lançar mão para cancelar execuções em andamento de um dado fluxo do Power Automate (mais detalhes em https://learn.microsoft.com/en-us/power-automate/how-tos-bulk-resubmit#cancel-more-than-20-flow-runs). Os passos que devemos executar são:

1 – Navegar para https://aka.ms/cancelAllMyRunsTemplate

2 – Faça login nos dois componentes que serão exibidos

  1. Deixe a opção Gateways desmarcada.
  2. No campo URL do Recursos Base, insira https://api.flow.microsoft.com.
  3. No campo URI do Recursos do Azure AD (URI da ID do Aplicativo), insira https://service.flow.microsoft.com.

3 – No próximo passo, deixe o tipo de autenticação em ‘First Party’

4 – Na tela do designer do fluxo, clique em ‘Salvar’

5 – Navegue para a tela inicial do seu fluxo e clique em ‘Executar’. Você precisará informar:

Obtenha o ID do ambiente e o ID do fluxo.

  1. ID do ambiente: selecione Página Inicial no painel de navegação esquerdo e veja o URL na barra de endereço do seu navegador. Tudo entre environments/ e /home é o ID do ambiente:Captura de tela de um URL de fluxo com a ID do Ambiente em destaque.
  2. ID do Fluxo: selecione Meus fluxos no painel de navegação esquerdo e selecione seu fluxo. Quando a página Detalhes for aberta, observe o URL na barra de endereço do seu navegador. Tudo entre flows/ e /details é o Id do Fluxo: Captura de tela de uma URL de fluxo com a ID de Fluxo destacada.

6 – Uma vez fornecidas as informações necessárias, clique em ‘Executar Fluxo’

A rotina de cancelamento será iniciada e, dependendo de quantas execuções estiverem em andamento, esse processo poderá levar algumas horas

Opção Customizada – Usando os recursos de desenvolvedor do navegador

Essa é maneira mais rápida (e divertida) para iniciar uma rotina de cancelamento das execuções em andamento.

O princípio que envolve ela é simples: você pode manualmente ir cancelando as execuções em andamento, mas esse é um processo indicado para poucas execuções, uma vez que existe um limite de até 20 execuções que podem ser canceladas por vez. Assim, a solução consiste em rodar um script via recursos de desenvolvedor que irá capturar os elementos necessários da página e simular o clique do mouse no botão de cancelamento para cada execução em andamento. Esse processo vai ocorrendo a cada X segundos de forma que será possível acompanhar o progresso da rotina.

Siga os seguintes passos para utilizar essa abordagem:

1 – No fluxo que deseja cancelar as execuções em andamento, navegue para a seção ‘Todas as Execuções’

2 – No histórico de execuções que será aberto, modifique o filtro para apenas as execuções em andamento

3 – Abra os recursos do desenvolvedor do seu navegador (F12) e vá para a aba Console

4 – Insira o trecho abaixo (habilitar o JQuery) e execute

var jq = document.createElement(‘script’);
jq.src=”https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js”;
document.getElementsByTagName(‘head’)[0].appendChild(jq);

5 – Insira o trecho abaixo (rotina de cancelamento) e execute

confirm = function () {return true;};
setInterval(function () {
$(“.fl-StatusInCell:contains(‘Running’)”).parent().parent().parent().find(‘.ms-DetailsRow-cell’).first().click();
$(“.fl-StatusInCell:contains(‘Running’)”).parent().parent().parent().find(‘.ms-DetailsRow-cell’).last().click();
$(“.fl-StatusInCell:contains(‘Running’)”).parent().parent().parent().find(‘.ms-DetailsRow-cell’).first().click();
$(‘button[name=”Cancel flow run(s)”]’).click();
},3000);

Feito isso, mantenha a página aberta até o fim da execução e a rotina de cancelamento irá sendo executada enquando houver execuções a serem canceladas.

Abs e até a próxima 😉

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *