Dynamics do Zero ao PRO · Lição 18 de 48 · Módulo 3

LIÇÃO 18Escalonamento Automático de Casos em Atraso

Casos que ficam parados sem atualização são o pesadelo de qualquer time de suporte. Este fluxo roda de hora em hora, encontra casos sem movimentação por mais de X horas e escala automaticamente para o supervisor — sem ninguém precisar monitorar manualmente.

🎯

Resultado desta lição

Ao final, você terá um fluxo agendado que roda a cada hora, lista casos ativos sem atualização há mais de 4 horas e envia e-mail de escalonamento ao supervisor com a lista dos casos em atraso.

Estrutura do fluxo

// Fluxo — Escalonamento Automático (Scheduled)
⏰
Trigger
Recorrência — a cada 1 hora
Scheduled cloud flow · roda independente de qualquer evento
🔍
Ação
Listar linhas (Dataverse)
Filtra casos ativos com Modified On há mais de 4 horas
🔢
Condição
Existem casos em atraso?
Se length(body) > 0 → continua · Se 0 → termina sem enviar e-mail
🔄
Loop
Apply to each — para cada caso em atraso
Acumula linha HTML com dados de cada caso
📧
Ação
Enviar e-mail ao supervisor
Com a lista de casos em atraso no corpo

Passo a passo

  1. Crie um Scheduled cloud flow

    → make.powerautomate.com → + Create → Scheduled cloud flow
    Flow name: Dynamics — Escalonamento Automático de Casos
    Starting: hoje
    Repeat every: 1 Hour

    Clique em Create. O trigger de recorrência já vem configurado — você não precisa adicionar nenhum trigger manualmente.

    Scheduled vs. Automated: O fluxo da Lição 17 era Automated — disparava quando algo acontecia. Este é Scheduled — dispara em intervalos fixos, independente de qualquer evento. Use Scheduled quando precisar monitorar ou processar dados em lote periodicamente.
  2. Adicione a ação "List rows" no Dataverse

    → + New step → List rows (conector Dataverse)
    Table name: Cases
    Filter rows (OData):
    statecode eq 0 and modifiedon lt @{addHours(utcNow(), -4)}

    Essa query OData filtra casos onde: statecode eq 0 = caso ativo, e modifiedon lt addHours(utcNow(), -4) = última modificação foi há mais de 4 horas.

    addHours(utcNow(), -4): É uma expressão do Power Automate. utcNow() retorna a hora atual em UTC. addHours(..., -4) subtrai 4 horas. O resultado é a hora de corte — casos modificados antes dessa hora entram no filtro.
    Limite de linhas: Por padrão, o List rows retorna no máximo 5000 registros. Se sua base tiver mais casos em atraso, ative a paginação nas configurações avançadas da ação. Para ambientes de produção, sempre configure o limite.
  3. Adicione uma condição — verificar se há casos

    → + New step → Condition
    Valor 1: clique em expressão → length(body('List_rows')?['value'])
    Operador: is greater than
    Valor 2: 0

    Esta condição verifica se a lista retornou pelo menos um caso. Se não houver casos em atraso, o fluxo vai para o lado "No" da condição — que ficará vazio — e termina sem enviar e-mail.

    Por que verificar antes de enviar? Sem a condição, o fluxo enviaria um e-mail vazio ao supervisor toda hora mesmo quando tudo está em dia. A condição garante que o e-mail só é enviado quando realmente há casos a escalar.
  4. Inicialize uma variável para acumular os casos

    No lado Yes da condição, adicione:

    → Initialize variable
    Name: ListaCasos
    Type: String
    Value: deixe em branco
    Por que variável? O loop "Apply to each" vai passar por cada caso e acumular uma linha de texto com os dados daquele caso. A variável String funciona como um "acumulador" — a cada iteração do loop, concatenamos a linha do caso atual ao que já foi acumulado.
  5. Adicione o loop "Apply to each"

    → + New step → Apply to each
    Select an output from previous steps: value (resultado do List rows)

    Dentro do loop, adicione uma ação Append to string variable:

    Name: ListaCasos
    Value:
    • [Case Title] | Cliente: [Customer (Value)] | Prioridade: [Priority (Label)] | Última atualização: [Modified On]
    + quebra de linha (pressione Enter no campo)

    Cada iteração do loop adiciona uma linha à variável com os dados daquele caso específico.

  6. Envie o e-mail de escalonamento ao supervisor

    Após o loop (fora do Apply to each), adicione a ação de envio de e-mail:

    To: e-mail fixo do supervisor (ex: supervisor@suaempresa.com)
    Subject: ⚠️ [length(body('List_rows')?['value'])] casos em atraso — Ação necessária
    Body:
    Os casos abaixo estão sem atualização há mais de 4 horas e requerem atenção:

    [variável ListaCasos]

    Por favor, verifique e tome as ações necessárias.
    E-mail fixo do supervisor: Em vez de e-mail fixo, você pode buscar o e-mail do supervisor no Dataverse usando "Get a row by ID" na tabela Users — igual à Lição 17. Para este exercício, use um e-mail fixo para simplicidade.
  7. Salve, teste e ative o fluxo

    → Clique em Save
    → Para testar: clique em Test → Manually → Run flow

    Para que o teste funcione, você precisa ter pelo menos um caso ativo que não foi modificado nas últimas 4 horas. Se necessário, ajuste o filtro temporariamente para 0 horas (addHours(utcNow(), 0)) para incluir todos os casos ativos no teste.

    Restaure o filtro após o teste: Volte para -4 horas no filtro OData antes de ativar o fluxo em produção.

Checklist

Atualizar o campo "Is Escalated" no Dynamics

Além de notificar o supervisor por e-mail, você pode marcar o caso no Dynamics como escalado. O campo Is Escalated (isescalated) existe nativamente na tabela Case e é visível nos dashboards e views.

Adicione dentro do loop, após o Append:
Ação: Update a row (Dataverse)
Table: Cases
Row ID: [Case (Value)] do loop
Is Escalated: Yes

Com isso, além do e-mail, o caso muda visualmente no Dynamics — o ícone de escalonamento aparece na lista e o supervisor pode filtrar todos os casos escalados de uma vez. Combinar notificação por e-mail + marcação no sistema é a abordagem mais robusta.

Foto de Pablo Maruk
Pablo Maruk
Analista Funcional de Dynamics · 16 anos de TI · EUA & Europa