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


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

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

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

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

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

На диаграмме показан поток области действия приложения логики с примерами

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

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

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

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

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

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

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

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

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

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

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

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

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

    Настройка триггера

    Совет

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

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

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

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

      Настройка действия Bing Maps - Get route (Карты Bing — получить маршрут)

      Дополнительные сведения об этих параметрах см. в статье 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 (Трафик длительности пути), которое задается в секундах.

      Добавление условия

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

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

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

      Условие завершения

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

    Добавление действия

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

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

    Time to leave: Traffic more than 10 minutes

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

    Travel time:

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

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

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

    3. Пока курсор находится в скобках функции, выберите динамическое содержимое , чтобы появится динамический список содержимого.

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

      Выбор поля Travel Duration Traffic (Трафик длительности пути)

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

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

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

      Итоговое выражение

    6. По завершении нажмите кнопку OK.

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

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

      Итоговое поле

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

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

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

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

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

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

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

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

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

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

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

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

    Область добавлена

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

    Добавление условия для проверки состояния области

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

    1. Чтобы добавить другую строку, нажмите кнопку "Добавить".

    2. В каждой строке выберите в левом поле, чтобы появится список динамического содержимого. В списке динамического содержимого выберите Выражение. В поле редактирования введите это выражение и нажмите кнопку ОК:

      action('Scope')

      Снимок экрана, на котором показано поле

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

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

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

      Добавление выражения, которое проверяет состояние области

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

    5. В случае сбоя области нажмите кнопку с многоточием (...) и нажмите кнопку "Настроить запуск после".

      Настройка свойства runAfter

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

      Выбор состояний области

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

  4. В ветвях True и False добавьте действия, которые необходимо выполнить на основе каждого состояния области, например отправки сообщения электронной почты или сообщения.

    Добавление действия, выполняемого на основе состояния области

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

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

Готовое приложение логики с областью

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

На панели инструментов конструктора нажмите кнопку "Выполнить".> Если все действия области успешны, вы получите сообщение 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: @{action('Scope')}",
            "Subject": "Scope failed",
            "To": "<your-email@domain.com>"
          },
          "host": {
            "connection": {
              "name": "@parameters('$connections')['outlook']['connectionId']"
            }
          },
          "method": "post",
          "path": "/Mail"
        },
        "runAfter": {}
      }
    },
    "else": {
      "actions": {
        "Scope_succeeded": {
          "type": "ApiConnection",
          "inputs": {
            "body": {
              "Body": "Scope succeeded. Scope status: @{action('Scope')}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@action('Scope')",
              "Failed"
            ]
         },
         {
            "equals": [
               "@action('Scope')",
               "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": {}
  }
},

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