Поделиться через


Вы можете выполнять действия рабочего процесса на основе состояния группы с помощью областей в Azure Logic Apps.

Область применения: Azure Logic Apps (потребление)

Чтобы выполнить действия только после успешного или неуспешного выполнения действий другой группы, поместите эту группу в область. Эта структура полезна, если необходимо упорядочить действия как логическую группу, оценить состояние этой группы и выполнить действия на основе состояния области. После завершения выполнения всех действий в области она также получает собственное состояние. Например, области можно использовать, если необходимо реализовать обработку ошибок и исключений.

Чтобы проверить статус области, вы можете использовать те же критерии, которые вы используете для определения статуса запуска приложений логики, такие как Успешно, Сбой, Отменено и т. д. По умолчанию, когда все действия области завершаются успешно, состояние области помечается как Успешно. Но когда какое-либо действие в области не удается или отменяется, состояние области помечается как Сбой. Сведения об ограничениях в областях см. в статье Ограничения и настройка Logic Apps.

Например, вот приложение логики высокого уровня, которое использует область для выполнения определенных действий и условие для проверки состояния области. Если какие-либо действия в области завершаются сбоем или неожиданно завершаются, область помечается как Сбой или Прервано соответственно, и приложение логики отправляет сообщение "Сбой области". Если все действия области успешны, приложение логики отправляет сообщение Scope succeeded (Область успешна).

Diagram shows the logic app scope flow with examples of

Необходимые компоненты

Чтобы выполнить пример в этой статье, потребуется следующее:

  • Подписка Azure. Если у вас нет ее, вы можете зарегистрироваться для получения бесплатной учетной записи Azure.

  • Учетная запись электронной почты любого поставщика электронной почты, поддерживаемого Logic Apps. В этом примере используется Outlook.com. Если вы используете другой поставщик, то общий поток остается прежним, но отображается другой пользовательский интерфейс.

  • Ключ карт Bing. Чтобы получить этот ключ, ознакомьтесь со статьей Getting a Bing Maps Key (Получение ключа Карт Bing).

  • Основные знания о приложениях логики

Создание примера приложения логики

Сначала создайте этот пример приложения логики, чтобы позднее можно было добавить область:

Create sample logic app

  • Триггер Расписание — повторение проверяет службу Карт Bing с заданной вами частотой.
  • Действие Bing Maps - Get route (Карты Bing — получить маршрут) проверяет время перемещения между двумя расположениями.
  • Условное действие, которое проверяет, превышает ли время перемещения указанное время.
  • Действие, которое отправляет вам сообщение электронной почты о том, что текущее время перемещения превышает указанное время.

Приложение логики можно сохранить в любое время, так что часто сохраняйте свою работу.

  1. Войдите на портал Azure, если вы еще этого не сделали. Создайте пустое приложение логики.

  2. Добавьте триггер Расписание — повторение с такими параметрами: Интервал — 1, Частота — "Минута".

    Set up

    Совет

    Чтобы визуально упростить представление и скрыть сведения о каждом действии в конструкторе, сворачивайте фигуры каждого действия по мере выполнения этих шагов.

  3. Добавьте действие Bing Maps — Get route (Карты Bing — получить маршрут).

    1. Если у вас еще нет подключения к Картам Bing, появится запрос на его установку.

      Параметр значение Описание
      Имя подключения BingMapsConnection Укажите имя подключения.
      Ключ API <ваш ключ Карт Bing> Введите ключ Карт Bing, полученный ранее.
    2. Настройте действие Get route (Получить маршрут), как показано в таблице под этим изображением:

      Set up

      Дополнительные сведения об этих параметрах см. в статье Calculate a Route (Расчет маршрута).

      Параметр значение Описание
      Пункт маршрута 1 <Начало> Введите начало маршрута.
      Пункт маршрута 2 <end> Введите место назначения маршрута.
      Избежание нет Введите то, чего нужно избегать на маршруте, например шоссе, платные дороги и т. д. Возможные значения см. в статье Calculate a Route (Расчет маршрута).
      Optimize (Оптимизация) timeWithTraffic Выберите параметр для оптимизации маршрута, например расстояние, время в пути в соответствии с информацией о текущей загрузке дорог и т. д. В этом примере используется это значение: "timeWithTraffic".
      Distance unit (Единица расстояния) <выбранная единица> Введите единицы измерения расстояния для расчета маршрута. В этом примере используется значение: "Mile" (Миля).
      Travel mode (Режим движения) Driving (Движение на автомобиле) Введите режим движения по маршруту. В этом примере используется значение: "Driving" (Вождение).
      Transit Date-Time (Дата и время транзита) нет Применяется только для режима движения Transit (Транзит).
      Transit Date-Time Type (Тип даты и времени транзита) нет Применяется только для режима движения Transit (Транзит).
  4. Добавьте условие, чтобы проверить, превышает ли текущее время движения в соответствии с текущей загрузкой определенное время. Для данного примера выполните следующее.

    1. Переименуйте условие, используя описание: Если время трафика превышает указанное время.

    2. Чтобы появился список динамического содержимого, щелкните в самом левом столбце внутри поля Выбрать значение. В данном списке выберите поле Travel Duration Traffic (Трафик длительности пути), которое задается в секундах.

      Build condition

    3. В среднем поле сравнения выберите оператор больше чем

    4. В правом столбце введите это значение сравнения, которое находится в секундах и эквивалентно 10 минутам: 600

      После введения значения условие должно выглядеть приблизительно так, как показано в примере ниже:

      Finished condition

  5. В ветке Если истинно добавьте действие "Отправить сообщение" для поставщика электронной почты. Настройте это действие, выполнив шаги, приведенные после изображения.

    Add

    1. В поле Кому введите адрес электронной почты в целях тестирования.

    2. В поле Тема введите следующий текст:

    Time to leave: Traffic more than 10 minutes

    1. В поле Текст введите этот текст с пробелом в конце:

    Travel time:

    Пока ваш курсор находится в поле Текст, список динамического содержимого остается открытым, поэтому вы можете выбрать любые параметры, доступные на этом этапе.

    1. В списке динамического содержимого выберите Выражение.

    2. Найдите функцию div( ) и выберите ее. Наведите курсор на содержимое, которое находится в скобках функции.

    3. Чтобы появился список динамического содержимого, выберите Динамическое содержимое (пока курсор находится в скобках функции).

    4. В разделе Получить маршрут выберите поле Travel Duration Traffic (Трафик длительности пути).

      Select

    5. После разрешения поля в формат JSON добавьте запятую (,), за которой следует число 60, чтобы преобразовать значение Travel Duration Traffic (Трафик длительности пути) из секунд в минуты.

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

      Теперь выражение выглядит как в следующем примере:

      Finish expression

    6. Когда все будет готово, нажмите кнопку ОК.

    1. После разрешения выражения добавьте текст с начальным пробелом: minutes.

      Теперь поле Текст выглядит, как в следующем примере:

      Finished

  6. Сохраните приложение логики

Затем добавьте область, чтобы группировать определенные действия и оценивать их состояние.

Добавление области

  1. Если это еще не сделано, откройте приложение логики в конструкторе приложений логики.

  2. Добавьте область в нужное место в рабочем процессе. Например, чтобы добавить область между существующими шагами в рабочем процессе приложения логики, выполните следующие действия.

    1. Переместите указатель на стрелку, где нужно добавить область. Выберите знак плюс (+) >Add an action (Добавить действие).

      Add a scope

    2. В поле поиска введите слово "scope" в качестве фильтра. Выберите действие Область.

Добавление шагов в область

  1. Теперь добавьте или перенесите имеющиеся шаги, которые необходимо выполнить внутри области. Например, перетащите эти действия в область:

    • Get route (Получить маршрут);
    • Если время трафика превышает указанное время, которое включает ветви Если истинно и Если ложно

    Теперь приложение логики выглядит, как в следующем примере:

    Scope added

  2. Добавьте в область условие, которое проверяет ее состояние. Переименуйте условие, используя описание: Если область завершилась со сбоем.

    Add condition to check scope status

  3. В условие необходимо добавить выражения, которые выполняют проверку состояния области, которое будет соответствовать значению "Сбой" или "Прервано".

    1. Чтобы добавить строку, выберите Добавить.

    2. Чтобы отобразился список динамического содержимого, щелкните внутри левого поля каждой строки. В списке динамического содержимого выберите Выражение. Введите выражение в поле ввода и нажмите кнопку OK.

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

      Screenshot that shows the

    3. Для обоих строк в качестве оператора выберите равно.

    4. Чтобы сравнить значения, введите в первой строке Failed. Во второй строке введите Aborted.

      После введения значения условие должно выглядеть приблизительно так, как показано в примере ниже:

      Add expression that checks the scope's status

      Задайте свойство условия runAfter. Теперь условие должно проверяет состояние области и выполнять те действия, которые будут определены в последующих шагах.

    5. В условии Если область завершилась со сбоем. нажмите кнопку Многоточие (...) и выберите Настройка последующего запуска.

      Configure runAfter property

    6. Выберите все приведенные состояния области: успешно выполнена, завершилась сбоем, пропущена и прекращена по таймауту

      Select scope statuses

    7. По завершении нажмите кнопку Готово. Теперь состояние отображается в качестве значка Информация.

  4. В ветвях Если истинно и Если ложно добавьте действия, которые нужно выполнить в зависимости от состояния области, например, отправку письма или сообщения.

    Add actions to take based on scope status

  5. Сохраните приложение логики

Созданное приложение логики выглядит, как в следующем примере:

Finished logic app with scope

Проверка результатов своих действий

На панели инструментов конструктора нажмите кнопку Запустить. Если все действия области успешны, вы получите сообщение Scope succeeded (Область успешна). Если какие-либо действия области не были успешны, вы получите сообщение Scope failed (Область завершилась со сбоем).

Определение JSON

При работе в представлении кода вместо этого можно определить структуру области в определении JSON приложения логики. Например, вот определение JSON для триггера и действий в предыдущем приложении логики:

"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": {}
  }
},

Поддержка

Следующие шаги