Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот справочник описывает общие типы, используемые для идентификации триггеров и действий в базовом определении рабочего процесса приложения логики, которое описывается и проверяется с помощью языка определения рабочего процесса. Чтобы найти определенные триггеры и действия соединителя, которые можно использовать в приложениях логики, ознакомьтесь со списком в обзоре соединителей.
Обзор триггеров
Каждый рабочий процесс включает триггер, который определяет вызовы, создающие экземпляры и запускающие рабочий процесс. Ниже приведены общие категории триггеров.
Триггер опроса , который проверяет конечную точку службы через регулярные интервалы
Триггер push-уведомлений , который создает подписку на конечную точку и предоставляет URL-адрес обратного вызова , чтобы конечная точка может уведомлять триггер, когда происходит указанное событие или данные доступны. Затем триггер ожидает ответа конечной точки, прежде чем сработать.
Триггеры имеют следующие основные элементы, хотя некоторые из них являются необязательными.
"<trigger-name>": {
"type": "<trigger-type>",
"inputs": { "<trigger-inputs>" },
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"conditions": [ "<array-with-conditions>" ],
"runtimeConfiguration": { "<runtime-config-options>" },
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
},
Required
| Value | Type | Description |
|---|---|---|
| < имя триггера> | String | Имя триггера |
| < тип триггера> | String | Тип триггера, например Http или ApiConnection |
| < триггер-входные данные> | Объект JSON | Входные данные, определяющие режим работы триггера |
| < единица времени> | String | Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц" |
| < число единиц времени> | Integer | Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает. Ниже приведены минимальные и максимальные интервалы. — Месяц: 1–16 месяцев — День: 1–500 дней — Час: 1–12 000 часов — Минута: 1–72 000 минут — Секунда: 1–9 999 999 секунд Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев. |
Optional
| Value | Type | Description |
|---|---|---|
| < массив с условиями> | Array | Массив, содержащий одно или несколько условий , определяющих, следует ли запускать рабочий процесс. Доступно только для триггеров. |
| < параметры runtime-config-options> | Объект JSON | Можно изменить поведение триггера во время выполнения, задав свойства runtimeConfiguration. Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения. |
| < splitOn-expression> | String | Для триггеров, возвращающих массив, можно указать выражение для обработки, которое разделяет или выполняет по отдельности элементы массива на нескольких экземплярах рабочего процесса. |
| < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Список типов триггеров
Каждый тип триггера имеет свой интерфейс и свои входные данные, которые определяют его поведение.
Встроенные триггеры
| Тип триггера | Description |
|---|---|
| HTTP | Проверяет или опрашивает любую конечную точку. Конечная точка должна соответствовать определенному условию триггера, используя шаблон асинхронных операций 202 или возвращая массив. |
| HTTPWebhook | Создает вызываемую конечную точку для приложения логики, но также вызывает указанный URL-адрес для регистрации или отмены регистрации. |
| Recurrence | Активируется на основе определенного расписания. Можно задать дату и время в будущем для срабатывания триггера. На основе частоты можно также указать время и дни запуска рабочего процесса. |
| Request | Создает вызываемую конечную точку для приложения логики, также называется "ручным" триггером. Например, ознакомьтесь со статьей Вызовы, срабатывания триггеров и создание вложенных рабочих процессов в приложениях логики. |
Управляемые триггеры API
| Тип триггера | Description |
|---|---|
| ApiConnection | Проверяет или опрашивает конечную точку с помощью API, управляемых Корпорацией Майкрософт, или соединителей. |
| ApiConnectionWebhook | Создает вызываемую конечную точку для рабочего процесса приложения логики, вызывая управляемые Корпорацией Майкрософт API или соединители для подписки и отмены подписки. |
Триггеры. Подробная справочная информация
Триггер APIConnection
Этот триггер проверяет или опрашивает конечную точку с помощью API, управляемых Корпорацией Майкрософт, или соединителей, чтобы параметры этого триггера могли отличаться в зависимости от конечной точки. Многие разделы в этом определении триггера являются необязательными. Режим работы триггера зависит от того, включены ли разделы.
"<APIConnection_trigger_name>": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['<connection-name>']['connectionId']"
}
},
"method": "<method-type>",
"path": "/<api-operation>",
"retryPolicy": { "<retry-behavior>" },
"queries": { "<query-parameters>" }
},
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
| None | < APIConnection_trigger_name> | String | Имя триггера |
| host.connection.name | < имя подключения> | String | Имя подключения к управляемому API, который используется рабочим процессом |
| method | < Тип метода> | String | Метод HTTP для взаимодействия с управляемым API: GET, PUT, POST, PATCH, DELETE |
| path | < api-operation> | String | Операция API для вызова |
| recurrence.frequency | < единица времени> | String | Единица времени, описывающая частоту срабатывания триггера: вторая, минута, час, день, неделя, месяц |
| recurrence.interval | < число единиц времени> | Integer | Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает. Ниже приведены минимальные и максимальные интервалы. - Месяц: 1-16 месяцев - День: 1-500 дней - Час: 1–12 000 часов - Минута: 1-72 000 минут - Второй: 1-999 999 999 секунд Например, если интервал равен 6, а частота — Месяц, повторение составляет каждые 6 месяцев. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
| retryPolicy | < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| queries | < параметры запроса> | Объект JSON | Все параметры запроса для включения с помощью вызова API. Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
| runtimeConfiguration.concurrency.runs | < max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
| runtimeConfiguration.maximumWaitingRuns | < max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. Чтобы изменить максимальное количество экземпляров, укажите значение для свойства runtimeConfiguration.concurrency.runs . Примечание. Если задано значение |
| splitOn | < splitOn-expression> | String | Для триггеров, возвращающих массивы, это выражение ссылается на массив, который необходимо использовать, чтобы вы могли создать и запустить экземпляр рабочего процесса для каждого элемента массива, а не использовали цикл Foreach. Например, следующее выражение представляет элемент массива, возвращенный внутри тела триггера: @triggerbody()?['value'] |
| operationOptions | < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | Объект JSON | Заголовки из ответа |
| body | Объект JSON | Текст из ответа |
| код состояния | Integer | Код состояния из ответа |
Example
Следующее определение триггера каждый день проверяет электронную почту в папке "Входящие" для рабочей или учебной учетной записи:
"When_a_new_email_arrives": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "get",
"path": "/Mail/OnNewEmail",
"queries": {
"fetchOnlyWithAttachment": false,
"folderPath": "Inbox",
"importance": "Any",
"includeAttachments": false
}
},
"recurrence": {
"frequency": "Day",
"interval": 1
}
}
Триггер ApiConnectionWebhook
Этот триггер отправляет запрос подписки на конечную точку с помощью API, управляемого корпорацией Майкрософт, предоставляет URL-адрес обратного вызова , в котором конечная точка может отправлять ответ, и ожидает ответа конечной точки. Дополнительные сведения см. в разделе "Подписки конечных точек".
"<ApiConnectionWebhook_trigger_name>": {
"type": "ApiConnectionWebhook",
"inputs": {
"body": {
"NotificationUrl": "@{listCallbackUrl()}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['<connection-name>']['connectionId']"
}
},
"retryPolicy": { "<retry-behavior>" },
"queries": "<query-parameters>"
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-run-queue>
}
},
"splitOn": "<splitOn-expression>",
"operationOptions": "<operation-option>"
}
Required
| Value | Type | Description |
|---|---|---|
| < имя подключения> | String | Имя подключения к управляемому API, который используется рабочим процессом |
| < основное содержимое> | Объект JSON | Любое содержимое сообщения для отправки на управляемый API в качестве полезных данных |
Optional
| Value | Type | Description |
|---|---|---|
| < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| < параметры запроса> | Объект JSON | Все параметры запроса для включения в вызов API Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
| < max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
| < max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на runtimeConfiguration.concurrency.runs основе свойства, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
| < splitOn-expression> | String | Для триггеров, возвращающих массивы, это выражение ссылается на массив, который необходимо использовать, чтобы вы могли создать и запустить экземпляр рабочего процесса для каждого элемента массива, а не использовали цикл Foreach. Например, следующее выражение представляет элемент массива, возвращенный внутри тела триггера: @triggerbody()?['value'] |
| < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Example
Это определение триггера подписывается на API Office 365 Outlook, предоставляет URL-адрес обратного вызова на конечную точку API и ожидает ответа конечной точки при получении нового электронного письма.
"When_a_new_email_arrives_(webhook)": {
"type": "ApiConnectionWebhook",
"inputs": {
"body": {
"NotificationUrl": "@{listCallbackUrl()}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"path": "/MailSubscription/$subscriptions",
"queries": {
"folderPath": "Inbox",
"hasAttachment": "Any",
"importance": "Any"
}
},
"splitOn": "@triggerBody()?['value']"
}
Триггер HTTP
Этот триггер отправляет запрос в указанную конечную точку HTTP или HTTPS на основе указанного расписания повторения. Затем триггер проверяет ответ, чтобы определить, выполняется ли рабочий процесс. Дополнительные сведения см. в статье Вызов конечных точек по протоколу HTTP или HTTPS через Azure Logic Apps.
"HTTP": {
"type": "Http",
"inputs": {
"method": "<method-type>",
"uri": "<HTTP-or-HTTPS-endpoint-URL>",
"headers": { "<header-content>" },
"queries": "<query-parameters>",
"body": "<body-content>",
"authentication": { "<authentication-type-and-property-values>" },
"retryPolicy": {
"type": "<retry-behavior>"
}
},
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
method |
< Тип метода> | String | Выбор метода для отправки запроса: "GET", "PUT", "POST", "PATCH" или "DELETE" |
uri |
< HTTP-or-HTTPS-endpoint-URL> | String | URL-адрес конечной точки HTTP или HTTPS, по которому нужно отправить исходящий запрос. Максимальный размер строки: 2 КБ Для службы или ресурса Azure этот синтаксис URI включает идентификатор ресурса и путь к ресурсу, к которому требуется получить доступ. |
frequency |
< единица времени> | String | Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц" |
interval |
< число единиц времени> | Integer | Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает. Ниже приведены минимальные и максимальные интервалы. — Месяц: 1–16 месяцев — День: 1–500 дней — Час: 1–12 000 часов — Минута: 1–72 000 минут — Секунда: 1–9 999 999 секунд Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< заголовок-содержимое> | Объект JSON | Все заголовки, которые необходимо включить в запрос Например, чтобы задать язык и тип: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< параметры запроса> | Объект JSON | Все параметры запроса, которые необходимо использовать в запросе Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к запросу. |
body |
< основное содержимое> | Объект JSON | Содержимое сообщения для отправки в качестве полезных данных с запросом |
authentication |
< значения authentication-type-and-property-values> | Объект JSON | Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. Помимо планировщика поддерживается свойство authority. По умолчанию его значение равно https://management.azure.com/, но также можно использовать другое значение. |
retryPolicy > type |
< Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
runs |
< max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
maximumWaitingRuns |
< max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на runtimeConfiguration.concurrency.runs основе свойства, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
operationOptions |
< параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Outputs
| Element | Type | Description |
|---|---|---|
headers |
Объект JSON | Заголовки из ответа |
body |
Объект JSON | Текст из ответа |
status code |
Integer | Код состояния из ответа |
Требования для входящих запросов
Для качественной работы с приложением логики конечная точка должна соответствовать определенному шаблону или условию триггера, а также распознавать следующие свойства:
| Property | Required | Description |
|---|---|---|
| Код состояния | Yes | Код состояния "200 OK" инициирует запуск. Другие коды состояния — нет. |
| Заголовок Retry-after | No | Количество секунд перед повторным опросом конечной точки приложением логики |
| Заголовок расположения | No | URL-адрес для вызова во время следующего интервала опроса. Если не указан, используется исходный URL-адрес. |
Пример поведения для различных запросов
| Код состояния | Повторите попытку после | Behavior |
|---|---|---|
| 200 | {none} | Выполняется рабочий процесс, затем после определенного количества повторений снова проверяется, не добавились ли данные. |
| 200 | 10 секунд | Выполняется рабочий процесс, затем через 10 секунд снова проверяется, не добавились ли данные. |
| 202 | 60 секунд | Рабочий процесс не запускается. Следующая попытка происходит через одну минуту с учетом определенного повторения. Если определенное повторение составляет менее минуты, то приоритет имеет заголовок retry-after. В противном случае используется определенное повторение. |
| 400 | {none} | Недопустимый запрос, рабочий процесс не запускается. Если параметр retryPolicy не задан, то используется политика по умолчанию. После достижения количества попыток триггер снова проверяет наличие данных после определенного числа повторений. |
| 500 | {none} | Ошибка сервера, рабочий процесс не запускается. Если параметр retryPolicy не задан, то используется политика по умолчанию. После достижения количества попыток триггер снова проверяет наличие данных после определенного числа повторений. |
Триггер HTTPWebhook
Этот триггер делает приложение логики вызываемым, создавая конечную точку, которая может зарегистрировать подписку путем вызова URL-адреса указанной конечной точки. При создании этого триггера в рабочем процессе исходящий запрос выполняет вызов для регистрации подписки. Таким образом, триггер может запустить ожидание событий. Когда операция делает этот триггер недопустимым, исходящий запрос автоматически выполняет вызов для отмены подписки. Дополнительные сведения см. в разделе "Подписки конечных точек".
Кроме того, можно указать асинхронные ограничения для триггера HTTPWebhook . Поведение триггера зависит от разделов, которые используются или пропускаются.
"HTTP_Webhook": {
"type": "HttpWebhook",
"inputs": {
"subscribe": {
"method": "<method-type>",
"uri": "<endpoint-subscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"retryPolicy": { "<retry-behavior>" }
},
"unsubscribe": {
"method": "<method-type>",
"url": "<endpoint-unsubscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" }
}
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
Некоторые значения, такие как <тип> метода, доступны как для объектов, так и "subscribe" для "unsubscribe" объектов.
Required
| Value | Type | Description |
|---|---|---|
| < Тип метода> | String | Метод HTTP, используемый для запроса подписки: "GET", "PUT", "POST", "PATCH" или "DELETE" |
| < url-адрес конечной точки-подписки> | String | URL-адрес конечной точки для отправки запроса на подписку |
Optional
| Value | Type | Description |
|---|---|---|
| < Тип метода> | String | Метод HTTP, используемый для запроса отмены: GET, PUT, POST, PATCH или DELETE |
| < endpoint-unsubscribe-URL> | String | URL-адрес конечной точки для отправки запроса на отмену |
| < основное содержимое> | String | Любое содержимое сообщения для отправки в запросе на подписку или отмену |
| < тип проверки подлинности> | Объект JSON | Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. |
| < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| < max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
| < max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на runtimeConfiguration.concurrency.runs основе свойства, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
| < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | Объект JSON | Заголовки из ответа |
| body | Объект JSON | Текст из ответа |
| status code | Integer | Код состояния из ответа |
Example
Этот триггер создает подписку на указанную конечную точку, предоставляет уникальный URL-адрес обратного вызова и ожидает новых публикаций технологических статей.
"HTTP_Webhook": {
"type": "HttpWebhook",
"inputs": {
"subscribe": {
"method": "POST",
"uri": "https://pubsubhubbub.appspot.com/subscribe",
"body": {
"hub.callback": "@{listCallbackUrl()}",
"hub.mode": "subscribe",
"hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
},
},
"unsubscribe": {
"method": "POST",
"url": "https://pubsubhubbub.appspot.com/subscribe",
"body": {
"hub.callback": "@{workflow().endpoint}@{listCallbackUrl()}",
"hub.mode": "unsubscribe",
"hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
}
}
}
}
Триггер повторения
Этот триггер выполняется на основе указанного расписания повторов и предоставляет простой способ создания регулярно запускающегося рабочего процесса.
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
"startTime": "<start-date-time-with-format-YYYY-MM-DDThh:mm:ss>",
"timeZone": "<time-zone>",
"schedule": {
// Applies only when frequency is Day or Week. Separate values with commas.
"hours": [ <one-or-more-hour-marks> ],
// Applies only when frequency is Day or Week. Separate values with commas.
"minutes": [ <one-or-more-minute-marks> ],
// Applies only when frequency is Week. Separate values with commas.
"weekDays": [ "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday" ]
}
},
"runtimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-runs-queue>
}
},
"operationOptions": "<operation-option>"
}
Required
| Value | Type | Description |
|---|---|---|
| < единица времени> | String | Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц" |
| < число единиц времени> | Integer | Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает. Ниже приведены минимальные и максимальные интервалы. — Месяц: 1–16 месяцев — День: 1–500 дней — Час: 1–12 000 часов — Минута: 1–72 000 минут — Секунда: 1–9 999 999 секунд Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев. |
Optional
| Value | Type | Description |
|---|---|---|
| < start-date-time-with-format-YYYY-MM-DDThh:mm:ss> | String | Дата начала и время в этом формате: ГГГГ-ММ-DDThh:mm:ss, если указать часовой пояс -or- ГГГГ-ММ-DDThh:mm:ssZ, если не указать часовой пояс Например, если требуется указать 18 сентября 2017 г. в 14:00, то используйте 2017-09-18T14:00:00 и укажите часовой пояс, такой как "Стандартное тихоокеанское время", или укажите "2017-09-18T14:00:00Z" без часового пояса. Важно: время начала не может превышать 49 лет в будущем и должно соответствовать спецификациям даты и времени ISO 8601, быть в формате даты и времени UTC, но без Смещения UTC. Если не указать часовой пояс, то необходимо в конце добавить букву Z без пробелов. Эта буква Z ссылается на соответствующее судовое время. В простых расписаниях время начала определяет первый случай выполнения задания, а в сложных расписаниях триггер срабатывает не раньше, чем наступит время начала. Дополнительные сведения о дате и времени начала см. в статье Начало работы с триггером повторения. |
| < часовой пояс> | String | Применяется только при указании времени начала, так как этот триггер не принимает смещение от UTC. Укажите часовой пояс, который необходимо применить. |
| < Одно-или несколько часов меток> | Целое число или массив целых чисел | Если для параметра frequency задать значение Day или Week, то можно указать одно или несколько целых чисел от 0 до 23, разделенных запятыми. В эти часы будет запускаться рабочий процесс. Например, если указать 10, 12 и 14, вы получите часовые метки 10:00, 12:00 и 14:00. |
| < одно-или несколько минутных меток> | Целое число или массив целых чисел | Если для параметра frequency задать значение Day или Week, то можно указать одно или несколько целых чисел от 0 до 59, разделенных запятыми. В эти минуты часа будет запускаться рабочий процесс. Например, если указать 30 минут и использовать предыдущий пример для часов, то вы получите 10:30, 12:30 и 14:30. |
| weekDays | Строка или массив строк | Если для параметра frequency задать значение Week, то можно указать один или несколько дней, разделенных запятыми. В эти дни будет запускаться рабочий процесс: Monday (Понедельник), Tuesday (Вторник), Wednesday (Среда), Thursday (Четверг), Friday (Пятница), Saturday (Суббота) и Sunday (Воскресенье). |
| < max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
| < max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на runtimeConfiguration.concurrency.runs основе свойства, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
| < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Пример 1
Этот основной триггер повторения запускается ежедневно:
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Day",
"interval": 1
}
}
Пример 2
Вы можете задать дату и время, когда триггер будет срабатывать. Этот триггер повторения будет запущен в соответствии с указанной датой, а затем будет срабатывать ежедневно:
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Day",
"interval": 1,
"startTime": "2017-09-18T00:00:00Z"
}
}
пример 3
Этот триггер повторения был запущен 9 сентября 2017 года в 14:00 и запускался каждый понедельник в 10:30, 12:30 и 14:30 по тихоокеанскому времени:
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Week",
"interval": 1,
"schedule": {
"hours": [ 10, 12, 14 ],
"minutes": [ 30 ],
"weekDays": [ "Monday" ]
},
"startTime": "2017-09-07T14:00:00",
"timeZone": "Pacific Standard Time"
}
}
Дополнительные сведения, а также примеры это триггера см. в статье Создание и планирование регулярно выполняющихся задач при помощи Azure Logic Apps.
Триггер запроса
Этот триггер делает приложение логики вызываемым, создавая конечную точку, которая может принимать входящие запросы. Предоставьте схему JSON для этого триггера, которая описывает и проверяет полезные или входные данные, которые триггер получает от входящего запроса. Схема также упрощает свойства триггеров для ссылки на следующие действия в рабочем процессе.
Note
Исходное имя триггера запроса было вручную, которое может по-прежнему отображаться в некоторых местах. Это имя изменилось, чтобы создать более согласованность вокруг типа шаблона рабочего процесса, который используется для сборки триггера.
Чтобы вызвать этот триггер, необходимо использовать API listCallbackUrl, описанный в REST API службы рабочих процессов. Чтобы узнать, как использовать этот триггер в качестве конечной точки HTTP, см. сведения в статье Вызовы, срабатывания триггеров и создание вложенных рабочих процессов в приложениях логики.
"Request": {
"type": "Request",
"kind": "Http",
"inputs": {
"method": "<method-type>",
"relativePath": "<relative-path-for-accepted-parameter>",
"schema": {
"type": "object",
"properties": {
"<property-name>": {
"type": "<property-type>"
}
},
"required": [ "<required-properties>" ]
}
},
"runTimeConfiguration": {
"concurrency": {
"runs": <max-runs>,
"maximumWaitingRuns": <max-run-queue>
},
},
"operationOptions": "<operation-option>"
}
Required
| Value | Type | Description |
|---|---|---|
| < property-name> | String | Имя свойства в схеме JSON, которое описывает полезные данные |
| < property-type> | String | Тип свойства |
Optional
| Value | Type | Description |
|---|---|---|
| < Тип метода> | String | Метод, который входящие запросы должны использовать для вызова приложения логики: GET, PUT, POST, PATCH или DELETE |
| < относительный путь для принятого параметра> | String | Относительный путь для параметра, который принимает URL-адрес конечной точки |
| < обязательные свойства> | Array | Одно или несколько свойств, требующих значений |
| < max-runs> | Integer | По умолчанию экземпляры рабочих процессов выполняются одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма триггера". |
| < max-runs-queue> | Integer | Если рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на runtimeConfiguration.concurrency.runs основе свойства, все новые запуски помещаются в эту очередь до предела по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
| < параметр operation-option> | String | Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Example
Этот триггер указывает, что входящий запрос должен использовать HTTP-метод POST для вызова триггера, а также включать схему, проверяющую входные данные входящего запроса.
"Request": {
"type": "Request",
"kind": "Http",
"inputs": {
"method": "POST",
"schema": {
"type": "object",
"properties": {
"customerName": {
"type": "String"
},
"customerAddress": {
"type": "Object",
"properties": {
"streetAddress": {
"type": "string"
},
"city": {
"type": "string"
}
}
}
}
}
}
}
Условия триггера
Для любого триггера (или только для триггера) можно включить массив, содержащий одно или несколько выражений для условий, определяющих, следует ли запускать рабочий процесс. Чтобы добавить к приложению логики свойство conditions, откройте приложение в редакторе представления кода.
Например, можно указать, что триггер срабатывает, только если веб-сайт возвращает внутреннюю ошибку сервера, ссылаясь на код состояния триггера в свойстве conditions.
"Recurrence": {
"type": "Recurrence",
"recurrence": {
"frequency": "Hour",
"interval": 1
},
"conditions": [ {
"expression": "@equals(triggers().code, 'InternalServerError')"
} ]
}
По умолчанию триггер срабатывает только после получения ответа "200 OK". Если выражение ссылается на код состояния триггера, стандартный режим работы триггера изменяется. Таким образом, если требуется запуск триггера при более чем одном коде состояния, например "200" и "201", необходимо включить в качестве условия следующее выражение.
@or(equals(triggers().code, 200),equals(triggers().code, 201))
Активация нескольких рабочих процессов выполняется в массиве
В сценариях, когда рабочий процесс использует триггер, который получает массивы для обработки, иногда использование цикла для каждого цикла может занять слишком много времени. Чтобы ускорить обработку, одним из вариантов является создание параллельных ветвей. Или, если триггер поддерживает обсуждение, можно разделить элементы массива триггера и запустить отдельный экземпляр рабочего процесса для каждого элемента массива. Этот параметр полезен, например, если требуется опрашивать конечную точку, которая может возвращать несколько новых элементов между интервалами опроса.
Триггеры, которые могут принимать массивы и возвращать массивы, поддерживают эту возможность, например запрос, HTTP, служебная шина Azure или Office Outlook 365. Для этих триггеров в конструкторе рабочих процессов можно включить параметр Split on , который добавляет splitOn свойство в определение триггера.
Note
Если файл Swagger триггера описывает полезные данные массива, splitOn свойство автоматически добавляется в определение триггера. Если нет, и триггер может принимать массивы, можно добавить свойство в полезные данные ответа, содержащие массив, который требуется расшифровать.
Прежде чем использовать возможность дискуссий, ознакомьтесь со следующими рекомендациями.
Если параллелизм триггера также включен, ограничение на разделение значительно уменьшается. Если число элементов превышает это ограничение, функция Split on недоступна.
Разделение возможностей не работает с шаблоном синхронного ответа. Если рабочий процесс использует действие ответа и включает параметр Split on выполняется асинхронно и немедленно отправляет
202 ACCEPTEDответ.Ограничение существует по количеству элементов массива, которые split on могут обрабатываться в одном запуске рабочего процесса. Дополнительные сведения см. в разделе "Циклирование" и ограничения пакетной обработки.
Если вы настраиваете обсуждение с помощью определения триггера
splitOnс помощью свойства, вы не можете напрямую ссылаться на свойства или получать доступ к свойствам, которые существуют за пределами массива. Чтобы избежать сбоев, передайте ссылку оператору?. Примеры см. в разделе "Включение дебатов" в определении триггера.
Включение дебатов с помощью конструктора
Выполните следующие действия в конструкторе рабочих процессов, чтобы настроить обсуждение триггера, где поддерживается:
На портале Azure откройте ресурс приложения логики.
Откройте рабочий процесс в конструкторе.
В конструкторе выберите триггер, поддерживающий обсуждение, чтобы открыть панель сведений о триггере.
На вкладке "Параметры " в разделе "Общие" найдите параметр Split on и измените значение " Вкл .", если он не включен.
Включение дебатов в определении триггера
Некоторые триггеры обрабатывают массивы, но параметр Split on недоступен через конструктор. Для таких триггеров выполните следующие действия, чтобы добавить splitOn свойство в определение триггера:
Например, предположим, что рабочий процесс использует триггер HTTP для вызова API и получает следующий ответ:
{
"Status": "Succeeded",
"Rows": [
{
"id": 938109380,
"name": "customer-name-one"
},
{
"id": 938109381,
"name": "customer-name-two"
}
]
}
Если рабочий процесс нуждается только в содержимом Rows из массива, можно добавить и настроить splitOn свойство в определении триггера, как показано в следующем примере:
"HTTP_trigger_debatch": {
"type": "Http",
"inputs": {
"uri": "https://mydomain.com/myAPI",
"method": "GET"
},
"recurrence": {
"frequency": "Second",
"interval": 1
},
"splitOn": "@triggerBody()?.Rows"
}
Note
Помните, что если вы используете splitOn свойство, вы не сможете напрямую обращаться к свойствам или ссылаться на свойства, которые существуют за пределами массива. Чтобы избежать сбоев, используйте ? оператор, как показано в примерах.
Определение рабочего процесса также может использовать splitOn и @triggerBody().name получать значения из name свойства. Эти значения относятся "customer-name-one" к первому запуску рабочего процесса и "customer-name-two" из второго запуска рабочего процесса. В этом примере выходные данные триггера выглядят следующим образом:
{
"body": {
"id": 938109380,
"name": "customer-name-one"
}
}
{
"body": {
"id": 938109381,
"name": "customer-name-two"
}
}
Общие сведения о действиях
Azure Logic Apps предоставляет различные типы действий. Каждый из них имеет различные входные данные, которые определяют уникальный режим работы действия. Действия включают следующие основные элементы, хотя некоторые из них являются необязательными.
"<action-name>": {
"type": "<action-type>",
"inputs": {
"<input-name>": { "<input-value>" },
"retryPolicy": "<retry-behavior>"
},
"runAfter": { "<previous-trigger-or-action-status>" },
"runtimeConfiguration": { "<runtime-config-options>" },
"operationOptions": "<operation-option>"
},
Required
| Value | Type | Description |
|---|---|---|
| < имя действия> | String | Имя действия |
| < тип действия> | String | Тип действия, например Http или ApiConnection |
| < входное имя> | String | Имя для входа, определяющее поведение действия |
| < входное значение> | Various | Входное значение, которое может быть строкой, целым числом, объектом JSON и т. д. |
| < предыдущее состояние триггера или действия> | Объект JSON | Имя и итоговое состояние для триггера или действия, которое должно выполняться немедленно перед запуском текущего действия |
Optional
| Value | Type | Description |
|---|---|---|
| < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе "Политики повтора". |
| < параметры runtime-config-options> | Объект JSON | Режим работы некоторых действий во время выполнения можно изменить, задав свойство runtimeConfiguration. Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения. |
| < параметр operation-option> | String | Режим работы по умолчанию некоторых действий можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе "Параметры операции". |
Список типов действий
Некоторые часто используемые типы действий.
Встроенные типы действий, такие как нижеприведенные примеры и многое другое.
HTTP для вызова конечных точек по протоколу HTTP или HTTPS
Запуск кода JavaScript для выполнения фрагментов кода JavaScript
Функция для вызова функций Azure
Действия операций с данными, такие как Join, Compose, Table, Select и другие, которые создают или преобразуют данные из различных входных данных
Рабочий процесс для вызова другого рабочего процесса приложения логики
Типы действий управляемых API, такие как ApiConnection и ApiConnectionWebHook, которые вызывают различные соединители и управляемые Майкрософт интерфейсы API, например Служебная шина Azure, Office 365 Outlook, Power BI, хранилище BLOB-объектов Azure, OneDrive, GitHub и т. д.
Типы действий рабочего процесса управления, такие как If, Foreach, Switch, Scope и Until, которые содержат другие действия и помогают организовать выполнение рабочего процесса
Встроенные действия
| Тип действия | Description |
|---|---|
| Compose | Создает один выход из входных данных, который может иметь различные типы. |
| Выполнение кода JavaScript | Выполнение фрагментов кода JavaScript, соответствующих заданным условиям. Требования к коду и дополнительные сведения см. в разделе Добавление и выполнение фрагментов кода со встроенным кодом. |
| Function | Вызывает функцию Azure. |
| HTTP | Вызывает конечную точку HTTP. |
| Join | Создает строку из всех элементов в массиве и разделяет эти элементы определенным символом разделителя. |
| Анализ JSON | Создает понятные токены из свойств в содержимом JSON. Затем можно ссылаться на эти свойства, включая токены в приложение логики. |
| Query | Создает массив из элементов другого массива на основании условия или фильтра. |
| Response | Создает ответ на входящий вызов или запрос. |
| Select | Создает массив объектов JSON, преобразуя элементы другого массива на основе указанной карты. |
| Table | Создает таблицу CSV или HTML из массива. |
| Terminate | Останавливает активное выполнение рабочего процесса. |
| Wait | Приостанавливает рабочий процесс на заданный срок или до указанной даты и времени. |
| Workflow | Создает вложенный рабочий процесс внутри другого рабочего процесса. |
Действия управляемых API
| Тип действия | Description |
|---|---|
| ApiConnection | Вызывает конечную точку HTTP с помощью API, управляемого корпорацией Майкрософт. |
| ApiConnectionWebhook | Работает как http-веб-перехватчик, но использует управляемый корпорацией Майкрософт API. |
Действия рабочего процесса управления
Эти действия позволяют управлять выполнением рабочего процесса и включают в себя другие действия. За пределами действия рабочего процесса управления можно непосредственно ссылаться на действия внутри него. Например, если имеется действие Http внутри области, можно ссылаться на выражение @body('Http') из любой точки в рабочем процессе. В то же время действия, которые существуют внутри действия рабочего процесса управления, могут "привязываться" только к другим действиям, которые находятся в той же структуре рабочего процесса управления.
| Тип действия | Description |
|---|---|
| ForEach | Выполняет те же действия в цикле для каждого элемента массива. |
| If | Выполняет действия в зависимости от того, имеет ли заданное условие значение true или false. |
| Scope | Выполняет действия из набора действий на основе состояния группы. |
| Switch | Выполняет действия, организованные в случаях, когда значения из выражений, объектов или токенов соответствуют значениям, указанным для каждого случая. |
| Until | Выполняет действия в цикле до тех пор, пока указанное условие не будет иметь значение true. |
Действия. Подробная справочная информация
Действие APIConnection
Это действие отправляет HTTP-запрос в управляемый корпорацией Майкрософт API и требует сведений об API и параметрах, а также ссылку на допустимое соединение.
"<action-name>": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['<api-name>']['connectionId']"
},
"<other-action-specific-input-properties>"
},
"method": "<method-type>",
"path": "/<api-operation>",
"retryPolicy": "<retry-behavior>",
"queries": { "<query-parameters>" },
"<other-action-specific-properties>"
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < имя действия> | String | Имя действия, предоставляемого соединителем |
| < api-name> | String | Имя управляемого Майкрософт интерфейса API, используемого для подключения |
| < Тип метода> | String | Метод HTTP для вызова API: GET, PUT, POST, PATCH или DELETE |
| < api-operation> | String | Операция API для вызова |
Optional
| Value | Type | Description |
|---|---|---|
| < другие свойства, относящиеся к действиям,input-properties> | Объект JSON | Все входные свойства, которые применяются к указанному действию |
| < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| < параметры запроса> | Объект JSON | Все параметры запроса для включения с помощью вызова API. Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
| < другие свойства, относящиеся к действиям> | Объект JSON | Все другие свойства, которые применяются к указанному действию |
Example
Это определение описывает действие Отправить по электронной почте для соединителя Outlook Office 365, который является управляемым Майкрософт интерфейсом API.
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "Thank you for your membership!",
"Subject": "Hello and welcome!",
"To": "[email protected]"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "POST",
"path": "/Mail"
},
"runAfter": {}
}
Действие APIConnectionWebhook
Это действие отправляет запрос подписки по протоколу HTTP в конечную точку с помощью API, управляемого корпорацией Майкрософт, предоставляет URL-адрес обратного вызова , в котором конечная точка может отправить ответ и ожидает ответа конечной точки. Дополнительные сведения см. в разделе "Подписки конечных точек".
"<action-name>": {
"type": "ApiConnectionWebhook",
"inputs": {
"subscribe": {
"method": "<method-type>",
"uri": "<api-subscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"retryPolicy": "<retry-behavior>",
"queries": { "<query-parameters>" },
"<other-action-specific-input-properties>"
},
"unsubscribe": {
"method": "<method-type>",
"uri": "<api-unsubscribe-URL>",
"headers": { "<header-content>" },
"body": "<body-content>",
"authentication": { "<authentication-type>" },
"<other-action-specific-properties>"
},
},
"runAfter": {}
}
Некоторые значения, такие как <тип> метода, доступны как для объектов, так и "subscribe" для "unsubscribe" объектов.
Required
| Value | Type | Description |
|---|---|---|
| < имя действия> | String | Имя действия, предоставляемого соединителем |
| < Тип метода> | String | Метод HTTP для подписки или отмены подписки на конечную точку: GET, PUT, POST, PATCH или DELETE |
| < API-subscribe-URL> | String | Универсальный код ресурса (URI), используемый для подписки на API |
Optional
| Value | Type | Description |
|---|---|---|
| < API-unsubscribe-URL> | String | Универсальный код ресурса (URI), используемый для отмены подписки на API |
| < заголовок-содержимое> | Объект JSON | Все заголовки для отправки в запросе Например, чтобы задать язык и тип запроса: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < основное содержимое> | Объект JSON | Любое содержимое сообщения для отправки в запросе |
| < тип проверки подлинности> | Объект JSON | Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. |
| < Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| < параметры запроса> | Объект JSON | Все параметры запроса для включения в вызов API Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
| < другие свойства, относящиеся к действиям,input-properties> | Объект JSON | Все входные свойства, которые применяются к указанному действию |
| < другие свойства, относящиеся к действиям> | Объект JSON | Все другие свойства, которые применяются к указанному действию |
Можно также указать ограничения для действия ApiConnectionWebhook таким же образом, как и асинхронные ограничения HTTP.
Действие Создания
Это действие создает один вывод из нескольких входных данных, включая выражения. Оба входа и выхода могут иметь любой тип, поддерживаемый Azure Logic Apps, например массивы, объекты JSON, язык XML и двоичные объекты. Затем можно использовать выходные данные действия в других действиях.
"Compose": {
"type": "Compose",
"inputs": "<inputs-to-compose>",
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < inputs-to-compose> | Any | Входные данные для создания единых выходных данных |
Пример 1
Это определение действия объединяет abcdefg с конечным пространством и значением 1234.
"Compose": {
"type": "Compose",
"inputs": "abcdefg 1234",
"runAfter": {}
},
Результат, который создает это действие:
abcdefg 1234
Пример 2
Это определение действия объединяет строковую переменную, содержащую abcdefg и целочисленную переменную, которая содержит 1234.
"Compose": {
"type": "Compose",
"inputs": "@{variables('myString')}@{variables('myInteger')}",
"runAfter": {}
},
Результат, который создает это действие:
"abcdefg1234"
Execute JavaScript Code action (Выполнить действие кода JavaScript)
Это действие выполняет фрагмент кода JavaScript и возвращает результаты через маркер, на который могут ссылаться дальнейшие действия.
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "<JavaScript-code-snippet>",
"explicitDependencies": {
"actions": [ <preceding-actions> ],
"includeTrigger": true
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < Фрагмент кода JavaScript> | Varies | Код JavaScript, который требуется выполнить. Требования к коду и дополнительные сведения см. в разделе Выполнение фрагментов кода в рабочих процессах. В атрибуте code фрагмент кода может использовать в качестве входных данных объект workflowContext, который предназначен только для чтения. Этот объект включает вложенные свойства, дающие коду доступ к результатам из триггера и предыдущих действий в данном рабочем процессе. Дополнительные сведения об объекте workflowContext см. в разделе Эталонный триггер и результаты действия в объекте workflowContext. |
Необходимо в некоторых случаях
Атрибут explicitDependencies указывает, что необходимо явно включить результаты из триггера, предыдущих действий, или всего вышеперечисленного, в качестве зависимостей для фрагмента кода. Дополнительные сведения о добавлении этих зависимостей см. в разделе Добавление зависимостей в качестве параметров в действие встроенного кода.
Для атрибута includeTrigger можно указать значения true или false.
| Value | Type | Description |
|---|---|---|
| < предыдущие действия> | Массив строк | Массив с именами действий в формате JSON в виде зависимостей. Обязательно используйте имена действий, которые отображаются в определении рабочего процесса, где имена действий используют символы подчеркивания (_), а не пробелы (" " ). |
Пример 1
Это действие запускает код, который получает имя рабочего процесса приложения логики и возвращает в результате текст "Hello world from <имя-приложения-логики>". В этом примере код ссылается на имя рабочего процесса, обращаясь к свойству workflowContext.workflow.name через объект workflowContext, который доступен только для чтения. Дополнительные сведения об объекте workflowContext см. в разделе Эталонный триггер и результаты действия в коде.
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "var text = \"Hello world from \" + workflowContext.workflow.name;\r\n\r\nreturn text;"
},
"runAfter": {}
}
Пример 2
Это действие запускает код в рабочем процессе приложении логики, которое активируется при поступлении нового электронного письма в учетную запись Outlook. Рабочий процесс также использует действие отправки утверждения по электронной почте Office 365 Outlook, которое пересылает содержимое из полученного электронного письма вместе с запросом на утверждение.
Код извлекает адреса электронной почты из свойства электронного сообщения Body и возвращает адреса вместе со значением свойства SelectedOption из действия утверждения. Действие явным образом включает действие отправки утверждения по электронной почте в качестве actions объекта внутри explicitDependencies объекта.
"Execute_JavaScript_Code": {
"type": "JavaScriptCode",
"inputs": {
"code": "var myResult = /(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\r\n\r\nvar email = workflowContext.trigger.outputs.body.Body;\r\n\r\nvar reply = workflowContext.actions.Send_approval_email.outputs.body.SelectedOption;\r\n\r\nreturn email.match(myResult) + \" - \" + reply;\r\n;",
"explicitDependencies": {
"actions": [
"Send_approval_email"
]
}
},
"runAfter": {}
}
Действие функции
Это действие вызывает ранее созданную функцию Azure.
"<Azure-function-name>": {
"type": "Function",
"inputs": {
"function": {
"id": "<Azure-function-ID>"
},
"method": "<method-type>",
"headers": { "<header-content>" },
"body": { "<body-content>" },
"queries": { "<query-parameters>" }
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < Идентификатор функции Azure> | String | Идентификатор ресурса для функции Azure, которую требуется вызвать. Формат для этого значения: "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Web/sites/<Azure-function-app-name/functions/>/<Azure-function-name>" |
| < Тип метода> | String | Метод HTTP, используемый для вызова функции: GET, PUT, POST, PATCH или DELETE. Если метод не указан, то по умолчанию используется метод POST. |
Optional
| Value | Type | Description |
|---|---|---|
| < заголовок-содержимое> | Объект JSON | Все заголовки для отправки с помощью вызова Например, чтобы задать язык и тип запроса: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
| < основное содержимое> | Объект JSON | Любое содержимое сообщения для отправки в запросе |
| < параметры запроса> | Объект JSON | Все параметры запроса для включения в вызов API Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
| < другие свойства, относящиеся к действиям,input-properties> | Объект JSON | Все входные свойства, которые применяются к указанному действию |
| < другие свойства, относящиеся к действиям> | Объект JSON | Все другие свойства, которые применяются к указанному действию |
При сохранении приложения логики Azure Logic Apps выполняет следующие проверки для указанной функции:
У рабочего процесса должен быть доступ к функции.
Рабочий процесс может использовать только стандартный триггер HTTP или универсальный триггер веб-перехватчика в формате JSON.
Azure Logic Apps получает и кэширует URL-адрес триггера, который используется во время выполнения. Однако если любая операция недействителен кэшированный URL-адрес, действие функции завершается ошибкой во время выполнения. Чтобы устранить эту проблему, повторно сохраните приложение логики, чтобы оно снова загрузило URL-адрес триггера.
Функция не может иметь какой-либо определенный маршрут.
Можно использовать только авторизацию с помощью функции и анонимную авторизацию.
Example
Это определение действия вызывает ранее созданную функцию GetProductID.
"GetProductID": {
"type": "Function",
"inputs": {
"function": {
"id": "/subscriptions/<XXXXXXXXXXXXXXXXXXXX>/resourceGroups/myLogicAppResourceGroup/providers/Microsoft.Web/sites/InventoryChecker/functions/GetProductID"
},
"method": "POST",
"headers": {
"x-ms-date": "@utcnow()"
},
"body": {
"Product_ID": "@variables('ProductID')"
}
},
"runAfter": {}
}
Действие HTTP
Это действие отсылает запрос на указанную конечную точку HTTP или HTTPS и по результату проверки определяет, следует ли запускать рабочий процесс. Дополнительные сведения см. в статье Вызов конечных точек по протоколу HTTP или HTTPS через Azure Logic Apps.
"HTTP": {
"type": "Http",
"inputs": {
"method": "<method-type>",
"uri": "<HTTP-or-HTTPS-endpoint-URL>",
"headers": { "<header-content>" },
"queries": { "<query-parameters>" },
"body": "<body-content>",
"authentication": { "<authentication-type-and-property-values>" },
"retryPolicy": {
"type": "<retry-behavior>"
},
},
"runAfter": {}
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
method |
< Тип метода> | String | Выбор метода для отправки запроса: "GET", "PUT", "POST", "PATCH" или "DELETE" |
uri |
< HTTP-or-HTTPS-endpoint-URL> | String | URL-адрес конечной точки HTTP или HTTPS, по которому нужно отправить исходящий запрос. Максимальный размер строки: 2 КБ Для службы или ресурса Azure этот синтаксис URI включает идентификатор ресурса и путь к ресурсу, к которому требуется получить доступ. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< заголовок-содержимое> | Объект JSON | Все заголовки, которые необходимо включить в запрос Например, чтобы задать язык и тип: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< параметры запроса> | Объект JSON | Все параметры запроса, которые необходимо использовать в запросе Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову. |
body |
< основное содержимое> | Объект JSON | Содержимое сообщения для отправки в качестве полезных данных с запросом |
authentication |
< значения authentication-type-and-property-values> | Объект JSON | Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. Помимо планировщика поддерживается свойство authority. По умолчанию его значение равно https://management.azure.com/, но также можно использовать другое значение. |
retryPolicy > type |
< Поведение повторных попыток> | Объект JSON | Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора. |
| < другие свойства, относящиеся к действиям,input-properties> | < input-property> | Объект JSON | Все входные свойства, которые применяются к указанному действию |
| < другие свойства, относящиеся к действиям> | < property-value> | Объект JSON | Все другие свойства, которые применяются к указанному действию |
Example
Это определение действия получает последние новости, отправив запрос на указанную конечную точку.
"HTTP": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "https://mynews.example.com/latest"
}
}
Действие присоединения
Это действие создает строку из всех элементов в массиве и разделяет эти элементы определенным символом разделителя.
"Join": {
"type": "Join",
"inputs": {
"from": <array>,
"joinWith": "<delimiter>"
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < массив> | Array | Массив или выражение, которое предоставляет исходные элементы. Если задано выражение, заключите его в двойные кавычки. |
| < разделитель> | Единая строка символов | Символ, разделяющий каждый элемент в строке |
Example
Предположим, что у вас есть ранее созданная переменная myIntegerArray, содержащая этот массив целых чисел.
[1,2,3,4]
Это определение действия получает значения из переменной с помощью функции variables() в выражении и создает эту строку с теми значениями, которые разделяются запятыми: "1,2,3,4".
"Join": {
"type": "Join",
"inputs": {
"from": "@variables('myIntegerArray')",
"joinWith": ","
},
"runAfter": {}
}
Действие "Анализ JSON"
Это действие создает понятные для пользователя поля или маркеры из свойств в содержимом JSON. Затем можно получить доступ к этим свойствам в своем приложении логики, используя вместо этого токены. Например, если необходимо использовать выходные данные JSON таких служб как Служебная шина Azure и Azure Cosmos DB, можно включить это действие в своем приложении логики, чтобы иметь возможность легче ссылаться на выходные данные.
"Parse_JSON": {
"type": "ParseJson",
"inputs": {
"content": "<JSON-source>",
"schema": { "<JSON-schema>" }
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < JSON-source> | Объект JSON | Содержимое JSON, которое необходимо анализировать |
| < Схема JSON> | Объект JSON | Схема JSON, описывающая основное содержимое JSON, которое использует действие для анализа исходного содержимого JSON. Совет. В конструкторе рабочих процессов можно указать схему или предоставить пример полезных данных, чтобы действие произвести схему. |
Example
Это определение действия создает эти маркеры, которые можно использовать в рабочем процессе, но только в действиях, которые выполняются после действия анализа JSON :
FirstName, LastName и Email
"Parse_JSON": {
"type": "ParseJson",
"inputs": {
"content": {
"Member": {
"Email": "[email protected]",
"FirstName": "Sophie",
"LastName": "Owen"
}
},
"schema": {
"type": "object",
"properties": {
"Member": {
"type": "object",
"properties": {
"Email": {
"type": "string"
},
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
}
}
}
}
}
},
"runAfter": { }
},
В этом примере свойство content указывает содержимое JSON для анализа. Также можно предоставить это содержимое JSON как пример полезных данных для создания схемы.
"content": {
"Member": {
"FirstName": "Sophie",
"LastName": "Owen",
"Email": "[email protected]"
}
},
Свойство schema указывает схему JSON, используемую для описания содержимого JSON.
"schema": {
"type": "object",
"properties": {
"Member": {
"type": "object",
"properties": {
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
},
"Email": {
"type": "string"
}
}
}
}
}
Действие запроса
Это действие создает массив из элементов другого массива на основании указанного условия или фильтра.
"Filter_array": {
"type": "Query",
"inputs": {
"from": <array>,
"where": "<condition-or-filter>"
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < массив> | Array | Массив или выражение, которое предоставляет исходные элементы. Если задано выражение, заключите его в двойные кавычки. |
| < условие или фильтр> | String | Условие, используемое для фильтрации элементов в исходном массиве Примечание. Если значения не удовлетворяют условию, действие создает пустой массив. |
Example
Это определение действия создает массив, содержащий значения, превышающие указанное значение, которое равно двум.
"Filter_array": {
"type": "Query",
"inputs": {
"from": [ 1, 3, 0, 5, 4, 2 ],
"where": "@greater(item(), 2)"
}
}
Действие ответа
Это действие создает полезные данные для ответа на запрос HTTP.
"Response" {
"type": "Response",
"kind": "http",
"inputs": {
"statusCode": 200,
"headers": { <response-headers> },
"body": { <response-body> }
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < код response-status-code> | Integer | Код состояния HTTP, отправленный на входящий запрос. Код по умолчанию является "200 OK", но это может быть любой допустимый код состояния, который начинается с 2xx, 4xx или 5xx, но не с 3xxx. |
Optional
| Value | Type | Description |
|---|---|---|
| < заголовки ответа> | Объект JSON | Один или несколько заголовков для включения в ответ |
| < текст ответа> | Various | Текст ответа, который может быть строкой, объектом JSON или даже двоичным содержимым из предыдущего действия |
Example
Это определение действия создает ответ на HTTP-запрос с заданным кодом статуса, текстом сообщения и заголовком сообщения.
"Response": {
"type": "Response",
"inputs": {
"statusCode": 200,
"body": {
"ProductID": 0,
"Description": "Organic Apples"
},
"headers": {
"x-ms-date": "@utcnow()",
"content-type": "application/json"
}
},
"runAfter": {}
}
Restrictions
В отличие от других действий, действие ответа имеет специальные ограничения:
Рабочий процесс может использовать действие ответа только в том случае, если рабочий процесс начинается с триггера HTTP-запроса, то есть рабочий процесс должен активироваться HTTP-запросом.
Рабочий процесс может использовать действие "Ответ " в любом месте , кроме циклов Foreach , "Пока циклы", включая последовательные циклы и параллельные ветви.
Исходный запрос получает ответ рабочего процесса только в том случае, если все действия, необходимые действием ответа , завершаются в течение ограничения времени ожидания HTTP.
Однако, если рабочий процесс вызывает другое приложение логики в качестве вложенного рабочего процесса, родительский рабочий процесс ожидает завершения вложенного рабочего процесса, независимо от того, сколько времени прошло до его завершения.
Если рабочий процесс использует действие ответа и шаблон синхронного ответа , рабочий процесс также не может использовать команду splitOn в определении триггера, так как эта команда создает несколько запусков. Проверьте этот случай, когда используется метод PUT, и если значение равно true, вернется ответ "Недопустимый запрос".
В противном случае, если рабочий процесс использует команду splitOn и действие ответа , рабочий процесс выполняется асинхронно и немедленно возвращает ответ "202 ACCEPTED".
Когда выполнение рабочего процесса достигает действия ответа , но входящий запрос уже получил ответ, действие ответа помечается как "Сбой" из-за конфликта. И в результате выполнения приложения логики также отмечается состояние Failed (Сбой).
Выбор действия
Это действие создает массив с объектами JSON путем преобразования элементов из другого массива на основе указанного сопоставления. Выходной и исходный массив всегда имеет одинаковое количество элементов. Несмотря на то что невозможно изменить количество объектов в выходном массиве, можно добавлять или удалять свойства и их значения в этих объектах. Свойство select указывает по меньшей мере одну пару "ключ — значение", определяющую сопоставление для преобразования элементов в исходном массиве. Пара "ключ — значение" представляет свойство и его значение во всех объектах выходного массива.
"Select": {
"type": "Select",
"inputs": {
"from": <array>,
"select": {
"<key-name>": "<expression>",
"<key-name>": "<expression>"
}
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < массив> | Array | Массив или выражение, которое предоставляет исходные элементы. Убедитесь, что выражение заключено в двойные кавычки. Примечание. Если исходный массив пуст, действие создает пустой массив. |
| < key-name> | String | Имя свойства, назначенное результату <> Чтобы добавить новое свойство во всех объектах в выходном массиве, укажите <имя> ключа для этого свойства и <выражение> для значения свойства. Чтобы удалить свойство из всех объектов в массиве, опустите <имя> ключа для этого свойства. |
| < выражения> | String | Выражение, преобразующее элемент в исходном массиве и присваивающее результат <имени ключа> |
Действие Select создает массив в виде выходных данных, поэтому любое действие, которое требуется использовать этот вывод, должно принимать массив или преобразовать массив в тип, который принимает действие потребителя. Например, чтобы преобразовать выходной массив в строку, можно передать этот массив в действие Compose , а затем ссылаться на выходные данные действия Compose в других действиях.
Example
Это определение действия создает массив объектов JSON из массива целых чисел. Действие повторяется с исходным массивом, получает каждое целочисленное значение с помощью выражения @item() и присваивает каждому значению свойство "number" в каждом объекте JSON.
"Select": {
"type": "Select",
"inputs": {
"from": [ 1, 2, 3 ],
"select": {
"number": "@item()"
}
},
"runAfter": {}
},
Массив, который создает это действие.
[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]
Чтобы использовать этот массив выходных данных в других действиях, передайте эти выходные данные в действие Compose :
"Compose": {
"type": "Compose",
"inputs": "@body('Select')",
"runAfter": {
"Select": [ "Succeeded" ]
}
},
Затем вы можете использовать выходные данные действия Compose в других действиях, например Office 365 Outlook — отправить действие электронной почты :
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{outputs('Compose')}",
"Subject": "Output array from Select and Compose actions",
"To": "<your-email@domain>"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {
"Compose": [ "Succeeded" ]
}
},
Действие таблицы
Это действие создает таблицу CSV или HTML из массива. Для массивов с объектами JSON это действие автоматически создает заголовки столбцов с именами свойств объектов. Для массивов с другими типами данных необходимо указать заголовки столбцов и значений. Например, этот массив содержит свойства ID и Product_Name, которые могут использовать это действие для заголовков столбцов.
[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]
"Create_<CSV | HTML>_table": {
"type": "Table",
"inputs": {
"format": "<CSV | HTML>",
"from": <array>,
"columns": [
{
"header": "<column-name>",
"value": "<column-value>"
},
{
"header": "<column-name>",
"value": "<column-value>"
}
]
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| <CSV или HTML> | String | Формат таблицы, которую необходимо создать |
| < массив> | Array | Массив или выражение, предоставляющее исходные элементы для таблицы Примечание. Если исходный массив пуст, действие создает пустую таблицу. |
Optional
Чтобы задать или настроить заголовки столбцов и значения, используйте массив columns. Когда пары header-value имеют одинаковое имя заголовка, их значения отображаются в том же столбце под этим заголовком. В противном случае каждый уникальный заголовок определяет уникальный столбец.
| Value | Type | Description |
|---|---|---|
| < имя столбца> | String | Имя заголовка столбца |
| < column-value> | Any | Значение в столбце |
Пример 1
Предположим, что имеется ранее созданная переменная myItemArray, содержащая в данный момент этот массив.
[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]
Это определение действия создает таблицу CSV из переменной myItemArray. Выражение, использующее свойство from, возвращает массив из myItemArray с помощью функции variables().
"Create_CSV_table": {
"type": "Table",
"inputs": {
"format": "CSV",
"from": "@variables('myItemArray')"
},
"runAfter": {}
}
Таблица CSV, которая создает это действие.
ID,Product_Name
0,Apples
1,Oranges
Пример 2
Это определение действия создает таблицу HTML из переменной myItemArray. Выражение, использующее свойство from, возвращает массив из myItemArray с помощью функции variables().
"Create_HTML_table": {
"type": "Table",
"inputs": {
"format": "HTML",
"from": "@variables('myItemArray')"
},
"runAfter": {}
}
Таблица HTML, которую создает это действие:
| ID | Product_Name |
|---|---|
| 0 | Apples |
| 1 | Oranges |
пример 3
Это определение действия создает таблицу HTML из переменной myItemArray. Однако этот пример переопределяет имена заголовков столбцов по умолчанию с помощью Stock_ID и Description и добавляет слово Organic к значениям в столбце Description.
"Create_HTML_table": {
"type": "Table",
"inputs": {
"format": "HTML",
"from": "@variables('myItemArray')",
"columns": [
{
"header": "Stock_ID",
"value": "@item().ID"
},
{
"header": "Description",
"value": "@concat('Organic ', item().Product_Name)"
}
]
},
"runAfter": {}
},
Таблица HTML, которую создает это действие:
| Stock_ID | Description |
|---|---|
| 0 | Органические яблоки |
| 1 | Органические апельсины |
Действие завершения
Это действие останавливает выполнение экземпляра рабочего процесса, отменяет все выполняемые действия, пропуская все оставшиеся действия, и возвращает указанное состояние. Например, можно использовать действие "Завершение ", когда приложение логики должно полностью выйти из состояния ошибки. Это действие не влияет на уже выполненные действия и не может отображаться внутри циклов Foreach и Until , включая последовательные циклы.
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "<status>",
"runError": {
"code": "<error-code-or-name>",
"message": "<error-message>"
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < статус> | String | Состояние для возврата запуска: Failed (Сбой), Cancelled (Отменено) или Succeeded (Успешно) |
Optional
Свойства объекта runError применяются только в том случае, если для свойства runStatus задано состояние "Failed".
| Value | Type | Description |
|---|---|---|
| < error-code-or-name> | String | Код или имя ошибки |
| < сообщение об ошибке> | String | Сообщение или текст, описывающий ошибку и любые действия, которые пользователь приложения может предпринять |
Example
Это определение действия останавливает выполнение рабочего процесса, устанавливает статус запуска как Failed (Сбой) и возвращает состояние, код ошибки и сообщение об ошибке.
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "Failed",
"runError": {
"code": "Unexpected response",
"message": "The service received an unexpected response. Please try again."
}
},
"runAfter": {}
}
Действие ожидания
Это действие приостанавливает выполнение рабочего процесса на указанный период времени или до указанного времени, но не для обоих.
Указанный интервал
"Delay": {
"type": "Wait",
"inputs": {
"interval": {
"count": <number-of-units>,
"unit": "<interval>"
}
},
"runAfter": {}
},
Указанное время
"Delay_until": {
"type": "Wait",
"inputs": {
"until": {
"timestamp": "<date-time-stamp>"
}
},
"runAfter": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < число единиц> | Integer | Для действия "Задержка " число единиц ожидания |
| < интервала> | String | Для действия "Задержка " интервал ожидания: "Вторая", "Минута", "Час", "День", "Неделя", "Месяц" |
| < Метка даты и времени> | String | Для действия "Задержка до тех пор" дата и время возобновления выполнения. Для этого значения необходимо использовать дату и время в формате UTC. |
Пример 1
Это определение действия приостанавливает рабочий процесс на 15 минут.
"Delay": {
"type": "Wait",
"inputs": {
"interval": {
"count": 15,
"unit": "Minute"
}
},
"runAfter": {}
},
Пример 2
Это определение действия приостанавливает рабочий процесс до указанного времени.
"Delay_until": {
"type": "Wait",
"inputs": {
"until": {
"timestamp": "2017-10-01T00:00:00Z"
}
},
"runAfter": {}
},
Действие рабочего процесса
Это действие вызывает другое ранее созданное приложение логики, это значит, что можно включать и повторно использовать другие рабочие процессы приложений логики. Вы также можете использовать выходные данные дочернего или вложенного приложения логики в действиях, которые следуют вложенному приложению логики, если дочернее приложение логики возвращает ответ.
Azure Logic Apps проверяет доступ к триггеру, который требуется вызвать, поэтому убедитесь, что вы можете получить доступ к триггеру. Кроме того, вложенное приложение логики должно соответствовать следующим критериям.
Триггер делает вызываемое вложенное приложение логики, например триггер запроса или HTTP
Та же подписка Azure, что и родительское приложение логики
Чтобы использовать выходные данные из вложенного приложения логики в родительском приложении логики, вложенное приложение логики должно иметь действие "Ответ"
"<nested-logic-app-name>": {
"type": "Workflow",
"inputs": {
"body": { "<body-content" },
"headers": { "<header-content>" },
"host": {
"triggerName": "<trigger-name>",
"workflow": {
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Logic/<nested-logic-app-name>"
}
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < nested-logic-app-name> | String | Имя приложения логики, которое требуется вызвать |
| < имя триггера> | String | Имя триггера вложенного приложения логики, которое необходимо вызвать |
| < Идентификатор подписки Azure> | String | Идентификатор подписки Azure вложенного приложения логики |
| < Azure-resource-group> | String | Группа ресурсов Azure вложенного приложения логики |
Optional
| Value | Type | Description |
|---|---|---|
| < заголовок-содержимое> | Объект JSON | Все заголовки для отправки с вызовом |
| < основное содержимое> | Объект JSON | Любое содержимое сообщения для отправки с вызовом |
Outputs
Выходные данные этого действия различаются в зависимости от действия "Ответ" вложенного приложения логики. Если вложенное приложение логики не включает действие "Ответ", выходные данные будут пустыми.
Example
После успешного завершения действия Start_search это определение действия рабочего процесса вызывает другое приложение логики с именем Get_product_information, которое передается в заданные входы.
"actions": {
"Start_search": { <action-definition> },
"Get_product_information": {
"type": "Workflow",
"inputs": {
"body": {
"ProductID": "24601",
},
"host": {
"id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/InventoryManager-RG/providers/Microsoft.Logic/Get_product_information",
"triggerName": "Find_product"
},
"headers": {
"content-type": "application/json"
}
},
"runAfter": {
"Start_search": [ "Succeeded" ]
}
}
},
Сведения о действиях рабочего процесса управления
Действие foreach
Это циклическое действие выполняет итерацию по массиву и действия с каждым элементом массива. По умолчанию цикл Foreach выполняется в параллельном режиме, вплоть до максимального числа циклов. Это максимальное значение указано в разделе Ограничения и конфигурация. Узнайте также, как создавать циклы "for each".
"For_each": {
"type": "Foreach",
"actions": {
"<action-1>": { "<action-definition-1>" },
"<action-2>": { "<action-definition-2>" }
},
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": <count>
}
},
"operationOptions": "<operation-option>"
}
Required
| Value | Type | Description |
|---|---|---|
| < action-1... n> | String | Имена действий, выполняемых над каждым элементом массива |
| < action-definition-1... n> | Объект JSON | Определения действий, которые выполняются |
| < for-each-expression> | String | Выражение, которое ссылается на каждый элемент в указанном массиве |
Optional
| Value | Type | Description |
|---|---|---|
| < количество> | Integer | По умолчанию цикл "для каждого" выполняется одновременно (одновременно или параллельно) до предела по умолчанию. Чтобы изменить это ограничение, задав новое < значение счетчика>, см. раздел "Изменение параллелизма каждого цикла". |
| < параметр operation-option> | String | Чтобы запустить цикл "для каждого" последовательно, а не параллельно, задайте < для параметра >Sequential значение или <число>1, но не оба. Дополнительные сведения см. в разделе Последовательный запуск циклов Foreach. |
Example
Этот цикл Foreach отправляет электронное письмо для каждого элемента массива, содержащего вложения из входящего письма. Цикл отправляет электронное письмо, включая вложение, пользователю, который рассматривает вложение.
"For_each": {
"type": "Foreach",
"actions": {
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@base64ToString(items('For_each')?['Content'])",
"Subject": "Review attachment",
"To": "[email protected]"
},
"host": {
"connection": {
"id": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['Attachments']",
"runAfter": {}
}
Чтобы указать только массив, передаваемый в виде выходных данных триггера, это выражение получает < массив имен > из тела триггера. Чтобы избежать ошибок при отсутствии массива, в этом выражении используется оператор ?.
@triggerBody()?['<array-name>']
Если действие
Это действие, являющееся условным оператором, вычисляет выражение, представляющее условие, и запускает другую ветвь в зависимости от того, является ли условие истинным или ложным. Если условие истинное, ему будет присвоено состояние Succeeded (Успешно). Дополнительные сведения см. в разделе Создание условных операторов, которые управляют действиями в рабочих процессах Azure Logic Apps.
"Condition": {
"type": "If",
"expression": { "<condition>" },
"actions": {
"<action-1>": { "<action-definition>" }
},
"else": {
"actions": {
"<action-2>": { "<action-definition" }
}
},
"runAfter": {}
}
| Value | Type | Description |
|---|---|---|
| < состояние> | Объект JSON | Условие, которое может быть выражением, для оценки |
| < action-1> | Объект JSON | Действие, которое выполняется, когда <условие> оценивается как true |
| < определение действия> | Объект JSON | Определение действия |
| < action-2> | Объект JSON | Действие, которое выполняется, когда <условие> оценивается как false |
Действия в объектах actions или else получают следующие статусы.
- "Succeeded", если они запускаются и выполняются успешно;
- "Failed", если они запускаются, но завершаются ошибкой;
- "Skipped", если не запускается соответствующая ветвь.
Example
Это условие указывает, что когда целочисленная переменная имеет значение больше нуля, рабочий процесс проверяет веб-сайт. Если переменная равна нулю или меньше, рабочий процесс проверяет другой веб-сайт.
"Condition": {
"type": "If",
"expression": {
"and": [ {
"greater": [ "@variables('myIntegerVariable')", 0 ]
} ]
},
"actions": {
"HTTP - Check this website": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://this-url"
},
"runAfter": {}
}
},
"else": {
"actions": {
"HTTP - Check this other website": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://this-other-url"
},
"runAfter": {}
}
}
},
"runAfter": {}
}
Использование выражений условиями
Ниже приведены некоторые примеры, показывающие, как можно использовать выражения в условиях.
| JSON | Result |
|---|---|
| "expression": "@parameters('<hasSpecialAction>')" | Только для логических выражений условие передается для любого истинного значения. Чтобы преобразовать другие типы в логический, используйте следующие функции: empty() или equals(). |
| "expression": "@greater(actions('<action>').output.value, parameters('<threshold>'))" | Для функций сравнения действие выполняется только в том случае, если выходные данные из <действия> больше <> значения. |
| "expression": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less(actions('<same-action>').output.value, 100)" | Для функций логики и создания вложенных логических выражений действие выполняется, если выходные данные из <действия> больше <порогового> значения или менее 100. |
| "expression": "@equals(length(actions('<action>').outputs.errors), 0)" | Можно использовать функции массива для проверки того, имеет ли массив какие-либо элементы. Действие выполняется, если массив errors пустой. |
Действие области
Это действие логически группирует действия в области, которые получают собственное состояние после завершения выполнения действий в этой области. Затем можно использовать статус области, чтобы определить, выполняются ли другие действия. Дополнительные сведения см. в разделе Создание областей, которые выполняют действия рабочего процесса на основе состояния группы в Azure Logic Apps.
"Scope": {
"type": "Scope",
"actions": {
"<inner-action-1>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
},
"<inner-action-2>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
}
}
}
Required
| Value | Type | Description |
|---|---|---|
| < inner-action-1... n> | Объект JSON | Одно или несколько действий, которые выполняются в области |
| < действия-входные данные> | Объект JSON | Входные данные для каждого действия |
Действие переключения
Это действие, также известное как оператор switch, упорядочивает другие действия в случаях и назначает значение каждому регистру, за исключением случая по умолчанию, если он существует. При запуске рабочего процесса действие Switch сравнивает значение из выражения, объекта или маркера с значениями, указанными для каждого случая. Если действие switch находит подходящий случай, рабочий процесс выполняет только действия для этого случая. Каждый раз, когда действие switch выполняется, существует только один соответствующий случай или нет совпадений. Если совпадения отсутствуют, действие switch выполняет действия по умолчанию. Дополнительные сведения см. в разделе Создание операторов switch, которые запускают действия рабочего процесса на основе определенных значений в Azure Logic Apps.
"Switch": {
"type": "Switch",
"expression": "<expression-object-or-token>",
"cases": {
"Case": {
"actions": {
"<action-name>": { "<action-definition>" }
},
"case": "<matching-value>"
},
"Case_2": {
"actions": {
"<action-name>": { "<action-definition>" }
},
"case": "<matching-value>"
}
},
"default": {
"actions": {
"<default-action-name>": { "<default-action-definition>" }
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < expression-object-or-token> | Varies | Выражение, объект JSON или маркер безопасности для оценки |
| < имя действия> | String | Имя действия для запуска в случае соответствия |
| < определение действия> | Объект JSON | Определение действия для запуска в случае соответствия |
| < сопоставление значений> | Varies | Значение для сравнения с результатом вычисления |
Optional
| Value | Type | Description |
|---|---|---|
| < default-action-name> | String | Имя действия по умолчанию для запуска, если не существует подходящего случая |
| < определение действия по умолчанию> | Объект JSON | Определение действия по умолчанию для запуска, если не существует подходящего случая |
Example
Это определение действия оценивает, выбирает ли пользователь в ответ на письмо с запросом вариант "Утвердить" или "Отклонить". В зависимости от этого варианта действие switch выполняет действия для соответствующего случая, который заключается в отправке другого сообщения электронной почты в ответ, но с различными формулировками в каждом случае.
"Switch": {
"type": "Switch",
"expression": "@body('Send_approval_email')?['SelectedOption']",
"cases": {
"Case": {
"actions": {
"Send_an_email": {
"type": "ApiConnection",
"inputs": {
"Body": "Thank you for your approval.",
"Subject": "Response received",
"To": "[email protected]"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
},
"case": "Approve"
},
"Case_2": {
"actions": {
"Send_an_email_2": {
"type": "ApiConnection",
"inputs": {
"Body": "Thank you for your response.",
"Subject": "Response received",
"To": "[email protected]"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
},
"case": "Reject"
}
},
"default": {
"actions": {
"Send_an_email_3": {
"type": "ApiConnection",
"inputs": {
"Body": "Please respond with either 'Approve' or 'Reject'.",
"Subject": "Please respond",
"To": "[email protected]"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/Mail"
},
"runAfter": {}
}
},
"runAfter": {
"Send_approval_email": [
"Succeeded"
]
}
}
Пока действие не будет
Это действие цикла содержит действия, которые выполняются, пока указанное условие имеет истинное значение. После завершения работы всех других действий на последнем этапе цикл проверяет условие. Можно включить несколько действий в объект "actions", и действие должно определить как минимум одно ограничение. Дополнительные сведения см. в разделе Цикл until.
"Until": {
"type": "Until",
"actions": {
"<action-name>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
},
"<action-name>": {
"type": "<action-type>",
"inputs": { "<action-inputs>" },
"runAfter": {}
}
},
"expression": "<condition>",
"limit": {
"count": <loop-count>,
"timeout": "<loop-timeout>"
},
"runAfter": {}
}
| Value | Type | Description |
|---|---|---|
| < имя действия> | String | Имя действия, которое необходимо выполнить внутри цикла |
| < тип действия> | String | Тип действия, которое необходимо запустить |
| < действия-входные данные> | Various | Входные данные для выполнения действия |
| < состояние> | String | Условие или выражение для оценки после всех действий в завершении цикла |
| < число циклов> | Integer | Предел максимального количества циклов, которое может выполнить действие. Дополнительные сведения о предельном и максимальном предельном значениях по умолчанию см. в разделе Ограничения и настройка Azure Logic Apps. |
| < время ожидания цикла> | String | Предел времени работы цикла, в течение которого цикл может работать. Значение timeout по умолчанию равно PT1H, которое требует формат ISO 8601. |
Note
Если выражение зависит от выходных данных любого действия в цикле "Until", убедитесь, что готовы принять во внимание все сбои, которые могут произойти во результате выполнения.
Example
Это определение действия цикла отправляет HTTP-запрос по указанному URL-адресу до тех пор, пока не будет выполнено одно из этих условий.
- Запрос возвращает ответ с состоянием кода "200 OK".
- Цикл выполнялся 60 раз.
- Цикл был выполнен в течение одного часа.
"Run_until_loop_succeeds_or_expires": {
"type": "Until",
"actions": {
"HTTP": {
"type": "Http",
"inputs": {
"method": "GET",
"uri": "http://myurl"
},
"runAfter": {}
}
},
"expression": "@equals(outputs('HTTP')['statusCode'], 200)",
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {}
}
Веб-перехватчики и подписки
Триггеры и действия на основе веб-перехватчика не регулярно проверяют конечные точки, но ждут конкретных событий или данных на этих конечных точках. Эти триггеры и действия подписываются на конечные точки, предоставляя URL-адрес обратного вызова , в котором конечная точка может отправлять ответы.
Вызов subscribe выполняется при любом изменении рабочего процесса, например когда происходит обновление учетных данных или изменяются входные параметры для триггера или действия. Этот вызов использует те же параметры, что и стандартные действия HTTP.
Вызов unsubscribe выполняется автоматически, когда при выполнении операции триггер или действие становится недопустимым, например:
- удаление или отключение триггера;
- удаление или отключение рабочего процесса;
- удаление или отключение подписки.
Для поддержки этих вызовов выражение @listCallbackUrl() возвращает уникальный "URL-адрес обратного вызова" для этого триггера или действия. Этот URL-адрес представляет собой уникальный идентификатор для конечных точек, использующих REST API службы. Параметры этой функции совпадают с параметрами триггера веб-перехватчика или действия.
Изменение асинхронной длительности
Для триггеров и действий можно ограничить длительность для асинхронного шаблона определенным интервалом времени, добавив свойство limit.timeout. Таким образом, если действие не закончилось, когда интервал истекает, статус действия помечается Cancelled с кодом ActionTimedOut. Свойство timeout использует формат ISO 8601.
"<trigger-or-action-name>": {
"type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
"inputs": {},
"limit": {
"timeout": "PT10S"
},
"runAfter": {}
}
Параметры конфигурации среды выполнения
Вы можете изменить поведение среды выполнения по умолчанию для триггеров и действий путем добавления свойств runtimeConfiguration в триггер или определение действия.
| Property | Type | Description | Триггер или действие |
|---|---|---|---|
runtimeConfiguration.concurrency.runs |
Integer | Измените ограничение по умолчанию на количество экземпляров рабочих процессов, которые могут выполняться одновременно (одновременно или параллельно). Изменение данного значения поможет ограничить количество запросов, которые получают серверные системы. Параметр свойства runs, равный 1, работает так же, как параметр свойства operationOptions, равный SingleInstance. Можно установить любое свойство, но не оба сразу. Дополнительные сведения об изменении предела по умолчанию см. в раздел об изменении параллелизма триггера или о последовательном запуске экземпляров. |
Все триггеры |
runtimeConfiguration.concurrency.maximumWaitingRuns |
Integer | Измените ограничение по умолчанию на количество экземпляров рабочих процессов, которые должны ждать выполнения, когда приложение логики уже выполняет максимальное количество одновременных экземпляров. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков. |
Все триггеры |
runtimeConfiguration.concurrency.repetitions |
Integer | Измените ограничение по умолчанию на число итераций цикла "для каждого", которое может выполняться одновременно (одновременно или параллельно). Параметр свойства repetitions, равный 1, работает так же, как параметр свойства operationOptions, равный SingleInstance. Можно установить любое свойство, но не оба сразу. Дополнительные сведения об изменении предела по умолчанию см. в разделе Изменение параллелизма цикла Foreach или Последовательный запуск циклов Foreach. |
Action: Foreach |
runtimeConfiguration.paginationPolicy.minimumItemCount |
Integer | Для определенных действий, поддерживающих и включенных разбиений на страницы, это значение указывает минимальное количество полученных результатов. Сведения о включении разбивки на страницы см. в разделе Получение большого объема данных, элементов или результатов с помощью разбивки на страницы |
Действие: разнообразная |
runtimeConfiguration.secureData.properties |
Array | Во многих триггерах и действиях данные параметры существуют для защиты в журнале выполнения приложения логики входных данных или выходных данных, либо и того, и другого. Дополнительные сведения о защите этих данных см. в разделе Скрытие входных и выходных данных из журнала выполнения. |
Большинство триггеров и действий |
runtimeConfiguration.staticResult |
Объект JSON | Для действий, поддерживающих и имеющих включенный статический параметр результата , staticResult объект имеет следующие атрибуты: - name, который ссылается на имя определения статического результата текущего действия, отображающегося внутри атрибута staticResults в атрибуте definition рабочего процесса приложения логики. Дополнительные сведения см. в разделе Статические результаты — справочник по схеме для языка определения рабочего процесса. - staticResultOptions, который указывает, являются ли статические результаты текущего действия Enabled, или нет. Сведения о включении статических результатов см. в статье Тестирование приложений логики с помощью макетных данных путем настройки статических результатов |
Действие: разнообразная |
Параметры операции
Можно изменить поведение по умолчанию для триггеров и действий со свойством operationOptions в триггере или определении действия.
| Параметр операции | Type | Description | Триггер или действие |
|---|---|---|---|
DisableAsyncPattern |
String | Запускайте действия на основе HTTP синхронно, а не асинхронно. Чтобы задать этот параметр, см. в разделе Синхронное выполнение действия. |
Actions: ApiConnection, HTTP, Response |
IncludeAuthorizationHeadersInOutputs |
String | Для приложений логики, которые позволяют OAuth с идентификатором Microsoft Entra id авторизовать доступ к конечной точке триггера на основе запросов, включите Authorization заголовок из маркера доступа OAuth в выходные данные триггера. Дополнительные сведения см. в разделе Включение заголовка "Authorization" в выходные данные триггера запроса. |
Triggers: Request, Веб-перехватчик HTTP |
Sequential |
String | Запускайте итерации цикла Foreach по одной, а не одновременно параллельно. Этот параметр работает так же, как параметр свойства runtimeConfiguration.concurrency.repetitions, равный 1. Можно установить любое свойство, но не оба сразу. Дополнительные сведения о задании этого параметра см. в разделе Последовательный запуск циклов Foreach. |
Action: Foreach |
SingleInstance |
String | Запустите триггер для каждого экземпляра приложения логики последовательно и дождитесь завершения предыдущего активного запуска, прежде чем запускать следующий экземпляр приложения логики. Этот параметр работает так же, как параметр свойства runtimeConfiguration.concurrency.runs, равный 1. Можно установить любое свойство, но не оба сразу. Чтобы задать этот параметр, см. раздел Последовательная активизация экземпляров. |
Все триггеры |
SuppressWorkflowHeaders |
String | Не отправляйте заголовки метаданных x-ms-* в исходящих запросах. По умолчанию Azure Logic Apps включает дополнительные заголовки метаданных с x-ms- префиксом в имени заголовка в составе исходящих запросов. Но некоторые устаревшие службы не принимают запросы с дополнительными неизвестными заголовками, что приводит к сбою запросов. |
Actions: HTTP, Function, APIManagement |
SuppressWorkflowHeadersOnResponse |
String | Не отправляйте заголовки метаданных x-ms-* в ответах на исходящие запросы триггеров. По умолчанию Azure Logic Apps отправляет ответы на входящие запросы, содержащие дополнительные заголовки метаданных с x-ms- префиксом в имени заголовка. Но некоторые устаревшие службы не принимают запросы или ответы с дополнительными неизвестными заголовками, что приводит к сбою запросов. |
Triggers: Request, Веб-перехватчик HTTP |
Изменение параллелизма триггера
По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно. Это означает, что каждый экземпляр триггера срабатывает до завершения выполнения предыдущего экземпляра рабочего процесса. Однако число одновременно работающих экземпляров имеет ограничение по умолчанию. Когда количество одновременно выполняемых экземпляров рабочего процесса достигает этого предела, все остальные экземпляры должны ожидать выполнения. Это ограничение помогает контролировать количество запросов, которые получают серверные системы.
Если включить элемент управления параллелизмом триггера, экземпляры триггеров выполняются параллельно до предела по умолчанию. Чтобы изменить это ограничение параллелизма по умолчанию, можно использовать редактор представления кода или конструктор рабочих процессов, так как изменение параметра параллелизма с помощью конструктора добавляет или обновляет runtimeConfiguration.concurrency.runs свойство в базовом определении триггера и наоборот. Это свойство определяет максимальное число экземпляров рабочего процесса, которые могут выполняться параллельно.
Прежде чем включить параллелизм для триггера, ознакомьтесь со следующими рекомендациями.
После включения управления параллелизмом его невозможно будет отключить.
Если максимальное число параллельных запусков триггера достигает максимальной степени параллелизма, последующие запуски триггера могут вызвать регулирование или ошибки "429 — слишком много запросов". Если вы настроили политику повторных попыток, которая обрабатывает ошибки 429, триггер может вызвать цикл повтора и регулирования, что приведет к длительным задержкам при обработке новых запросов триггеров.
Если включена параллелизм, ограничение split on значительно сокращается для разбиения массивов. Если число элементов превышает это ограничение, функция Split on отключена.
При включении параллелизма долго выполняющийся экземпляр приложения логики может привести к тому, что новые экземпляры приложения логики будут входить в состояние ожидания. Это состояние предотвращает создание новых экземпляров Azure Logic Apps и происходит даже в том случае, если количество параллельных запусков меньше указанного максимального числа параллельных запусков.
Чтобы прервать это состояние, отмените самые ранние экземпляры, которые по-прежнему выполняются.
В меню приложения логики выберите "Обзор".
В разделе "Журнал запусков " выберите самый ранний экземпляр, который по-прежнему запущен, например:
Tip
Чтобы просмотреть только запущенные экземпляры, откройте список "Все" и выберите "Выполнить".
В разделе Выполнение приложения логики щелкните Отменить выполнение.
Чтобы обойти эту возможность, добавьте время ожидания для любого действия, которое может содержать эти запуски. Если вы работаете в редакторе кода, см. раздел Изменение длительности асинхронного выполнения. В другом случае, если вы используете конструктор, выполните следующие действия.
В рабочем процессе приложения логики выберите действие, в которое нужно добавить время ожидания. В правом верхнем углу действия нажмите кнопку многоточия (...) и выберите параметры.
В разделе Timeout укажите длительность ожидания в формате ISO 8601.
Для последовательного запуска приложения логики задайте для параллелизма триггера значение
1либо с помощью редактора представления кода, либо конструктора. Убедитесь, что для свойства триггераoperationOptionsв редакторе представления кода не задано значениеSingleInstance. В противном случае возникнет ошибка проверки. Дополнительные сведения см. в разделе Последовательная активизация экземпляров.
Изменение в представлении кода
В определении базового триггера добавьте свойство runtimeConfiguration.concurrency.runs и задайте значение в зависимости от ограничений параллелизма триггера. Для последовательного запуска рабочего процесса задайте для свойства значение 1.
Этот пример ограничивает число параллельных запусков до 10 экземпляров:
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 10
}
}
}
Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.
Изменение в конструкторе рабочих процессов
В правом верхнем углу триггера нажмите кнопку многоточия (...) и выберите параметры.
В разделе "Элемент управления параллелизмом" установите значение "Вкл.".
Перетащите ползунок Степень параллелизма к необходимому значению. Чтобы запустить приложение логики последовательно, перетащите ползунок в 1.
Изменение параллелизма цикла Foreach
По умолчанию итерации цикла "For each" запускаются одновременно или параллельно. Это означает, что каждая итерация начнет выполняться до завершения предыдущей итерации. Однако число одновременных итераций имеет ограничение по умолчанию. Если количество параллельно выполняющихся итераций достигает этого предела, все остальные итерации должны ожидать выполнения.
Чтобы изменить ограничение по умолчанию, можно использовать редактор представления кода или конструктор рабочих процессов, так как изменение параметра параллелизма с помощью конструктора добавляет или обновляет runtimeConfiguration.concurrency.repetitions свойство в базовом определении действия "для каждого" и наоборот. Это свойство определяет максимальное число итераций, которые могут выполняться параллельно.
Note
Если вы установите действие Foreach для запуска последовательно с помощью конструктора или редактора представления кода, не устанавливайте свойство operationOptions действия равное Sequential в редакторе представления кода. В противном случае возникнет ошибка проверки. Дополнительные сведения см. в разделе Последовательный запуск циклов Foreach.
Изменение в представлении кода
В базовом определении "For Each" добавьте или обновите свойство runtimeConfiguration.concurrency.repetitions, которое может иметь значение в диапазоне от 1 до 50.
Ниже приведен пример, который ограничивает параллельные выполнения до 10 итераций.
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 10
}
}
}
Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.
Изменение в конструкторе рабочих процессов
В поле "Для каждого действия" в правом верхнем углу нажмите кнопку с многоточием (...), а затем нажмите кнопку "Параметры".
В разделе "Элемент управления параллелизмом" задайте для элемента управления параллелизмом значение On.
Перетащите ползунок Степень параллелизма к необходимому значению. Чтобы запустить приложение логики последовательно, перетащите ползунок в 1.
Изменение предела ожидающих запусков
По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно. Это означает, что каждый экземпляр триггера срабатывает до завершения выполнения предыдущего экземпляра рабочего процесса. Однако ограничение по умолчанию существует на количество одновременно выполняющихся экземпляров рабочих процессов. Когда число одновременных запусков достигает этого ограничения, все другие новые экземпляры рабочих процессов должны ждать выполнения. Ограничение по умолчанию также существует по количеству экземпляров ожидающих рабочих процессов. Когда число ожидающих экземпляров достигает этого ограничения, Azure Logic Apps больше не принимает новые экземпляры рабочих процессов для запуска. Триггеры запроса и веб-перехватчика возвращают 429 — слишком много ошибок запросов, а повторяющиеся триггеры начинают пропускать попытки опроса.
Можно изменить ограничение по умолчанию на параллелизм триггера, а также ограничение по умолчанию при ожидании выполнения. Однако это изменение в основном замедляет триггер, чтобы облегчить давление из-за параллелизма. Например, если у вас есть триггер опроса, а очередь ожидающих запусков заполнена из-за выполняемых запусков, Azure Logic Apps останавливает опрос. Если рабочий процесс использует триггер на основе запросов, а очередь ожидания выполняется полностью, Azure Logic Apps начинает возвращать ошибку 429. Некоторые сценарии существуют, когда Azure Logic Apps не может остановить триггер от опроса, не вводя сбои и выбирая добавление таких запусков в очередь ожидающих запусков в любом случае без сбоя вызовов.
В базовом определении триггера добавьте свойство runtimeConfiguration.concurrency.maximumWaitingRuns, которое может иметь значение в диапазоне от 1 до 100.
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"maximumWaitingRuns": 50
}
}
}
Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.
Последовательная активация экземпляров
Чтобы запустить каждый экземпляр приложения логики только после завершения предыдущего экземпляра, установите триггер в значение последовательного запуска. Вы можете использовать редактор представления кода или конструктор рабочих процессов, так как изменение параметра параллелизма с помощью конструктора также добавляет или обновляет runtimeConfiguration.concurrency.runs свойство в определении базового триггера и наоборот.
Note
Если вы настроите триггер для последовательного запуска с помощью конструктора или редактора представления кода, не устанавливайте свойство operationOptions триггера равное Sequential в редакторе представления кода.
В противном случае возникнет ошибка проверки.
Изменение в представлении кода
В определении триггера задайте одно из этих свойств, но не оба.
Задайте для свойства runtimeConfiguration.concurrency.runs значение 1.
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
}
}
-or-
Задайте для свойства operationOptions значение SingleInstance.
"<trigger-name>": {
"type": "<trigger-name>",
"recurrence": {
"frequency": "<time-unit>",
"interval": <number-of-time-units>,
},
"operationOptions": "SingleInstance"
}
Дополнительные сведения см. в разделах Настройки конфигурации среды выполнения и Настройки операций.
Изменение в конструкторе рабочих процессов
В правом верхнем углу триггера нажмите кнопку многоточия (...) и выберите параметры.
В разделе "Элемент управления параллелизмом" установите значение "Вкл.".
Перетащите ползунок Степень параллелизма на номер
1.
Последовательный запуск циклов Foreach
Чтобы запустить итерацию цикла Foreach только после завершения предыдущей итерации, настройте последовательное выполнение каждого действия. Вы можете использовать редактор представления кода или конструктор рабочих процессов, так как изменение параллелизма действия с помощью конструктора также добавляет или обновляет runtimeConfiguration.concurrency.repetitions свойство в определении базового действия и наоборот.
Note
Если вы настроите последовательное выполнение действия Foreach для запуска с помощью конструктора или редактора представления кода, не устанавливайте свойство operationOptions действия равным Sequential в редакторе представления кода.
В противном случае возникнет ошибка проверки.
Изменение в представлении кода
В определении действия задайте один из этих свойств, но не оба.
Задайте для свойства runtimeConfiguration.concurrency.repetitions значение 1.
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
}
}
-or-
Задайте для свойства operationOptions значение Sequential.
"For_each" {
"type": "Foreach",
"actions": { "<actions-to-run>" },
"foreach": "<for-each-expression>",
"runAfter": {},
"operationOptions": "Sequential"
}
Дополнительные сведения см. в разделах Настройки конфигурации среды выполнения и Настройки операций.
Изменение в конструкторе рабочих процессов
В правом верхнем углу каждого действия нажмите кнопку многоточия (...) и выберите параметры.
В разделе "Элемент управления параллелизмом" задайте для элемента управления параллелизмом значение On.
Перетащите ползунок Степень параллелизма на номер
1.
Выполнение действий в шаблоне синхронной операции
По умолчанию действия HTTP Action и APIConnection в Azure Logic Apps соответствуют стандартному шаблону асинхронных операций, а действие "Ответ" (Response) соответствует шаблону синхронных операций. Асинхронный шаблон указывает, что после вызова действия или отправки запроса на указанную конечную точку, службу, систему или API получатель немедленно возвращает ответ "202 ACCEPTED". Этот код подтверждает, что получатель принял запрос, но еще не завершил обработку. Ответ может включать location заголовок, указывающий URL-адрес и идентификатор обновления, который вызывающий объект может использовать для постоянного опроса или проверки состояния асинхронного запроса до тех пор, пока получатель не перестанет обрабатывать и возвращает ответ "200 ОК" или другой ответ, отличный от 202. Дополнительные сведения см. в разделе Асинхронная интеграция микрослужб обеспечивает автономность микрослужб.
В конструкторе приложений логики действие HTTP, действия APIConnection и действие ответа имеют параметр асинхронного шаблона . Этот параметр указывает, что вызывающая сторона не ждет завершения обработки и может перейти к следующему действию, но продолжит проверку состояния, пока обработка не будет остановлена. При отключенном параметре вызывающая сторона будет ожидать завершения обработки перед переходом к следующему действию. Чтобы найти этот параметр, выполните следующие шаги.
В строке заголовка действия HTTP нажмите кнопку с многоточием (...), которая открывает параметры действия.
Найдите параметр асинхронного шаблона .
В определении базовой нотации объекта JavaScript (JSON) действия HTTP действия и APIConnection косвенным образом соответствуют модели асинхронной операции.
В некоторых случаях может потребоваться, чтобы действие следовало синхронной модели. Например, при использовании действия HTTP может потребоваться:
- Избежать истечения времени ожидания HTTP для долго выполняющихся задач
- Отключить проверку заголовков расположения
В этих случаях можно запустить синхронное выполнение действий с помощью следующих параметров:
Замените версию опроса действия на версию с веб-перехватчиком, если она доступна.
Отключите асинхронное поведение действия, выполнив любой из следующих вариантов:
В конструкторе приложений логики отключите параметр Асинхронная модель.
В базовом определении JSON действия добавьте
"DisableAsyncPattern"параметр operation.
Отключение параметра асинхронного шаблона
В конструкторе приложений логики в строке заголовка действия нажмите кнопку с многоточием (...), которая открывает параметры действия.
Найдите параметр асинхронного шаблона , включите параметр "Отключить ", если он включен, и нажмите кнопку "Готово".
Отключение асинхронной модели в определении JSON для действия
В базовом определении JSON действия добавьте и задайте для свойства OperationOptions значение "DisableAsyncPattern" в разделе действия "inputs" , например:
"<some-long-running-action>": {
"type": "Http",
"inputs": { "<action-inputs>" },
"operationOptions": "DisableAsyncPattern",
"runAfter": {}
}
Проверка подлинности триггеров и действий
Конечные точки HTTP и HTTPS поддерживают различные виды проверки подлинности. В зависимости от триггера или действия, используемого для выполнения исходящих вызовов или запросов, обращающихся к этим конечным точкам, у вас есть выбор из диапазона различных типов проверки подлинности. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье.
Дальнейшие шаги
- См. дополнительные сведения о языке определения рабочего процесса