Executar ações com base no status do grupo usando escopos nos Aplicativos Lógicos do Azure

Aplica-se a: Aplicativos Lógicos do Azure (Consumo)

Para executar ações somente depois que outro grupo de ações for bem-sucedido ou falhar, agrupe essas ações dentro de um escopo. Essa estrutura é útil quando você deseja organizar ações como um grupo lógico, avaliar o status desse grupo e executar ações baseadas no status do escopo. Depois que todas as ações em um escopo terminam de ser executadas, o escopo também recebe seu próprio status. Por exemplo, você pode usar escopos quando quiser implementar o tratamento de exceções e erros.

Para verificar o status de um escopo, você pode usar os mesmos critérios usados para determinar o status de execução de um aplicativo lógico, como Aprovado, Falhado, Cancelado e assim por diante. Por padrão, quando todas as ações do escopo são bem-sucedidas, o status do escopo é marcado como Bem-sucedido. Mas quando qualquer ação no escopo falha ou é cancelada, o status do escopo é marcado como Falha. Para limites de escopos, consulte Limites e configuração.

Por exemplo, aqui está um aplicativo lógico de alto nível que usa um escopo para executar ações específicas e uma condição para verificar o status do escopo. Se alguma ação no escopo falhar ou terminar inesperadamente, o escopo será marcado como Falha ou Anulado , respectivamente, e o aplicativo lógico enviará uma mensagem "Falha no escopo". Se todas as ações com escopo forem bem-sucedidas, o aplicativo lógico enviará uma mensagem "Escopo bem-sucedido".

Diagram shows the logic app scope flow with examples of

Pré-requisitos

Para seguir o exemplo neste artigo, você precisa destes itens:

  • Uma subscrição do Azure. Se não tiver uma subscrição, inscreva-se numa conta do Azure gratuita.

  • Uma conta de e-mail de qualquer provedor de e-mail suportado pelo Logic Apps. Este exemplo usa Outlook.com. Se você usar um provedor diferente, o fluxo geral permanecerá o mesmo, mas sua interface do usuário parecerá diferente.

  • Uma chave do Bing Maps. Para obter essa chave, consulte Obter uma chave do Bing Maps.

  • Conhecimento básico sobre aplicativos lógicos

Criar aplicativo lógico de exemplo

Primeiro, crie este aplicativo lógico de exemplo para que você possa adicionar um escopo mais tarde:

Create sample logic app

  • Um gatilho de Agendamento - Recorrência que verifica o serviço Bing Maps em um intervalo especificado
  • Um Bing Maps - Obter ação de rota que verifica o tempo de viagem entre dois locais
  • Uma ação de condição que verifica se o tempo de viagem excede o tempo de viagem especificado
  • Uma ação que lhe envia um e-mail informando que o tempo de viagem atual excede o tempo especificado

Você pode salvar seu aplicativo lógico a qualquer momento, portanto, salve seu trabalho com frequência.

  1. Entre no portal do Azure, se ainda não o fez. Criar uma aplicação lógica em branco.

  2. Adicione o gatilho Schedule - Recurrence com estas configurações: Intervalo = "1" e Frequência = "Minuto"

    Set up

    Gorjeta

    Para simplificar visualmente sua exibição e ocultar os detalhes de cada ação no designer, recolha a forma de cada ação à medida que avança nessas etapas.

  3. Adicione a ação Bing Maps - Obter rota .

    1. Se ainda não tiver uma ligação ao Bing Maps, ser-lhe-á pedido para criar uma ligação.

      Definição valor Description
      Nome da Ligação BingMapsConnection Indique um nome para a ligação.
      Chave API <your-Bing-Maps-key> Introduza a chave do Mapas Bing que recebeu anteriormente.
    2. Configure sua ação Obter rota , conforme mostrado na tabela abaixo desta imagem:

      Set up

      Para obter mais informações sobre estes parâmetros, veja Calculate a route (Calcular um percurso).

      Definição valor Description
      Waypoint 1 <start> Insira a origem da sua rota.
      Waypoint 2 <fim> Insira o destino da sua rota.
      Evitação None Insira itens a serem evitados em sua rota, como rodovias, pedágios e assim por diante. Para valores possíveis, consulte Calcular uma rota.
      Optimize timeWithTraffic Selecione um parâmetro para otimizar sua rota, como distância, tempo com informações de trânsito atuais e assim por diante. Este exemplo usa este valor: "timeWithTraffic"
      Distance unit <your-preference> Introduza a unidade de distância para calcular o seu percurso. Este exemplo usa este valor: "Mile"
      Travel mode Driving Insira o modo de viagem para a sua rota. Este exemplo usa este valor "Condução"
      Transit Date-Time None Aplica-se apenas ao modo de trânsito.
      Tipo de data de trânsito None Aplica-se apenas ao modo de trânsito.
  4. Adicione uma condição que verifique se o tempo de viagem atual com tráfego excede um tempo especificado. Para este exemplo, siga estes passos:

    1. Renomeie a condição com esta descrição: Se o tempo de tráfego for maior do que o tempo especificado

    2. Na coluna mais à esquerda, clique dentro da caixa Escolher um valor para que a lista de conteúdo dinâmico apareça. Nessa lista, selecione o campo Tráfego de Duração da Viagem, que é em segundos.

      Build condition

    3. Na caixa do meio, selecione este operador: é maior que

    4. Na coluna mais à direita, insira este valor de comparação, que é em segundos e equivalente a 10 minutos: 600

      Quando estiver pronto, a condição terá o aspeto deste exemplo:

      Finished condition

  5. Na ramificação If true, adicione uma ação "enviar e-mail" para seu provedor de e-mail. Configure esta ação seguindo as etapas abaixo desta imagem:

    Add

    1. No campo Para, insira seu endereço de e-mail para fins de teste.

    2. No campo Assunto, insira este texto:

    Time to leave: Traffic more than 10 minutes

    1. No campo Corpo, insira este texto com um espaço à direita:

    Travel time:

    Enquanto o cursor aparece no campo Corpo , a lista de conteúdo dinâmico permanece aberta para que você possa selecionar quaisquer parâmetros disponíveis neste momento.

    1. Na lista de conteúdo dinâmico, escolha Expressão.

    2. Localize e selecione a função div( ). Coloque o cursor entre parênteses da função.

    3. Enquanto o cursor estiver entre parênteses da função, escolha Conteúdo dinâmico para que a lista de conteúdo dinâmico apareça.

    4. Na seção Obter rota, selecione o campo Tráfego de Duração do Tráfego.

      Select

    5. Depois que o campo for resolvido para o formato JSON, adicione uma vírgula (,) seguida do número 60 para converter o valor em Tráfego de Duração do Tráfego de segundos para minutos.

      div(body('Get_route')?['travelDurationTraffic'],60)
      

      Sua expressão agora se parece com este exemplo:

      Finish expression

    6. Quando terminar, escolha OK.

    1. Depois que a expressão for resolvida, adicione este texto com um espaço à esquerda: minutes

      Seu campo Corpo agora se parece com este exemplo:

      Finished

  6. Guarde a sua aplicação lógica.

Em seguida, adicione um escopo para que você possa agrupar ações específicas e avaliar seu status.

Adicionar um âmbito

  1. Se ainda não o fez, abra seu aplicativo lógico no Logic App Designer.

  2. Adicione um escopo no local do fluxo de trabalho desejado. Por exemplo, para adicionar um escopo entre as etapas existentes no fluxo de trabalho do aplicativo lógico, siga estas etapas:

    1. Mova o ponteiro sobre a seta onde pretende adicionar o âmbito. Escolha o sinal de adição (+)> Adicionar uma ação.

      Add a scope

    2. Na caixa de pesquisa, digite "escopo" como filtro. Selecione a ação Escopo .

Adicionar etapas ao escopo

  1. Agora, adicione as etapas ou arraste as etapas existentes que você deseja executar dentro do escopo. Neste exemplo, arraste estas ações para o escopo:

    • Obter rota
    • Se o tempo de tráfego for maior do que o tempo especificado, o que inclui as ramificações true e false

    Seu aplicativo lógico agora se parece com este exemplo:

    Scope added

  2. No escopo, adicione uma condição que verifique o status do escopo. Renomeie a condição com esta descrição: Se o escopo falhar

    Add condition to check scope status

  3. Na condição, adicione essas expressões que verificam se o status do escopo é igual a "Falha" ou "Abortado".

    1. Para adicionar outra linha, escolha Adicionar.

    2. Em cada linha, clique dentro da caixa à esquerda para que a lista de conteúdo dinâmico apareça. Na lista de conteúdo dinâmico, escolha Expressão. Na caixa de edição, introduza esta expressão e, em seguida, selecione OK:

      result('Scope')[0]['status']

      Screenshot that shows the

    3. Para ambas as linhas, select é igual a como o operador.

    4. Para os valores de comparação, na primeira linha, insira Failed. Na segunda linha, digite Aborted.

      Quando estiver pronto, a condição terá o aspeto deste exemplo:

      Add expression that checks the scope's status

      Agora, defina a propriedade da runAfter condição para que a condição verifique o status do escopo e execute a ação de correspondência que você definir em etapas posteriores.

    5. Na condição Se o escopo falhou, escolha o botão de reticências (...) e, em seguida, escolha Configurar execução após.

      Configure runAfter property

    6. Selecione todos estes status de escopo: foi bem-sucedido, falhou, foi ignorado e atingiu o tempo limite

      Select scope statuses

    7. Quando tiver terminado, selecione Concluído. A condição agora mostra um ícone de "informação".

  4. Nas ramificações Se verdadeiro e Se falso, adicione as ações que você deseja executar com base em cada status de escopo, por exemplo, envie um email ou mensagem.

    Add actions to take based on scope status

  5. Guarde a sua aplicação lógica.

Seu aplicativo lógico concluído agora se parece com este exemplo:

Finished logic app with scope

Teste o seu trabalho

Na barra de ferramentas do designer, escolha Executar. Se todas as ações com escopo forem bem-sucedidas, você receberá uma mensagem "Escopo bem-sucedido". Se alguma ação com escopo não for bem-sucedida, você receberá uma mensagem "Falha no escopo".

Definição JSON

Se você estiver trabalhando na visualização de código, poderá definir uma estrutura de escopo na definição JSON do seu aplicativo lógico. Por exemplo, aqui está a definição JSON para gatilho e ações no aplicativo lógico anterior:

"triggers": {
  "Recurrence": {
    "type": "Recurrence",
    "recurrence": {
       "frequency": "Minute",
       "interval": 1
    }
  }
}
"actions": {
  "If_scope_failed": {
    "type": "If",
    "actions": {
      "Scope_failed": {
        "type": "ApiConnection",
        "inputs": {
          "body": {
            "Body": "Scope failed. Scope status: @{result('Scope')[0]['status']}",
            "Subject": "Scope failed",
            "To": "<your-email@domain.com>"
          },
          "host": {
            "connection": {
              "name": "@parameters('$connections')['outlook']['connectionId']"
            }
          },
          "method": "post",
          "path": "/Mail"
        },
        "runAfter": {}
      }
    },
    "else": {
      "actions": {
        "Scope_succeded": {
          "type": "ApiConnection",
          "inputs": {
            "body": {
              "Body": "Scope succeeded. Scope status: @{result('Scope')[0]['status']}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@result('Scope')[0]['status']", 
              "Failed"
            ]
         },
         {
            "equals": [
               "@result('Scope')[0]['status']", 
               "Aborted"
            ]
         } 
      ]
    },
    "runAfter": {
      "Scope": [
        "Failed",
        "Skipped",
        "Succeeded",
        "TimedOut"
      ]
    }
  },
  "Scope": {
    "type": "Scope",
    "actions": {
      "Get_route": {
        "type": "ApiConnection",
        "inputs": {
          "host": {
            "connection": {
              "name": "@parameters('$connections')['bingmaps']['connectionId']"
            }
          },
          "method": "get",
          "path": "/REST/V1/Routes/Driving",
          "queries": {
            "distanceUnit": "Mile",
            "optimize": "timeWithTraffic",
            "travelMode": "Driving",
            "wp.0": "<start>",
            "wp.1": "<end>"
          }
        },
        "runAfter": {}
      },
      "If_traffic_time_is_more_than_specified_time": {
        "type": "If",
        "actions": {
          "Send_mail_when_traffic_exceeds_10_minutes": {
            "type": "ApiConnection",
            "inputs": {
              "body": {
                 "Body": "Travel time:@{div(body('Get_route')?['travelDurationTraffic'],60)} minutes",
                 "Subject": "Time to leave: Traffic more than 10 minutes",
                 "To": "<your-email@domain.com>"
              },
              "host": {
                "connection": {
                   "name": "@parameters('$connections')['outlook']['connectionId']"
                }
              },
              "method": "post",
              "path": "/Mail"
            },
            "runAfter": {}
          }
        },
        "expression": {
          "and" : [
            {
               "greater": [ 
                  "@body('Get_route')?['travelDurationTraffic']", 
                  600
               ]
            }
          ]
        },
        "runAfter": {
          "Get_route": [
            "Succeeded"
          ]
        }
      }
    },
    "runAfter": {}
  }
},

Obter suporte

Próximos passos