Share via


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

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

Para executar ações somente após um outro grupo de ações ter êxito ou falhar, agrupe essas ações em um escopo. Essa estrutura é útil quando 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 concluem a execução, o escopo também obtém seu próprio status. Por exemplo, é possível usar escopos quando você quiser implementar tratamento de erro e exceção.

Para verificar o status de um escopo, é possível usar os mesmos critérios utilizados para determinar um status de execução de aplicativos lógicos, como Bem-sucedido, Com falha, 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 apresenta falha ou é cancelada, o status do escopo é marcado como Com falha. Para limites nos escopos, consulte Limites e configurações.

Por exemplo, aqui é 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 uma ação no escopo falhar ou for encerrada inesperadamente, o escopo é marcado como Com falha ou Anulado, respectivamente, e o aplicativo lógico envia uma mensagem "Falha de escopo". Se todas as ações de escopo tiverem êxito, o aplicativo lógico envia uma mensagem "Escopo com êxito".

Diagram shows the logic app scope flow with examples of

Pré-requisitos

Para seguir o exemplo neste artigo, é necessário estes itens:

  • Uma assinatura do Azure. Se você não tem uma assinatura, inscreva-se em uma conta gratuita do Azure.

  • Uma conta de email de qualquer provedor de email com suporte de Aplicativos Lógicos. Este exemplo usa Outlook.com. Se você utiliza um provedor diferente, o fluxo geral permanece o mesmo, mas sua interface do usuário aparece diferente.

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

  • Conhecimento básico sobre aplicativos lógicos

Criar aplicativo lógico de exemplo

Primeiro, crie esse aplicativo lógico de exemplo para que seja possível adicionar um escopo posteriormente:

Create sample logic app

  • Um gatilho Agenda - Recorrência que verifica o serviço Bing Mapas em um intervalo especificado
  • Uma ação do Bing Mapas - Obter rota que verifica o tempo de viagem entre dois locais
  • Uma ação condicional que verifica se o tempo de viagem excede o tempo de viagem especificado
  • Uma ação que envia o email de que o tempo de viagem atual excede o tempo especificado

É possível salvar o aplicativo lógico a qualquer momento, portanto, salve seu trabalho frequentemente.

  1. Entre no Portal do Azure, se você ainda não fez isso. Criar um aplicativo lógico em branco.

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

    Set up

    Dica

    Para simplificar visualmente a exibição e ocultar os detalhes de cada ação no designer, recolha a forma de cada ação na medida em que você progride através dessas etapas.

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

    1. Se você ainda não tiver uma conexão do Bing Mapas, a criação será solicitada.

      Configuração Valor Descrição
      Nome da conexão BingMapsConnection Forneça um nome para a conexão.
      Chave de API <your-Bing-Maps-key> Insira a chave do Bing Mapas que você recebeu anteriormente.
    2. Configure a ação Obter rota, conforme mostrado na tabela abaixo da imagem:

      Set up

      Para saber mais sobre esses parâmetros, consulte Calcular uma rota.

      Configuração Valor Descrição
      Localizador 1 <iniciar> Insira a origem da rota.
      Localizador 2 <finalizar> Insira o destino da rota.
      Evitar Nenhum Insira os itens a serem evitados na rota, como rodovias, pedágios, e assim por diante. Para possíveis valores, consulte Calcular uma rota.
      Otimizar timeWithTraffic Selecione um parâmetro para otimizar a rota, como distância, tempo com informações de trânsito atuais, e assim por diante. Esse exemplo usa este valor: "timeWithTraffic"
      Unidades de distância <your-preference> Insira a unidade de distância para calcular a rota. Esse exemplo usa o seguinte valor: "Milha"
      Modo de navegação Automóvel Insira o modo de viagem para a rota. Esse exemplo usa este valor "Automóvel"
      Data /Hora de trânsito Nenhum Aplica-se apenas ao modo de trânsito.
      Tipo de data de trânsito Nenhum 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. Neste exemplo, siga estas etapas:

    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 seja exibida. A partir dessa lista, selecione o campo Tráfego de Duração de Viagem, que está em segundos.

      Build condition

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

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

      Ao concluir, a sua condição será semelhante a este exemplo:

      Finished condition

  5. No se for verdadeiro ramificar, adicionar uma ação "enviar email" 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 assunto, insira este texto:

    Time to leave: Traffic more than 10 minutes

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

    Travel time:

    Enquanto o cursor aparecer no campo Corpo, a lista de conteúdo dinâmico permanecerá aberta para que você possa selecionar os parâmetros disponíveis neste ponto.

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

    2. Localizar e selecionar a função div( ) . Coloque o cursor no dentro dos parênteses da função.

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

    4. Na seção Obter rota, selecione o campo Traffic Duration Traffic.

      Select

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

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

      A expressão agora é semelhante a 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

      O campo Corpo agora é semelhante a este exemplo:

      Finished

  6. Salve seu aplicativo lógico.

Em seguida, adicione um escopo para que seja possível agrupar ações específicas e avaliar os respectivos status.

Adicionar um escopo

  1. Abra o aplicativo lógico no Designer do Aplicativo Lógico, caso ainda não tenha feito isso.

  2. Adicione um escopo na localização do fluxo de trabalho desejado. Por exemplo, para adicionar um escopo entre etapas existentes no fluxo de trabalho de aplicativo lógico, siga estas etapas:

    1. Mova o ponteiro sobre a seta onde você deseja adicionar o escopo. Escolha o sinal de adição (+) > >Adicionar uma ação.

      Add a scope

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

Adicionar etapas ao escopo

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

    • Obter rota
    • Se o tempo de tráfego for maior que o tempo especificado, o que inclui os ramos verdadeiro e falso

    O aplicativo lógico agora é semelhante a este exemplo:

    Scope added

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

    Add condition to check scope status

  3. Na condição, adicione essas expressões que verificam se o status do osciloscópio é igual a "Falhou" ou "Anulado".

    1. Para adicionar outra linha, escolha adicionar.

    2. Em cada linha, clique dentro da caixa à esquerda para que apareça na lista de conteúdo dinâmica. Na lista de conteúdo dinâmica, escolha expressão. Na caixa de edição, digite esta expressão e, em seguida, escolha Okey:

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

      Screenshot that shows the

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

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

      Ao concluir, a sua condição será semelhante a este exemplo:

      Add expression that checks the scope's status

      Agora, defina a propriedade runAfter da condição para que a condição verifique o status do escopo e execute a ação correspondente que você define nas etapas posteriores.

    5. Na condição Se o escopo falhar, escolha o botão reticências (...) e, em seguida, escolha Configurar execução depois.

      Configure runAfter property

    6. Selecione todos esses status do escopo: for bem-sucedida, falhou, será ignorado, e foi atingido

      Select scope statuses

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

  4. Nas Se as ramificações e Falso forem verdadeiras, adicione as ações que você deseja executar com base em cada status do escopo, por exemplo, enviar um e-mail ou uma mensagem.

    Add actions to take based on scope status

  5. Salve seu aplicativo lógico.

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

Finished logic app with scope

Teste o trabalho

Na barra de ferramentas do Designer, escolha Executar. Se todas as ações com escopo tiverem êxito, você receberá uma mensagem "Escopo com êxito". Se alguma ação de escopo não tiver êxito, você receberá uma mensagem "Escopo com falha".

Definição JSON

Se você estiver trabalhando na exibição de código, será possível definir uma estrutura de escopo na definição JSON do aplicativo lógico. Por exemplo, aqui é 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": {}
  }
},

Obtenha suporte

Próximas etapas