Вы можете выполнять действия рабочего процесса на основе состояния группы с помощью областей в 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 — получить маршрут) проверяет время перемещения между двумя расположениями.
- Условное действие, которое проверяет, превышает ли время перемещения указанное время.
- Действие, которое отправляет вам сообщение электронной почты о том, что текущее время перемещения превышает указанное время.
Приложение логики можно сохранить в любое время, так что часто сохраняйте свою работу.
Войдите на портал Azure, если вы еще этого не сделали. Создайте пустое приложение логики.
Добавьте триггер Расписание — повторение с такими параметрами: Интервал — 1, Частота — "Минута".
Совет
Чтобы визуально упростить представление и скрыть сведения о каждом действии в конструкторе, сворачивайте фигуры каждого действия по мере выполнения этих шагов.
Добавьте действие Bing Maps — Get route (Карты Bing — получить маршрут).
Если у вас еще нет подключения к Картам Bing, появится запрос на его установку.
Параметр значение Описание Имя подключения BingMapsConnection Укажите имя подключения. Ключ API <ваш ключ Карт Bing> Введите ключ Карт Bing, полученный ранее. Настройте действие Get route (Получить маршрут), как показано в таблице под этим изображением:
Дополнительные сведения об этих параметрах см. в статье 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 (Транзит).
Добавьте условие, чтобы проверить, превышает ли текущее время движения в соответствии с текущей загрузкой определенное время. Для данного примера выполните следующее.
Переименуйте условие, используя описание: Если время трафика превышает указанное время.
В левом столбце выберите в поле "Выбор значения ", чтобы появится список динамического содержимого. В данном списке выберите поле Travel Duration Traffic (Трафик длительности пути), которое задается в секундах.
В среднем поле сравнения выберите оператор больше чем
В правом столбце введите это значение сравнения, которое находится в секундах и эквивалентно 10 минутам: 600
После введения значения условие должно выглядеть приблизительно так, как показано в примере ниже:
В ветви True добавьте действие "отправить сообщение электронной почты" для поставщика электронной почты. Настройте это действие, выполнив шаги, приведенные после изображения.
В поле Кому введите адрес электронной почты в целях тестирования.
В поле Тема введите следующий текст:
Time to leave: Traffic more than 10 minutes
- В поле Текст введите этот текст с пробелом в конце:
Travel time:
Пока ваш курсор находится в поле Текст, список динамического содержимого остается открытым, поэтому вы можете выбрать любые параметры, доступные на этом этапе.
В списке динамического содержимого выберите Выражение.
Найдите функцию div( ) и выберите ее. Наведите курсор на содержимое, которое находится в скобках функции.
Пока курсор находится в скобках функции, выберите динамическое содержимое , чтобы появится динамический список содержимого.
В разделе Получить маршрут выберите поле Travel Duration Traffic (Трафик длительности пути).
После разрешения поля в формат JSON добавьте запятую (
,
), за которой следует число60
, чтобы преобразовать значение Travel Duration Traffic (Трафик длительности пути) из секунд в минуты.div(body('Get_route')?['travelDurationTraffic'],60)
Теперь выражение выглядит как в следующем примере:
По завершении нажмите кнопку OK.
После разрешения выражения добавьте текст с начальным пробелом:
minutes
.Теперь поле Текст выглядит, как в следующем примере:
Сохраните приложение логики
Затем добавьте область, чтобы группировать определенные действия и оценивать их состояние.
Добавление области
Если вы еще не сделали этого, откройте приложение логики в конструкторе рабочих процессов.
Добавьте область в нужное место в рабочем процессе. Например, чтобы добавить область между существующими шагами в рабочем процессе приложения логики, выполните следующие действия.
Переместите указатель на стрелку, где нужно добавить область. Выберите знак плюса (+) >Добавить действие.
В поле поиска введите слово "scope" в качестве фильтра. Выберите действие Область.
Добавление шагов в область
Теперь добавьте или перенесите имеющиеся шаги, которые необходимо выполнить внутри области. Например, перетащите эти действия в область:
- Get route (Получить маршрут);
- Если время трафика превышает указанное время, которое включает ветви Если истинно и Если ложно
Теперь приложение логики выглядит, как в следующем примере:
Добавьте в область условие, которое проверяет ее состояние. Переименуйте условие, используя описание: Если область завершилась со сбоем.
В условие необходимо добавить выражения, которые выполняют проверку состояния области, которое будет соответствовать значению "Сбой" или "Прервано".
Чтобы добавить другую строку, нажмите кнопку "Добавить".
В каждой строке выберите в левом поле, чтобы появится список динамического содержимого. В списке динамического содержимого выберите Выражение. В поле редактирования введите это выражение и нажмите кнопку ОК:
action('Scope')
Для обоих строк в качестве оператора выберите равно.
Чтобы сравнить значения, введите в первой строке
Failed
. Во второй строке введитеAborted
.После введения значения условие должно выглядеть приблизительно так, как показано в примере ниже:
Задайте свойство условия
runAfter
. Теперь условие должно проверяет состояние области и выполнять те действия, которые будут определены в последующих шагах.В случае сбоя области нажмите кнопку с многоточием (...) и нажмите кнопку "Настроить запуск после".
Выберите все приведенные состояния области: успешно выполнена, завершилась сбоем, пропущена и прекращена по таймауту
По завершении нажмите кнопку Готово. Теперь состояние отображается в качестве значка Информация.
В ветвях True и False добавьте действия, которые необходимо выполнить на основе каждого состояния области, например отправки сообщения электронной почты или сообщения.
Сохраните приложение логики
Созданное приложение логики выглядит, как в следующем примере:
Проверка результатов своих действий
На панели инструментов конструктора нажмите кнопку "Выполнить".> Если все действия области успешны, вы получите сообщение 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": {}
}
},
Следующие шаги
- Выполнение шагов на основе условия (условное действие)
- Выполнение шагов на основе различных значений (действие переключения)
- Loops: Process arrays or repeat actions until a condition is met (Циклы. Обработка массивов или повторение действий до выполнения условия)
- Create or join parallel branches in your logic app (Создание или присоединение параллельных ветвей в приложении логики)