Справочник по схемам для типов триггеров и действий в Azure Logic Apps

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

Общие сведения о триггерах

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

  • Опрашивающий триггер проверяет конечную точку службы через равные промежутки времени.

  • Извещающий триггер создает подписку на конечную точку и предоставляет 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>"
},

Обязательный

Значение Тип Описание
<trigger-name> Строка Имя триггера
<trigger-type> Строка Тип триггера, например Http или ApiConnection
<trigger-inputs> Объект JSON Входные данные, определяющие режим работы триггера
<time-unit> Строка Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц"
<number-of-time-units> Целое Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает.

Ниже приведены минимальные и максимальные интервалы.

— Месяц: 1–16 месяцев
— День: 1–500 дней
— Час: 1–12 000 часов
— Минута: 1–72 000 минут
— Секунда: 1–9 999 999 секунд

Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев.

Необязательно

Значение Тип Описание
<array-with-conditions> Массив Массив, содержащий одно или несколько условий, которые определяют выполнение рабочего процесса. Доступно только для триггеров.
<runtime-config-options> Объект JSON Можно изменить поведение триггера во время выполнения, задав свойства runtimeConfiguration. Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.
<splitOn-expression> Строка Для триггеров, возвращающих массив, можно указать выражение для обработки, которое разделяет или выполняет по отдельности элементы массива на нескольких экземплярах рабочего процесса.
<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Список типов триггеров

Каждый тип триггера имеет свой интерфейс и свои входные данные, которые определяют его поведение.

Встроенные триггеры

Тип триггера Description
HTTP Проверяет или опрашивает любую конечную точку. Конечная точка должна соответствовать определенному условию триггера, используя шаблон асинхронных операций 202 или возвращая массив.
HTTPWebhook Создает вызываемую конечную точку для приложения логики, но также вызывает указанный URL-адрес для регистрации или отмены регистрации.
Повторение Активируется на основе определенного расписания. Можно задать дату и время в будущем для срабатывания триггера. На основе частоты можно также указать время и дни запуска рабочего процесса.
Запросить Создает вызываемую конечную точку для приложения логики, также называется "ручным" триггером. Например, ознакомьтесь со статьей Вызовы, срабатывания триггеров и создание вложенных рабочих процессов в приложениях логики.

Управляемые триггеры 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>"
}

Обязательный

Значение Тип Описание
<APIConnection_trigger_name> Строка Имя триггера
<имя_соединения> Строка Имя подключения к управляемому API, который используется рабочим процессом
<method-type> Строка Метод HTTP для обмена данными с управляемым API: GET, PUT, POST, PATCH или DELETE
<api-operation> Строка Операция API для вызова
<time-unit> Строка Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц"
<number-of-time-units> Целое Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает.

Ниже приведены минимальные и максимальные интервалы.

— Месяц: 1–16 месяцев
— День: 1–500 дней
— Час: 1–12 000 часов
— Минута: 1–72 000 минут
— Секунда: 1–9 999 999 секунд

Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев.

Необязательно

Значение Тип Описание
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<query-parameters> Объект JSON Все параметры запроса для включения с помощью вызова API. Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.
<max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
<max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
<splitOn-expression> Строка Для триггеров, возвращающих массивы, это выражение ссылается на массив, который необходимо использовать, чтобы вы могли создать и запустить экземпляр рабочего процесса для каждого элемента массива, а не использовали цикл Foreach.

Например, следующее выражение представляет элемент массива, возвращенный внутри тела триггера: @triggerbody()?['value']

<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Выходные данные

Элемент Тип Описание
заголовки Объект JSON Заголовки из ответа
текст Объект JSON Текст из ответа
Код состояния Целое Код состояния из ответа

Пример

Следующее определение триггера каждый день проверяет электронную почту в папке "Входящие" для рабочей или учебной учетной записи:

"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>"
}

Обязательный

Значение Тип Описание
<имя_соединения> Строка Имя подключения к управляемому API, который используется рабочим процессом
<body-content> Объект JSON Любое содержимое сообщения для отправки на управляемый API в качестве полезных данных

Необязательно

Значение Тип Описание
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<query-parameters> Объект JSON Все параметры запроса для включения в вызов API

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.

<max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
<max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
<splitOn-expression> Строка Для триггеров, возвращающих массивы, это выражение ссылается на массив, который необходимо использовать, чтобы вы могли создать и запустить экземпляр рабочего процесса для каждого элемента массива, а не использовали цикл Foreach.

Например, следующее выражение представляет элемент массива, возвращенный внутри тела триггера: @triggerbody()?['value']

<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Пример

Это определение триггера подписывается на 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>"
}

Обязательный

Свойство Значение Тип Описание
method <method-type> Строка Выбор метода для отправки запроса: "GET", "PUT", "POST", "PATCH" или "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> Строка URL-адрес конечной точки HTTP или HTTPS, по которому нужно отправить исходящий запрос. Максимальный размер строки: 2 КБ

Для службы или ресурса Azure этот синтаксис URI включает идентификатор ресурса и путь к ресурсу, к которому требуется получить доступ.

frequency <time-unit> Строка Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц"
interval <number-of-time-units> Целое Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает.

Ниже приведены минимальные и максимальные интервалы.

— Месяц: 1–16 месяцев
— День: 1–500 дней
— Час: 1–12 000 часов
— Минута: 1–72 000 минут
— Секунда: 1–9 999 999 секунд

Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев.

Необязательно

Свойство Значение Тип Описание
headers <header-content> Объект JSON Все заголовки, которые необходимо включить в запрос

Например, чтобы задать язык и тип:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

queries <query-parameters> Объект JSON Все параметры запроса, которые необходимо использовать в запросе

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к запросу.

body <body-content> Объект JSON Содержимое сообщения для отправки в качестве полезных данных с запросом
authentication <authentication-type-and-property-values> Объект JSON Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. Помимо планировщика поддерживается свойство authority. По умолчанию его значение равно https://management.azure.com/, но также можно использовать другое значение.
retryPolicy > type <retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
runs <max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
maximumWaitingRuns <max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
operationOptions <operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Выходные данные

Элемент Тип Описание
headers Объект JSON Заголовки из ответа
body Объект JSON Текст из ответа
status code Целое Код состояния из ответа

Требования для входящих запросов

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

Свойство Обязательное поле Описание
Код состояния Да Код состояния "200 OK" инициирует запуск. Другие коды состояния — нет.
Заголовок retry-after No Количество секунд перед повторным опросом конечной точки приложением логики
Заголовок Location No URL-адрес для вызова во время следующего интервала опроса. Если не указан, используется исходный URL-адрес.

Пример поведения для различных запросов

Код состояния Повтор через Поведение
200 {нет} Выполняется рабочий процесс, затем после определенного количества повторений снова проверяется, не добавились ли данные.
200 10 seconds Выполняется рабочий процесс, затем через 10 секунд снова проверяется, не добавились ли данные.
202 60 секунд Рабочий процесс не запускается. Следующая попытка происходит через одну минуту с учетом определенного повторения. Если определенное повторение составляет менее минуты, то приоритет имеет заголовок retry-after. В противном случае используется определенное повторение.
400 {нет} Недопустимый запрос, рабочий процесс не запускается. Если параметр retryPolicy не задан, то используется политика по умолчанию. После достижения количества попыток триггер снова проверяет наличие данных после определенного числа повторений.
500 {нет} Ошибка сервера, рабочий процесс не запускается. Если параметр 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>"
}

Некоторые значения, например <method-type>, доступны для объектов "subscribe" и "unsubscribe".

Обязательный

Значение Тип Описание
<method-type> Строка Метод HTTP, используемый для запроса подписки: "GET", "PUT", "POST", "PATCH" или "DELETE"
<endpoint-subscribe-URL> Строка URL-адрес конечной точки для отправки запроса на подписку

Необязательно

Значение Тип Описание
<method-type> Строка Метод HTTP, используемый для запроса отмены: GET, PUT, POST, PATCH или DELETE
<endpoint-unsubscribe-URL> Строка URL-адрес конечной точки для отправки запроса на отмену
<body-content> Строка Любое содержимое сообщения для отправки в запросе на подписку или отмену
<authentication-type> Объект JSON Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье.
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
<max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Выходные данные

Элемент Тип Описание
заголовки Объект JSON Заголовки из ответа
текст Объект JSON Текст из ответа
Код состояния Целое Код состояния из ответа

Пример

Этот триггер создает подписку на указанную конечную точку, предоставляет уникальный 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>"
}

Обязательный

Значение Тип Описание
<time-unit> Строка Единица времени, которая описывает, как часто срабатывает триггер: "секунда", "минута", "час", "день", "неделя" или "месяц"
<number-of-time-units> Целое Значение, указывающее частоту срабатывания триггера на основе частоты, которая является числом единиц времени ожидания, пока триггер снова не срабатывает.

Ниже приведены минимальные и максимальные интервалы.

— Месяц: 1–16 месяцев
— День: 1–500 дней
— Час: 1–12 000 часов
— Минута: 1–72 000 минут
— Секунда: 1–9 999 999 секунд

Например, если интервал равен 6, а значение частоты — Month, то повтор будет происходить каждые 6 месяцев.

Необязательно

Значение Тип Описание
<start-date-time-with-format-YYYY-MM-DDThh:mm:ss> Строка Дата начала и время в этом формате:

ГГГГ-ММ-DDThh:mm:ss, если указать часовой пояс

-Или-

ГГГГ-ММ-DDThh:mm:ssZ, если не указать часовой пояс

Например, если требуется указать 18 сентября 2017 г. в 14:00, то используйте 2017-09-18T14:00:00 и укажите часовой пояс, такой как "Стандартное тихоокеанское время", или укажите "2017-09-18T14:00:00Z" без часового пояса.

Важно: время начала не может превышать 49 лет в будущем и должно соответствовать спецификациям даты и времени ISO 8601, быть в формате даты и времени UTC, но без Смещения UTC. Если не указать часовой пояс, то необходимо в конце добавить букву Z без пробелов. Эта буква Z ссылается на соответствующее судовое время.

В простых расписаниях время начала определяет первый случай выполнения задания, а в сложных расписаниях триггер срабатывает не раньше, чем наступит время начала. Дополнительные сведения о дате и времени начала см. в статье Начало работы с триггером повторения.

<time-zone> Строка Применяется только при указании времени начала, так как этот триггер не принимает смещение от UTC. Укажите часовой пояс, который необходимо применить.
<one-or-more-hour-marks> Целое число или массив целых чисел Если для параметра frequency задать значение Day или Week, то можно указать одно или несколько целых чисел от 0 до 23, разделенных запятыми. В эти часы будет запускаться рабочий процесс.

Например, если указать 10, 12 и 14, вы получите часовые метки 10:00, 12:00 и 14:00.

<one-or-more-minute-marks> Целое число или массив целых чисел Если для параметра frequency задать значение Day или Week, то можно указать одно или несколько целых чисел от 0 до 59, разделенных запятыми. В эти минуты часа будет запускаться рабочий процесс.

Например, если указать 30 минут и использовать предыдущий пример для часов, то вы получите 10:30, 12:30 и 14:30.

weekDays Строка или массив строк Если для параметра frequency задать значение Week, то можно указать один или несколько дней, разделенных запятыми. В эти дни будет запускаться рабочий процесс: Monday (Понедельник), Tuesday (Вторник), Wednesday (Среда), Thursday (Четверг), Friday (Пятница), Saturday (Суббота) и Sunday (Воскресенье).
<max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
<max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство 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 для этого триггера, которая описывает и проверяет полезные или входные данные, которые триггер получает от входящего запроса. Схема также упрощает свойства триггеров для ссылки на следующие действия в рабочем процессе.

Чтобы вызвать этот триггер, необходимо использовать API listCallbackUrl, описанный в REST API службы рабочих процессов. Чтобы узнать, как использовать этот триггер в качестве конечной точки HTTP, см. сведения в статье Вызовы, срабатывания триггеров и создание вложенных рабочих процессов в приложениях логики.

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

Обязательный

Значение Тип Описание
<property-name> Строка Имя свойства в схеме JSON, которое описывает полезные данные
<property-type> Строка Тип свойства

Необязательно

Значение Тип Описание
<method-type> Строка Метод, который входящие запросы должны использовать для вызова приложения логики: GET, PUT, POST, PATCH или DELETE
<relative-path-for-accepted-parameter> Строка Относительный путь для параметра, который принимает URL-адрес конечной точки
<required-properties> Массив Одно или несколько свойств, требующих значений
<max-runs> Целое По умолчанию экземпляры рабочего процесса запускаются одновременно или параллельно до предела по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма триггера.
<max-runs-queue> Целое Когда рабочий процесс уже выполняет максимальное количество экземпляров, которое можно изменить на основе свойства runtimeConfiguration.concurrency.runs, все новые запуски помещаются в очередь до ограничения по умолчанию. Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.
<operation-option> Строка Поведение по умолчанию можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Пример

Этот триггер указывает, что входящий запрос должен использовать HTTP-метод POST для вызова триггера, а также включать схему, проверяющую входные данные входящего запроса.

"manual": {
   "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))

Активация нескольких запусков в массиве

Если триггер получает массив для обработки рабочим процессом, цикл for each иногда может занимать слишком много времени для обработки каждого элемента массива. Вместо этого можно использовать свойство SplitOn в триггере, чтобы выполнить индивидуальную обработку массива. При индивидуальной обработке массив разделяется на элементы и для каждого элемента запускается новый экземпляр рабочего процесса. Такой подход является эффективным, например, если нужно опросить конечную точку, которая может вернуть несколько новых элементов между интервалами опроса.

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

Прежде чем использовать функцию SplitOn, ознакомьтесь со следующими рекомендациями.

  • Если включен параллелизм триггеров, ограничение SplitOn значительно сокращается. Если число элементов превышает это ограничение, функция SplitOn отключается.

  • Функцию SplitOn нельзя использовать с шаблоном синхронного отклика. Любой рабочий процесс, который использует свойство SplitOn и содержит действие ответа, выполняется асинхронно и сразу же отправляет ответ 202 ACCEPTED.

  • Максимальное число элементов массива, которое свойство SplitOn позволяет обработать в одном рабочем процессе, см. в статье Ограничения и настройка.

Пример

Предположим, что у вас есть триггер HTTP, который вызывает API и получает следующий ответ:

{
   "Status": "Succeeded",
   "Rows": [ 
      { 
         "id": 938109380,
         "name": "customer-name-one"
      },
      {
         "id": 938109381,
         "name": "customer-name-two"
      }
   ]
}

Рабочему процессу требуется только содержимое массива в Rows, поэтому можно создать триггер, как в следующем примере.

"HTTP_Debatch": {
   "type": "Http",
    "inputs": {
        "uri": "https://mydomain.com/myAPI",
        "method": "GET"
    },
   "recurrence": {
      "frequency": "Second",
      "interval": 1
    },
    "splitOn": "@triggerBody()?.Rows"
}

Примечание.

Если используется команда SplitOn, получить свойства, которые находятся за пределами массива, невозможно. В нашем примере получить свойство status в ответе, возвращенном из API, невозможно.

Чтобы избежать ошибок, если отсутствует свойство Rows, в этом примере используется оператор ?.

Теперь в определении рабочего процесса можно использовать @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>"
},

Обязательный

Значение Тип Описание
<action-name> Строка Имя действия
<action-type> Строка Тип действия, например Http или ApiConnection
<input-name> Строка Имя для входа, определяющее поведение действия
<input-value> Various Входное значение, которое может быть строкой, целым числом, объектом JSON и т. д.
<previous-trigger-or-action-status> Объект JSON Имя и итоговое состояние для триггера или действия, которое должно выполняться немедленно перед запуском текущего действия

Необязательно

Значение Тип Описание
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе "Политики повтора".
<runtime-config-options> Объект JSON Режим работы некоторых действий во время выполнения можно изменить, задав свойство runtimeConfiguration. Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.
<operation-option> Строка Режим работы по умолчанию некоторых действий можно изменить, задав свойство operationOptions. Дополнительные сведения см. в разделе Варианты операций.

Список типов действий

Некоторые часто используемые типы действий.

Встроенные действия

Тип действия Description
Создание Создает один выход из входных данных, который может иметь различные типы.
Execute JavaScript Code Выполнение фрагментов кода JavaScript, соответствующих заданным условиям. Требования к коду и дополнительные сведения см. в разделе Добавление и выполнение фрагментов кода со встроенным кодом.
Function Вызывает функцию Azure.
HTTP Вызывает конечную точку HTTP.
Присоединение Создает строку из всех элементов в массиве и разделяет эти элементы определенным символом разделителя.
Синтаксический анализ JSON Создает понятные токены из свойств в содержимом JSON. Затем можно ссылаться на эти свойства, включая токены в приложение логики.
Запрос Создает массив из элементов другого массива на основании условия или фильтра.
Ответ Создает ответ на входящий вызов или запрос.
Select Создает массив объектов JSON, преобразуя элементы другого массива на основе указанной карты.
Таблицу Создает таблицу CSV или HTML из массива.
Завершение Останавливает активное выполнение рабочего процесса.
Ожидание Приостанавливает рабочий процесс на заданный срок или до указанной даты и времени.
Документооборот Создает вложенный рабочий процесс внутри другого рабочего процесса.

Действия управляемых API

Тип действия Description
ApiConnection Вызывает конечную точку HTTP, используя управляемый Майкрософт интерфейс API.
ApiConnectionWebhook Работает как веб-перехватчик HTTP, но использует интерфейс API, управляемый Майкрософт.

Действия рабочего процесса управления

Эти действия позволяют управлять выполнением рабочего процесса и включают в себя другие действия. За пределами действия рабочего процесса управления можно непосредственно ссылаться на действия внутри него. Например, если имеется действие Http внутри области, можно ссылаться на выражение @body('Http') из любой точки в рабочем процессе. В то же время действия, которые существуют внутри действия рабочего процесса управления, могут "привязываться" только к другим действиям, которые находятся в той же структуре рабочего процесса управления.

Тип действия Description
ForEach Выполняет те же действия в цикле для каждого элемента массива.
If Выполняет действия в зависимости от того, имеет ли заданное условие значение true или false.
Область применения Выполняет действия из набора действий на основе состояния группы.
Switch Выполняет действия, организованные в случаях, когда значения из выражений, объектов или токенов соответствуют значениям, указанным для каждого случая.
До условия Выполняет действия в цикле до тех пор, пока указанное условие не будет иметь значение true.

Действия. Подробная справочная информация

Действие APIConnection

Это действие отправляет HTTP-запрос для управляемого Microsoft интерфейса 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": {}
}

Обязательный

Значение Тип Описание
<action-name> Строка Имя действия, предоставляемого соединителем
<api-name> Строка Имя управляемого Майкрософт интерфейса API, используемого для подключения
<method-type> Строка Метод HTTP для вызова API: GET, PUT, POST, PATCH или DELETE
<api-operation> Строка Операция API для вызова

Необязательно

Значение Тип Описание
<other-action-specific-input-properties> Объект JSON Все входные свойства, которые применяются к указанному действию
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<query-parameters> Объект JSON Все параметры запроса для включения с помощью вызова API.

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.

<other-action-specific-properties> Объект JSON Все другие свойства, которые применяются к указанному действию

Пример

Это определение описывает действие Отправить по электронной почте для соединителя Outlook Office 365, который является управляемым Майкрософт интерфейсом API.

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "Thank you for your membership!",
         "Subject": "Hello and welcome!",
         "To": "Sophie.Owen@contoso.com"
      },
      "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": {}
}

Некоторые значения, например <method-type>, доступны для объектов "subscribe" и "unsubscribe".

Обязательный

Значение Тип Описание
<action-name> Строка Имя действия, предоставляемого соединителем
<method-type> Строка Метод HTTP для подписки или отмены подписки на конечную точку: GET, PUT, POST, PATCH или DELETE
<api-subscribe-URL> Строка Универсальный код ресурса (URI), используемый для подписки на API

Необязательно

Значение Тип Описание
<api-unsubscribe-URL> Строка Универсальный код ресурса (URI), используемый для отмены подписки на API
<header-content> Объект JSON Все заголовки для отправки в запросе

Например, чтобы задать язык и тип запроса:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

<body-content> Объект JSON Любое содержимое сообщения для отправки в запросе
<authentication-type> Объект JSON Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье.
<retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<query-parameters> Объект JSON Все параметры запроса для включения в вызов API

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.

<other-action-specific-input-properties> Объект JSON Все входные свойства, которые применяются к указанному действию
<other-action-specific-properties> Объект JSON Все другие свойства, которые применяются к указанному действию

Также можно указать ограничения для действий ApiConnectionWebhook так же, как ограничения асинхронных операций HTTP.

Действие compose

Это действие создает один вывод из нескольких входных данных, включая выражения. Оба входа и выхода могут иметь любой тип, поддерживаемый Azure Logic Apps, например массивы, объекты JSON, язык XML и двоичные объекты. Затем можно использовать выходные данные действия в других действиях.

"Compose": {
   "type": "Compose",
   "inputs": "<inputs-to-compose>",
   "runAfter": {}
},

Обязательный

Значение Тип Описание
<inputs-to-compose> Любое Входные данные для создания единых выходных данных

Пример 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": {}
}

Обязательный

Значение Тип Описание
<JavaScript-code-snippet> Различается Код JavaScript, который требуется выполнить. Требования к коду и дополнительные сведения см. в разделе Выполнение фрагментов кода в рабочих процессах.

В атрибуте code фрагмент кода может использовать в качестве входных данных объект workflowContext, который предназначен только для чтения. Этот объект включает вложенные свойства, дающие коду доступ к результатам из триггера и предыдущих действий в данном рабочем процессе. Дополнительные сведения об объекте workflowContext см. в разделе Эталонный триггер и результаты действия в объекте workflowContext.

Необходимо в некоторых случаях

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

Для атрибута includeTrigger можно указать значения true или false.

Значение Тип Описание
<предыдущие действия> Массив строк Массив с именами действий в формате 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": {}
}

Обязательный

Значение Тип Описание
<Azure-function-ID> Строка Идентификатор ресурса для функции Azure, которую требуется вызвать. Формат для этого значения:

"/subscriptions/<ИД-подписки-Azure>/resourceGroups/<группа-ресурсов-Azure>/providers/Microsoft.Web/sites/<имя-приложения-функции-Azure>/functions/<имя-функции-Azure>"

<method-type> Строка Метод HTTP, используемый для вызова функции: GET, PUT, POST, PATCH или DELETE.

Если метод не указан, то по умолчанию используется метод POST.

Необязательно

Значение Тип Описание
<header-content> Объект JSON Все заголовки для отправки с помощью вызова

Например, чтобы задать язык и тип запроса:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

<body-content> Объект JSON Любое содержимое сообщения для отправки в запросе
<query-parameters> Объект JSON Все параметры запроса для включения в вызов API

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.

<other-action-specific-input-properties> Объект JSON Все входные свойства, которые применяются к указанному действию
<other-action-specific-properties> Объект JSON Все другие свойства, которые применяются к указанному действию

При сохранении приложения логики модуль Logic Apps выполняет эти проверки указанной функции.

  • У рабочего процесса должен быть доступ к функции.

  • Рабочий процесс может использовать только стандартный триггер HTTP или универсальный триггер веб-перехватчика в формате JSON.

    Модуль Logic Apps получает и кэширует URL-адрес триггера, используемый в среде выполнения. Тем не менее, если какая-либо операция делает недействительным кэшированный URL-адрес, то в среде выполнения действие Функция заканчивается сбоем. Чтобы устранить эту проблему, повторно сохраните приложение логики, чтобы оно снова загрузило URL-адрес триггера.

  • Функция не может иметь какой-либо определенный маршрут.

  • Можно использовать только авторизацию с помощью функции и анонимную авторизацию.

Пример

Это определение действия вызывает ранее созданную функцию 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": {}
}

Обязательный

Свойство Значение Тип Описание
method <method-type> Строка Выбор метода для отправки запроса: "GET", "PUT", "POST", "PATCH" или "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> Строка URL-адрес конечной точки HTTP или HTTPS, по которому нужно отправить исходящий запрос. Максимальный размер строки: 2 КБ

Для службы или ресурса Azure этот синтаксис URI включает идентификатор ресурса и путь к ресурсу, к которому требуется получить доступ.

Необязательно

Свойство Значение Тип Описание
headers <header-content> Объект JSON Все заголовки, которые необходимо включить в запрос

Например, чтобы задать язык и тип:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }

queries <query-parameters> Объект JSON Все параметры запроса, которые необходимо использовать в запросе

Например, объект "queries": { "api-version": "2018-01-01" } добавляет ?api-version=2018-01-01 к вызову.

body <body-content> Объект JSON Содержимое сообщения для отправки в качестве полезных данных с запросом
authentication <authentication-type-and-property-values> Объект JSON Модель проверки подлинности, которую запрос использует для проверки подлинности исходящих запросов. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье. Помимо планировщика поддерживается свойство authority. По умолчанию его значение равно https://management.azure.com/, но также можно использовать другое значение.
retryPolicy > type <retry-behavior> Объект JSON Настраивает режим повтора для прерывистых сбоев, которые имеют код состояния 408, 429 и 5XX, и для любых исключений при подключении. Дополнительные сведения см. в разделе Политики повтора.
<other-action-specific-input-properties> <input-property> Объект JSON Все входные свойства, которые применяются к указанному действию
<other-action-specific-properties> <property-value> Объект JSON Все другие свойства, которые применяются к указанному действию

Пример

Это определение действия получает последние новости, отправив запрос на указанную конечную точку.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "https://mynews.example.com/latest"
   }
}

Действие присоединения

Это действие создает строку из всех элементов в массиве и разделяет эти элементы определенным символом разделителя.

"Join": {
   "type": "Join",
   "inputs": {
      "from": <array>,
      "joinWith": "<delimiter>"
   },
   "runAfter": {}
}

Обязательный

Значение Тип Описание
<array>. Массив Массив или выражение, которое предоставляет исходные элементы. Если задано выражение, заключите его в двойные кавычки.
<разделитель> Единая строка символов Символ, разделяющий каждый элемент в строке

Пример

Предположим, что у вас есть ранее созданная переменная 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": {}
},

Обязательный

Значение Тип Описание
<JSON-source> Объект JSON Содержимое JSON, которое необходимо анализировать
<JSON-schema> Объект JSON Схема JSON, описывающая основное содержимое JSON, которое использует действие для анализа исходного содержимого JSON.

Совет. В Конструкторе Logic Apps можно указать схему или предоставить пример полезных данных, чтобы действие могло создать схему.

Пример

Это определение действия создает маркеры, которые можно использовать в рабочем процессе, но только в действиях, выполняемых после действия Анализ JSON:

FirstName, LastName и Email

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": {
         "Member": {
            "Email": "Sophie.Owen@contoso.com",
            "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": "Sophie.Owen@contoso.com"
   }
},

Свойство 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": {}
}

Обязательный

Значение Тип Описание
<array>. Массив Массив или выражение, которое предоставляет исходные элементы. Если задано выражение, заключите его в двойные кавычки.
<condition-or-filter> Строка Условие, используемое для фильтрации элементов в исходном массиве

Примечание. Если нет значений, соответствующих условию, действие создает пустой массив.

Пример

Это определение действия создает массив, содержащий значения, превышающие указанное значение, которое равно двум.

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": [ 1, 3, 0, 5, 4, 2 ],
      "where": "@greater(item(), 2)"
   }
}

Response action

Это действие создает полезные данные для ответа на запрос HTTP.

"Response" {
    "type": "Response",
    "kind": "http",
    "inputs": {
        "statusCode": 200,
        "headers": { <response-headers> },
        "body": { <response-body> }
    },
    "runAfter": {}
},

Обязательный

Значение Тип Описание
<response-status-code> Целое Код состояния HTTP, отправленный на входящий запрос. Код по умолчанию является "200 OK", но это может быть любой допустимый код состояния, который начинается с 2xx, 4xx или 5xx, но не с 3xxx.

Необязательно

Значение Тип Описание
<response-headers> Объект JSON Один или несколько заголовков для включения в ответ
<response-body> Various Текст ответа, который может быть строкой, объектом JSON или даже двоичным содержимым из предыдущего действия

Пример

Это определение действия создает ответ на HTTP-запрос с заданным кодом статуса, текстом сообщения и заголовком сообщения.

"Response": {
   "type": "Response",
   "inputs": {
      "statusCode": 200,
      "body": {
         "ProductID": 0,
         "Description": "Organic Apples"
      },
      "headers": {
         "x-ms-date": "@utcnow()",
         "content-type": "application/json"
      }
   },
   "runAfter": {}
}

Ограничения

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

  • Рабочий процесс может использовать действие Ответ только тогда, когда он начинается с триггера запроса HTTP, это значит, что рабочий процесс должен запускаться HTTP-запросом.

  • Рабочий процесс может использовать действие Ответ в любом месте, кроме как внутри циклов Foreach, Until, включая последовательные циклы и параллельные ветви.

  • Первоначальный запрос получает ответ рабочего процесса только когда все действия, требуемые действием Ответ, завершены в пределах времени ожидания HTTP-запроса.

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

  • Когда рабочий процесс использует действие Ответ и синхронный шаблон ответа, он не может использовать команду splitOn в определении триггера, потому что эта команда создает несколько запусков. Проверьте этот случай, когда используется метод PUT, и если значение равно true, вернется ответ "Недопустимый запрос".

    В противном случае, если рабочий процесс использует команду splitOn и действие Ответ, рабочий процесс выполняется асинхронно и немедленно возвращает ответ "202 ACCEPTED".

  • Когда выполнение рабочего процесса достигает действия Ответ, но входящий запрос уже получил ответ, действие Ответ помечается как Failed (Сбой) из-за конфликта. И в результате выполнения приложения логики также отмечается состояние Failed (Сбой).

Выбор действия

Это действие создает массив с объектами JSON путем преобразования элементов из другого массива на основе указанного сопоставления. Выходной и исходный массив всегда имеет одинаковое количество элементов. Несмотря на то что невозможно изменить количество объектов в выходном массиве, можно добавлять или удалять свойства и их значения в этих объектах. Свойство select указывает по меньшей мере одну пару "ключ — значение", определяющую сопоставление для преобразования элементов в исходном массиве. Пара "ключ — значение" представляет свойство и его значение во всех объектах выходного массива.

"Select": {
   "type": "Select",
   "inputs": {
      "from": <array>,
      "select": { 
          "<key-name>": "<expression>",
          "<key-name>": "<expression>"        
      }
   },
   "runAfter": {}
},

Обязательный

Значение Тип Описание
<array>. Массив Массив или выражение, которое предоставляет исходные элементы. Убедитесь, что выражение заключено в двойные кавычки.

Примечание. Если исходный массив пуст, это действие создает пустой массив.

<key-name> Строка Имя свойства, назначенное в результате <expression>

Чтобы добавить новое свойство во всех объектах в выходном массиве, предоставьте <key-name> для этого свойства и объект <expression> для значения свойства.

Чтобы удалить свойство из всех объектов в массиве, опустите <key-name> для этого свойства.

<выражение> Строка Выражение, которое преобразует элемент в исходном массиве и присваивает результат для <key-name>

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

Пример

Это определение действия создает массив объектов JSON из массива целых чисел. Действие повторяется с исходным массивом, получает каждое целочисленное значение с помощью выражения @item() и присваивает каждому значению свойство "number" в каждом объекте JSON.

"Select": {
   "type": "Select",
   "inputs": {
      "from": [ 1, 2, 3 ],
      "select": { 
         "number": "@item()" 
      }
   },
   "runAfter": {}
},

Массив, который создает это действие.

[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]

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

"Compose": {
   "type": "Compose",
   "inputs": "@body('Select')",
   "runAfter": {
      "Select": [ "Succeeded" ]
   }
},

Затем можно использовать вывод из действия Создать в других действиях, например 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": {}
}

Обязательный

Значение Тип Описание
<CSV или HTML> Строка Формат таблицы, которую необходимо создать
<array>. Массив Массив или выражение, предоставляющее исходные элементы для таблицы

Примечание. Если исходный массив пуст, это действие создает пустую таблицу.

Необязательно

Чтобы задать или настроить заголовки столбцов и значения, используйте массив columns. Когда пары header-value имеют одинаковое имя заголовка, их значения отображаются в том же столбце под этим заголовком. В противном случае каждый уникальный заголовок определяет уникальный столбец.

Значение Тип Описание
<column-name> Строка Имя заголовка столбца
<column-value> Любое Значение в столбце

Пример 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, которую создает это действие:

ИдентификаторНазвание_продукта
0Apples
1Апельсины

Пример 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_IDDescription
0Органические яблоки
1Органические апельсины

Действие terminate

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

"Terminate": {
   "type": "Terminate",
   "inputs": {
       "runStatus": "<status>",
       "runError": {
            "code": "<error-code-or-name>",
            "message": "<error-message>"
       }
   },
   "runAfter": {}
}

Обязательный

Значение Тип Описание
<состояние> Строка Состояние для возврата запуска: Failed (Сбой), Cancelled (Отменено) или Succeeded (Успешно)

Необязательно

Свойства для объекта runStatus применяются только в том случае, если свойству runStatus присвоено состояние Failed (Сбой).

Значение Тип Описание
<error-code-or-name> Строка Код или имя ошибки
<error-message> Строка Сообщение или текст, описывающий ошибку и любые действия, которые пользователь приложения может предпринять

Пример

Это определение действия останавливает выполнение рабочего процесса, устанавливает статус запуска как Failed (Сбой) и возвращает состояние, код ошибки и сообщение об ошибке.

"Terminate": {
    "type": "Terminate",
    "inputs": {
        "runStatus": "Failed",
        "runError": {
            "code": "Unexpected response",
            "message": "The service received an unexpected response. Please try again."
        }
   },
   "runAfter": {}
}

Действие wait

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

Указанный интервал

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": <number-of-units>,
         "unit": "<interval>"
      }
   },
   "runAfter": {}
},

Указанное время

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "<date-time-stamp>"
      }
   },
   "runAfter": {}
},

Обязательный

Значение Тип Описание
<number-of-units> Целое Число единиц ожидания для действия Задержка
<interval> Строка Для действия Задержка период ожидания составляет: "секунда", "минута", "час", "день", "неделя", "месяц"
<date-time-stamp> Строка Дата и время возобновления исполнения для действия Задержка до. Для этого значения необходимо использовать дату и время в формате 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": {}
},

Действие бизнес-процесса

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

Модуль 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": {}
}

Обязательный

Значение Тип Описание
<nested-logic-app-name> Строка Имя приложения логики, которое требуется вызвать
<trigger-name> Строка Имя триггера вложенного приложения логики, которое необходимо вызвать
<Azure-subscription-ID> Строка Идентификатор подписки Azure вложенного приложения логики
<Azure-resource-group> Строка Группа ресурсов Azure вложенного приложения логики

Необязательно

Значение Тип Описание
<header-content> Объект JSON Все заголовки для отправки с вызовом
<body-content> Объект JSON Любое содержимое сообщения для отправки с вызовом

Выходные данные

Выходные данные этого действия различаются в зависимости от действия "Ответ" вложенного приложения логики. Если вложенное приложение логики не включает действие "Ответ", выходные данные будут пустыми.

Пример

После успешного завершения действия 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>"
}

Обязательный

Значение Тип Описание
<action-1...n> Строка Имена действий, выполняемых над каждым элементом массива
<action-definition-1...n> Объект JSON Определения действий, которые выполняются
<for-each-expression> Строка Выражение, которое ссылается на каждый элемент в указанном массиве

Необязательно

Значение Тип Описание
<count> Целое По умолчанию итерации цикла "for each" запускаются одновременно или параллельно до ограничения по умолчанию. Чтобы изменить это ограничение, задав новое значение <count>, см. раздел Изменение параллелизма цикла Foreach.
<operation-option> Строка Чтобы запустить цикл Foreach последовательно, а не параллельно, задайте <operation-option> для Sequential или <count> для 1, но не для обоих. Дополнительные сведения см. в разделе Последовательный запуск циклов Foreach.

Пример

Этот цикл Foreach отправляет электронное письмо для каждого элемента массива, содержащего вложения из входящего письма. Цикл отправляет электронное письмо, включая вложение, пользователю, который рассматривает вложение.

"For_each": {
   "type": "Foreach",
   "actions": {
      "Send_an_email": {
         "type": "ApiConnection",
         "inputs": {
            "body": {
               "Body": "@base64ToString(items('For_each')?['Content'])",
               "Subject": "Review attachment",
               "To": "Sophie.Owen@contoso.com"
                },
            "host": {
               "connection": {
                  "id": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {}
      }
   },
   "foreach": "@triggerBody()?['Attachments']",
   "runAfter": {}
}

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

@triggerBody()?['<array-name>']

Действие If

Это действие, которое является условным оператором, оценивает выражение, которое представляет условие и запускает другую ветвь, основанную на том, является ли условие истинным или ложным. Если условие истинное, ему будет присвоено состояние Succeeded (Успешно). Дополнительные сведения см. в разделе Создание условных операторов, которые управляют действиями в рабочих процессах Azure Logic Apps.

"Condition": {
   "type": "If",
   "expression": { "<condition>" },
   "actions": {
      "<action-1>": { "<action-definition>" }
   },
   "else": {
      "actions": {
        "<action-2>": { "<action-definition" }
      }
   },
   "runAfter": {}
}
Значение Тип Описание
<условие> Объект JSON Условие, которое может быть выражением, для оценки
<action-1> Объект JSON Действие выполнится когда <condition> будет истинное
<action-definition> Объект JSON Определение действия
<action-2> Объект JSON Действие выполнится когда <condition> будет ложным

Действия в объектах actions или else получают следующие статусы.

  • "Succeeded", если они запускаются и выполняются успешно;
  • "Failed", если они запускаются, но завершаются ошибкой;
  • "Skipped", если не запускается соответствующая ветвь.

Пример

Это условие указывает, что когда целочисленная переменная имеет значение больше нуля, рабочий процесс проверяет веб-сайт. Если переменная равна нулю или меньше, рабочий процесс проверяет другой веб-сайт.

"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 Результат
"expression": "@parameters('<hasSpecialAction>')" Только для логических выражений условие передается для любого истинного значения.

Чтобы преобразовать другие типы в логический, используйте следующие функции: empty() или equals().

"expression": "@greater(actions('<action>').output.value, parameters('<threshold>'))" Для сравнения функций действие выполняется только тогда, когда результат <action> больше значения <threshold>.
"expression": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less(actions('<same-action>').output.value, 100))" Для логических функций и создания вложенных логических выражений действие выполняется, когда результат <action> больше значения <threshold> или меньше 100.
"expression": "@equals(length(actions('<action>').outputs.errors), 0))" Можно использовать функции массива для проверки того, имеет ли массив какие-либо элементы. Действие выполняется, если массив errors пустой.

Действие scope

Логические группы этого действия в областях, которые получают свое состояние после завершения действий в той области. Затем можно использовать статус области, чтобы определить, выполняются ли другие действия. Дополнительные сведения см. в разделе Создание областей, которые выполняют действия рабочего процесса на основе состояния группы в 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": {}
      }
   }
}

Обязательный

Значение Тип Описание
<inner-action-1...n> Объект JSON Одно или несколько действий, которые выполняются в области
<action-inputs> Объект JSON Входные данные для каждого действия

Действие Переключение

Это действие, также известное как оператор 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": {}
}

Обязательный

Значение Тип Описание
<expression-object-or-token> Различается Выражение, объект JSON или маркер безопасности для оценки
<action-name> Строка Имя действия для запуска в случае соответствия
<action-definition> Объект JSON Определение действия для запуска в случае соответствия
<matching-value> Различается Значение для сравнения с результатом вычисления

Необязательно

Значение Тип Описание
<default-action-name> Строка Имя действия по умолчанию для запуска, если не существует подходящего случая
<default-action-definition> Объект JSON Определение действия по умолчанию для запуска, если не существует подходящего случая

Пример

Это определение действия оценивает, выбирает ли пользователь в ответ на письмо с запросом вариант "Утвердить" или "Отклонить". Исходя из этого выбора, действие Переключить запускает действия для случая сопоставления, который должен отправить другое электронное сообщение ответчику, но с разными формулировками в каждом случае.

"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": "Sophie.Owen@contoso.com"
               },
               "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": "Sophie.Owen@contoso.com"
               },
               "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": "Sophie.Owen@contoso.com"
            },
            "host": {
               "connection": {
                  "name": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {} 
      }
   },
   "runAfter": {
      "Send_approval_email": [ 
         "Succeeded"
      ]
   }
}

Действие Until

Это действие цикла содержит действия, которые выполняются, пока указанное условие имеет истинное значение. После завершения работы всех других действий на последнем этапе цикл проверяет условие. Можно включить несколько действий в объект "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": {}
}
Значение Тип Описание
<action-name> Строка Имя действия, которое необходимо выполнить внутри цикла
<action-type> Строка Тип действия, которое необходимо запустить
<action-inputs> Various Входные данные для выполнения действия
<условие> Строка Условие или выражение для оценки после всех действий в завершении цикла
<loop-count> Целое Предел максимального количества циклов, которое может выполнить действие. Дополнительные сведения о предельном и максимальном предельном значениях по умолчанию см. в разделе Ограничения и настройка Azure Logic Apps.
<loop-timeout> Строка Предел времени работы цикла, в течение которого цикл может работать. Значение timeout по умолчанию равно PT1H, которое требует формат ISO 8601.

Примечание.

Если выражение зависит от выходных данных любого действия в цикле "Until", убедитесь, что готовы принять во внимание все сбои, которые могут произойти во результате выполнения.

Пример

Это определение действия цикла отправляет 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 в триггер или определение действия.

Свойство Type Описание Триггер или действие
runtimeConfiguration.concurrency.runs Целое Измените предел по умолчанию для количества экземпляров рабочего процесса, которые могут выполняться одновременно или в параллельном режиме. Изменение данного значения поможет ограничить количество запросов, которые получают серверные системы.

Параметр свойства runs, равный 1, работает так же, как параметр свойства operationOptions, равный SingleInstance. Можно установить любое свойство, но не оба сразу.

Дополнительные сведения об изменении предела по умолчанию см. в раздел об изменении параллелизма триггера или о последовательном запуске экземпляров.

Все триггеры
runtimeConfiguration.concurrency.maximumWaitingRuns Целое Измените предел по умолчанию для количества экземпляров рабочего процесса, ожидающих выполнения при достижении приложением логики максимального числа параллельных экземпляров.

Чтобы изменить предел по умолчанию, см. раздел Изменение предела ожидающих запусков.

Все триггеры
runtimeConfiguration.concurrency.repetitions Целое Измените предел по умолчанию для количества итераций цикла "For each", которые могут выполняться одновременно или в параллельном режиме.

Параметр свойства repetitions, равный 1, работает так же, как параметр свойства operationOptions, равный SingleInstance. Можно установить любое свойство, но не оба сразу.

Дополнительные сведения об изменении предела по умолчанию см. в разделе Изменение параллелизма цикла Foreach или Последовательный запуск циклов Foreach.

Действие:

Foreach

runtimeConfiguration.paginationPolicy.minimumItemCount Целое Для определенных действий, которые поддерживают и имеют включенную разбивку на страницы, это значение указывает минимальное число получаемых результатов.

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

Действие: различные действия
runtimeConfiguration.secureData.properties Массив Во многих триггерах и действиях данные параметры существуют для защиты в журнале выполнения приложения логики входных данных или выходных данных, либо и того, и другого.

Дополнительные сведения о защите этих данных см. в разделе Скрытие входных и выходных данных из журнала выполнения.

Большинство триггеров и действий
runtimeConfiguration.staticResult Объект JSON Для действий, поддерживающих и имеющих включенный статический параметр результата , staticResult объект имеет следующие атрибуты:

- name, который ссылается на имя определения статического результата текущего действия, отображающегося внутри атрибута staticResults в атрибуте definition рабочего процесса приложения логики. Дополнительные сведения см. в разделе Статические результаты — справочник по схеме для языка определения рабочего процесса.

- staticResultOptions, который указывает, являются ли статические результаты текущего действия Enabled, или нет.

Сведения о включении статических результатов см. в статье Тестирование приложений логики с помощью макетных данных путем настройки статических результатов

Действие: различные действия

Варианты операций

Можно изменить поведение по умолчанию для триггеров и действий со свойством operationOptions в триггере или определении действия.

Параметр операции Тип Описание Триггер или действие
DisableAsyncPattern Строка Запускайте действия на основе HTTP синхронно, а не асинхронно.

Чтобы задать этот параметр, см. в разделе Синхронное выполнение действия.

Действия:

Api Подключение ion,
HTTP,
Ответ

IncludeAuthorizationHeadersInOutputs Строка Для приложений логики, которые позволяют OAuth с идентификатором Microsoft Entra id авторизовать доступ к конечной точке триггера на основе запросов, включите Authorization заголовок из маркера доступа OAuth в выходные данные триггера. Дополнительные сведения см. в разделе Включение заголовка "Authorization" в выходные данные триггера запроса. Триггеры:

Запрос,
webhook HTTP

Sequential Строка Запускайте итерации цикла Foreach по одной, а не одновременно параллельно.

Этот параметр работает так же, как параметр свойства runtimeConfiguration.concurrency.repetitions, равный 1. Можно установить любое свойство, но не оба сразу.

Дополнительные сведения о задании этого параметра см. в разделе Последовательный запуск циклов Foreach.

Действие:

Foreach

SingleInstance Строка Запустите триггер для каждого экземпляра приложения логики последовательно и дождитесь завершения предыдущего активного запуска, прежде чем запускать следующий экземпляр приложения логики.

Этот параметр работает так же, как параметр свойства runtimeConfiguration.concurrency.runs, равный 1. Можно установить любое свойство, но не оба сразу.

Чтобы задать этот параметр, см. раздел Последовательная активизация экземпляров.

Все триггеры
SuppressWorkflowHeaders Строка Не отправляйте заголовки метаданных x-ms-* в исходящих запросах. По умолчанию служба Azure Logic Apps включает дополнительные заголовки метаданных с префиксом x-ms- в имени заголовка, который является частью исходящих запросов. Но некоторые устаревшие службы не принимают запросы с дополнительными неизвестными заголовками, что приводит к сбою запросов. Действия:

HTTP,
Функция,
APIManagement

SuppressWorkflowHeadersOnResponse Строка Не отправляйте заголовки метаданных x-ms-* в ответах на исходящие запросы триггеров. По умолчанию служба Azure Logic Apps отправляет ответы на входящие запросы, которые включают дополнительные заголовки метаданных с префиксом x-ms- в имени заголовка. Но некоторые устаревшие службы не принимают запросы или ответы с дополнительными неизвестными заголовками, что приводит к сбою запросов. Триггеры:

Запрос,
webhook HTTP

Изменение параллелизма триггера

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

При включении управления параллелизмом триггеров экземпляры запускаются параллельно до ограничения по умолчанию. Чтобы изменить предел по умолчанию, можно использовать либо редактор просмотра кода, либо Конструктор Logic Apps, поскольку изменение параметра параллелизма с помощью конструктора добавляет или обновляет свойство runtimeConfiguration.concurrency.runs в базовом определении триггера и наоборот. Это свойство определяет максимальное число экземпляров рабочего процесса, которые могут выполняться параллельно.

Прежде чем включить параллелизм для триггера, ознакомьтесь со следующими рекомендациями.

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

  • Если максимальное число параллельных запусков триггера достигает максимальной степени параллелизма, последующие запуски триггера могут вызвать регулирование или ошибки "429 — слишком много запросов". Если вы настроили политику повторных попыток, которая обрабатывает ошибки 429, триггер может вызвать цикл повтора и регулирования, что приведет к длительным задержкам при обработке новых запросов триггеров.

  • Если включен параллелизм триггеров, ограничение SplitOn для массивов разбивки значительно сокращается. Если число элементов превышает это ограничение, функция SplitOn отключается.

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

    • Чтобы прервать это состояние, отмените самые ранние из еще выполняющихся экземпляров.

      1. В меню приложения логики выберите Обзор.

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

        Select earliest running instance

        Совет

        Чтобы просмотреть только те экземпляры, которые еще работают, откройте список Все и выберите пункт Выполняется.

      3. В разделе Выполнение приложения логики щелкните Отменить выполнение.

        Find earliest running instance

    • Чтобы обойти эту возможность, добавьте время ожидания для любого действия, которое может содержать эти запуски. Если вы работаете в редакторе кода, см. раздел Изменение длительности асинхронного выполнения. В другом случае, если вы используете конструктор, выполните следующие действия.

      1. В рабочем процессе приложения логики выберите действие, в которое нужно добавить время ожидания. В правом верхнем углу окна действия нажмите кнопку с многоточием (), а затем выберите Параметры.

        Open action settings

      2. В разделе Время ожиданияукажите длительность времени ожидания в формате ISO 8601.

        Specify timeout duration

  • Для последовательного запуска приложения логики задайте для параллелизма триггера значение 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
      }
   }
}

Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.

Изменение в Конструкторе Logic Apps

  1. В правом верхнем углу окна действия нажмите кнопку с многоточием (), а затем выберите Параметры.

  2. В разделе Управление параллелизмом установите для параметра Ограничение значение Вкл.

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

Изменение параллелизма цикла Foreach

По умолчанию итерации цикла "For each" запускаются одновременно или параллельно. Это означает, что каждая итерация начнет выполняться до завершения предыдущей итерации. Однако количество одновременно выполняемых экземпляров имеет ограничение по умолчанию. Если количество параллельно выполняющихся итераций достигает этого предела, все остальные итерации должны ожидать выполнения.

Чтобы изменить предел по умолчанию, можно использовать либо редактор просмотра кода, либо Конструктор Logic Apps, поскольку изменение параметра параллелизма с помощью конструктора добавляет или обновляет свойство runtimeConfiguration.concurrency.repetitions в базовом определении действия Foreach и наоборот. Это свойство определяет максимальное число итераций, которые могут выполняться параллельно.

Примечание.

Если вы установите действие 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
      }
   }
}

Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.

Изменение в Конструкторе Logic Apps

  1. В правом верхнем углу в окне действия For each нажмите кнопку с многоточием (...), а затем выберите Параметры.

  2. В разделе Управление параллелизмом для параметра Управление параллелизмом задайте значение Вкл.

  3. Перетащите ползунок Степень параллелизма к необходимому значению. Чтобы выполнять приложение логики в последовательном режиме, перетащите ползунок до значения 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
      }
   }
}

Дополнительные сведения см. в разделе Настройки конфигурации среды выполнения.

Последовательная активация экземпляров

Чтобы запустить каждый экземпляр приложения логики только после завершения предыдущего экземпляра, установите триггер в значение последовательного запуска. Вы можете использовать либо редактор просмотра кода, либо конструктор Logic Apps, поскольку изменение параметра параллелизма с помощью конструктора также добавляет или обновляет свойство runtimeConfiguration.concurrency.runs в базовом определении триггера и наоборот.

Примечание.

Если вы настроите триггер для последовательного запуска с помощью конструктора или редактора представления кода, не устанавливайте свойство operationOptions триггера равное Sequential в редакторе представления кода. В противном случае возникнет ошибка проверки.

Изменение в представлении кода

В определении триггера задайте одно из этих свойств, но не оба.

Задайте для свойства runtimeConfiguration.concurrency.runs значение 1.

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 1
      }
   }
}

–или–

Задайте для свойства operationOptions значение SingleInstance.

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "operationOptions": "SingleInstance"
}

Дополнительные сведения см. в разделах Настройки конфигурации среды выполнения и Настройки операций.

Изменение в Конструкторе Logic Apps

  1. В правом верхнем углу окна действия нажмите кнопку с многоточием (), а затем выберите Параметры.

  2. В разделе Управление параллелизмом установите для параметра Ограничение значение Вкл.

  3. Перетащите ползунок Степень параллелизма на номер 1.

Последовательный запуск циклов Foreach

Чтобы запустить итерацию цикла Foreach только после завершения предыдущей итерации, настройте последовательное выполнение каждого действия. Вы можете использовать либо редактор просмотра кода, либо конструктор Logic Apps, поскольку изменение действия параллелизма с помощью конструктора также добавляет или обновляет свойство runtimeConfiguration.concurrency.repetitions в базовом определении действия и наоборот.

Примечание.

Если вы настроите последовательное выполнение действия Foreach для запуска с помощью конструктора или редактора представления кода, не устанавливайте свойство operationOptions действия равным Sequential в редакторе представления кода. В противном случае возникнет ошибка проверки.

Изменение в представлении кода

В определении действия задайте один из этих свойств, но не оба.

Задайте для свойства runtimeConfiguration.concurrency.repetitions значение 1.

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 1
      }
   }
}

–или–

Задайте для свойства operationOptions значение Sequential.

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "operationOptions": "Sequential"
}

Дополнительные сведения см. в разделах Настройки конфигурации среды выполнения и Настройки операций.

Изменение в Конструкторе Logic Apps

  1. В правом верхнем углу в окне действия For each нажмите кнопку с многоточием (...), а затем выберите Параметры.

  2. В разделе Управление параллелизмом для параметра Управление параллелизмом задайте значение Вкл.

  3. Перетащите ползунок Степень параллелизма на номер 1.

Выполнение действий в шаблоне синхронной операции

По умолчанию действия HTTP Action и APIConnection в Azure Logic Apps соответствуют стандартному шаблону асинхронных операций, а действие "Ответ" (Response) соответствует шаблону синхронных операций. Асинхронная модель указывает, что после того, как действие HTTP вызовет или отправит запрос в конечную точку, службу, систему или API, получатель немедленно возвращает ответ 202 ACCEPTED. Этот код подтверждает, что получатель принял запрос, но еще не завершил обработку. Ответ может включать заголовок location, указывающий URL-адрес и идентификатор обновления, который вызывающая сторона может использовать для непрерывного опроса или проверки состояния асинхронного запроса до тех пор, пока получатель не прекратит обработку и не вернет сообщение об успешном завершении 200 OK или другой ответ, отличный от 202. Дополнительные сведения см. в разделе Асинхронная интеграция микрослужб обеспечивает автономность микрослужб.

  • В конструкторе приложений логики действия HTTP, APIConnection и Response имеют параметр Асинхронная модель. Этот параметр указывает, что вызывающая сторона не ждет завершения обработки и может перейти к следующему действию, но продолжит проверку состояния, пока обработка не будет остановлена. При отключенном параметре вызывающая сторона будет ожидать завершения обработки перед переходом к следующему действию. Чтобы найти этот параметр, выполните следующие шаги.

    1. В строке заголовка действия HTTP нажмите кнопку с многоточием (...), чтобы открыть параметры действия.

    2. Найдите параметр Асинхронная модель.

  • В определении базовой нотации объекта JavaScript (JSON) действия HTTP действия и APIConnection косвенным образом соответствуют модели асинхронной операции.

В некоторых случаях может потребоваться, чтобы действие следовало синхронной модели. Например, при использовании действия HTTP может потребоваться:

В этих случаях можно запустить синхронное выполнение действий с помощью следующих параметров:

Выключение параметра Асинхронная модель

  1. В конструкторе приложений логики в строке заголовка действия HTTP нажмите кнопку с многоточием (...), чтобы открыть параметры действия.

  2. Найдите параметр Асинхронная модель, установите для него значение Выкл., если он включен, и нажмите кнопку Готово.

    Turn off

Отключение асинхронной модели в определении JSON для действия

В базовом определении JSON действия добавьте и установите свойство "operationOptions" в значение "DisableAsyncPattern" в секции действия "inputs", например:

"<some-long-running-action>": {
   "type": "Http",
   "inputs": { "<action-inputs>" },
   "operationOptions": "DisableAsyncPattern",
   "runAfter": {}
}

Проверка подлинности триггеров и действий

Конечные точки HTTP и HTTPS поддерживают различные виды проверки подлинности. В зависимости от триггера или действия, используемого для выполнения исходящих вызовов или запросов, обращающихся к этим конечным точкам, у вас есть выбор из диапазона различных типов проверки подлинности. Дополнительные сведения см. в разделе Добавление проверки подлинности в исходящие вызовы далее в этой статье.

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