Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: Azure Logic Apps (Consumption + Standard)
Чтобы повторять действия в рабочем процессе приложения логики, можно добавить в него цикл For each или Until в зависимости от требований сценария.
Примечание.
Ищете документацию по циклам в Power Automate? См. Использование циклов.
В зависимости от варианта использования можно выбрать один из следующих типов действий цикла:
Чтобы повторить одно или несколько действий для элементов в массиве или коллекции, добавьте действие Для каждого в рабочий процесс.
Кроме того, если у вас есть триггер, который может обрабатывать массивы, и вы хотите запустить экземпляр рабочего процесса для каждого элемента массива, можно разделить массив, используя свойство триггера Split on.
Чтобы повторить одно или несколько действий до тех пор, пока условие не будет выполнено или не изменится определенное состояние, добавьте действие "Пока" в рабочий процесс.
Рабочий процесс сначала запускает все действия внутри цикла, а затем проверяет условие или состояние. Если условие выполнено, цикл прекращается. В противном случае он повторяется. Сведения о количестве циклов Until по умолчанию и максимальном количестве, которые может содержать рабочий процесс, см. в разделе Ограничения параллелизма, циклов и разделения на пакеты.
Предварительные требования
Учетная запись и подписка Azure. Если у вас нет ее, вы можете зарегистрироваться для получения бесплатной учетной записи Azure.
Ресурс приложения логики, где можно создать и изменить рабочий процесс. См. раздел "Что такое Azure Logic Apps".
Ресурс приложения логики и рабочий процесс, в котором требуется повторить действие в цикле и триггер, который запускает рабочий процесс.
Прежде чем добавить действие цикла, рабочий процесс должен начинаться с триггера в качестве первого шага. Дополнительные сведения см. в статье "Добавление триггера или действия для создания рабочего процесса".
Следующие действия используют портал Azure, но с соответствующим расширением Azure Logic Apps можно также использовать следующие средства для создания рабочих процессов приложения логики:
- Рабочие процессы потребления: Visual Studio Code
- Стандартные рабочие процессы: Visual Studio Code
Некоторые шаги немного отличаются в зависимости от того, есть ли у вас рабочий процесс "Потребление" или "Стандартный".
Для каждого
Действие Для каждого работает только с массивами. Этот цикл повторяет одно или несколько действий для каждого элемента в массиве. Ознакомьтесь со следующими рекомендациями по каждому действию:
Действие For each может обрабатывать ограниченное количество элементов массива. Сведения об этом ограничении см. в разделе Ограничения параллелизма, зацикливания и дегруппировки.
По умолчанию циклы или итерации в каждом действии выполняются одновременно параллельно.
Это поведение отличается от цикла «Применить к каждому» в Power Automate, в котором итерации выполняются по одной, то есть последовательно. Если для вашего сценария использования требуется последовательная обработка, можно настроить выполнение итераций For each по одной. Например, если вы хотите приостановить следующую итерацию в каждом действии с помощью действия "Задержка", необходимо настроить каждую итерацию для последовательного выполнения.
В качестве исключения из поведения по умолчанию итерации вложенного действия For each всегда выполняются последовательно, а не параллельно. Чтобы выполнять действия одновременно для элементов массива во вложенном действии For each, создайте и вызовите дочерний рабочий процесс.
Чтобы получить прогнозируемые результаты из операций с переменными во время каждой итерации, выполните итерации последовательно. Например, когда завершается параллельно выполняемая итерация, операции Увеличить переменную, Уменьшить переменную и Добавить к переменной дают предсказуемые результаты. Однако во время каждой итерации в параллельно выполняющемся цикле эти операции могут возвращать непредсказуемые результаты.
Действия в цикле For each используют функцию
item()function для обращения к каждому элементу массива и его обработки. Если указать данные, которые не в массиве, рабочий процесс завершается сбоем.
В следующем примере рабочий процесс отправляет ежедневную сводку по RSS-каналу веб-сайта. Рабочий процесс использует действие Для каждого, которое отправляет электронное письмо для каждого нового элемента.
На портале Azure создайте рабочий процесс приложения логики, выполнив следующие действия в указанном порядке:
Триггер RSS с именем При публикации элемента ленты
Выполните следующие общие действия, чтобы добавить триггер в рабочий процесс приложения логики Consumption или Standard.
Действие Outlook.com или Office 365 Outlook с именем "Отправить сообщение электронной почты"
Выполните следующие общие действия, чтобы добавить действие в рабочий процесс приложения логики Consumption или Standard.
Выполните те же основные действия, чтобы добавить действие For each между триггером RSS и действием Отправить сообщение электронной почты в рабочем процессе.
Теперь создайте цикл:
В разделе "Для каждого элемента" выберите внутри поля "Выбор выходных данных из предыдущих шагов ", а затем щелкните значок молнии.
В открывающемся списке динамического содержимого в разделе "При публикации элемента веб-канала" выберите ссылки веб-канала, которые являются выходными данными массива из триггера RSS.
Примечание.
Если выходные данные «Ссылки канала» не появляются, рядом с названием раздела триггера выберите Подробнее. В списке динамического содержимого можно выбрать только выходные данные из предыдущих шагов.
После завершения выводятся выходные данные выбранного массива, как показано в следующем примере:
Чтобы выполнить существующее действие для каждого элемента в массиве, перетащите действие Send an email в цикл For each.
Теперь рабочий процесс выглядит следующим образом:
Закончив работу, сохраните свой рабочий процесс.
Чтобы вручную протестировать рабочий процесс, на панели инструментов конструктора нажмите кнопку "Выполнить".>
Для каждого определения действия (JSON)
Если вы работаете в представлении кода, можно определить действие For_each в JSON-определении вашего рабочего процесса, например:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": {
"type": "ApiConnection",
"inputs": {
"body": {
"Body": "@{item()}",
"Subject": "New CNN post @{triggerBody()?['publishDate']}",
"To": "me@contoso.com"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {}
}
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach"
}
},
Для каждого: выполнять последовательно
По умолчанию итерации в каждом действии выполняются одновременно параллельно. Однако если у вас есть вложенные циклы или переменные внутри циклов, в которых вы ожидаете прогнозируемые результаты, необходимо выполнять эти циклы одновременно.
В конструкторе выберите " Для каждого действия", чтобы открыть область сведений, а затем выберите "Параметры".
В разделе «Управление параллелизмом» измените значение параметра с «Выкл.» на «Вкл.».
Переместите ползунок Степень параллелизма на 1.
Для каждого определения действия (JSON): последовательное выполнение
Если вы работаете в представлении кода с For_each действием в определении JSON рабочего процесса, добавьте operationOptions параметр и задайте для параметра значение Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
До
Действие "Пока " выполняется и повторяет одно или несколько действий до тех пор, пока не будет выполнено требуемое условие. Если условие выполнено, цикл прекращается. В противном случае он повторяется. Сведения об ограничениях по умолчанию и максимальных ограничениях на количество действий или итераций Until см. в разделе Ограничения параллелизма, циклов и разделения на пакеты.
В следующем списке приведены некоторые распространённые сценарии, в которых можно использовать действие Until:
Вызов конечной точки до получения нужного ответа.
Создание записи в базе данных. Подождите, пока определенное поле этой записи не будет утверждено. Продолжайте обработку.
По умолчанию действие "Пока " завершается успешно или завершается сбоем следующим образом:
Цикл "До " завершается успешно, если все действия внутри него выполнены, и если достигнуто ограничение цикла, основываясь на поведении запуска после завершения.
Если все действия в последней итерации цикла "Пока" будут выполнены успешно, весь цикл "Пока" помечается как "Успешно".
Если любое действие завершается сбоем в последней итерации цикла "Пока ", весь цикл "Пока " помечается как "Сбой".
Если любое действие завершается ошибкой в итерации, отличной от последней итерации, следующая итерация продолжает выполняться, и все действие "Пока " не помечается как "Сбой".
Чтобы вместо этого действие завершалось сбоем, измените поведение по умолчанию в JSON-определении цикла, добавив параметр с именем
operationOptionsи установив значениеFailWhenLimitsReached, например:"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable_8": [ "Succeeded" ] }, "type": "Until" }
В следующем примере рабочего процесса, начиная с 8:00 утра каждый день, действие "Пока " увеличивает переменную, пока значение переменной не равно 10. Затем рабочий процесс отправляет сообщение электронной почты, которое подтверждает текущее значение. В этом примере используется Office 365 Outlook, но вы можете использовать любой поставщик электронной почты, поддерживаемый Azure Logic Apps. Если вы используете другую учетную запись электронной почты, общие действия остаются неизменными, но выглядят немного иначе.
На портале Azure создайте ресурс приложения логики с пустым рабочим процессом. Ознакомьтесь с более ранней процедурой.
В конструкторе выполните общие действия, чтобы добавить встроенный триггер Schedule с именем "Повторение " в рабочий процесс "Потребление " или "Стандартный ".
В триггере повторения укажите интервал, частоту и время запуска триггера.
Параметр Значение Интервал 1 Периодичность день В эти часы 8 В эти минуты 00 В эти часы и В эти минуты появляются после того, как для Частота задано значение День.
После завершения триггер повторения выглядит следующим образом:
Под триггером выполните следующие общие шаги, чтобы добавить встроенное действие Variables с именем Инициализировать переменные в рабочий процесс приложения логики Consumption или Standard.
В действии "Инициализировать переменные" укажите следующие значения:
Параметр Значение Описание Имя Лимит Имя переменной Тип Целое число Тип данных переменной Ценность 0 Начальное значение переменной Под действием «Инициализировать переменные» выполните следующие общие шаги, чтобы добавить встроенное действие «Управление» с именем «До тех пор, пока» в рабочий процесс приложения логики Consumption или Standard.
В действии "Пока" укажите следующие значения, чтобы настроить условие остановки для цикла.
Щелкните внутри поля Loop Until и выберите значок молнии, чтобы открыть список динамического содержимого.
В списке в разделе "Переменные" выберите переменную с именем Limit.
В разделе Count введите 10 в качестве значения сравнения.
В действии Until выберите +>Добавить действие.
Выполните следующие общие действия, чтобы добавить встроенное действие Переменные с именем Увеличить переменную в действие До выполнения условия в рабочем процессе приложения логики типа Потребление или Стандартный.
В действии добавочной переменной укажите следующие значения, чтобы увеличить значение переменнойLimit на 1:
Параметр Значение Лимит Выберите переменную Limit. Ценность 1 За пределами действия "Пока " выполните следующие общие действия, чтобы добавить действие, которое отправляет сообщение электронной почты в рабочем процессе приложения логики "Потребление " или "Стандартный ".
В этом примере продолжается действие Office 365 Outlook с именем "Отправить сообщение электронной почты".
В действии электронной почты укажите следующие значения:
Параметр Значение Описание Кому < адрес электронной почты@домен> Адрес электронной почты получателя. Для тестировании используйте свой адрес электронной почты. Тема Текущее значение переменной Limit:Limit Тема электронной почты. В этом примере убедитесь, что вы включили переменную Limit , чтобы убедиться, что текущее значение соответствует указанному условию:
1. Выберите внутри поля "Тема ", а затем щелкните значок молнии.
2. В открывающемся списке динамического содержимого рядом с заголовком раздела "Переменные " выберите "Дополнительные сведения".
3. Выберите предел.Основной текст < содержимое электронной почты> Содержимое сообщения электронной почты, которое вы хотите отправить. В этом примере введите любой нужный текст. Когда вы закончите, действие с электронной почтой будет выглядеть примерно так, как в следующем примере:
Сохраните рабочий процесс.
Тестирование рабочего процесса
Чтобы вручную протестировать рабочий процесс приложения логики:
- На панели инструментов в конструкторе в меню Запуск выберите Запуск.
После запуска рабочего процесса вы получите сообщение электронной почты с указанным содержимым:
Предотвращение бесконечных циклов
Действие Until останавливает выполнение на основе необязательных параметров Count и Timeout. Убедитесь, что эти значения параметров заданы соответствующим образом:
| Параметр | Описание |
|---|---|
| Численность | Максимальное количество итераций, выполняемых до завершения цикла. Сведения о количестве действий Until в рабочем процессе по умолчанию и о его максимальном значении см. в разделе Ограничения параллелизма, циклов и разделения пакетов. |
| Время ожидания | Максимальное время выполнения действия Until, с учётом всех итераций, до выхода из цикла. Это значение указывается в формате ISO 8601 и вычисляется для каждой итерации. Если любое действие в цикле занимает больше времени ожидания, текущая итерация не останавливается. Однако следующая итерация не запускается, так как выполняется условие ограничения времени ожидания. Сведения о значениях по умолчанию и максимальных пределах для параметра Timeout см. в статье Ограничения параллелизма, зацикливания и разбиения на отдельные сообщения. |
Просмотр истории выполнения итераций цикла "До тех пор, пока"
При просмотре журнала выполнения для рабочего процесса, включающего цикл "До" , подробное состояние и результаты действий внутри цикла доступны только после завершения всего цикла. Хотя цикл "Пока " по-прежнему выполняет свои итерации, действие цикла показывает состояние "Выполнение ", но невозможно развернуть или пройти по результатам отдельной итерации, пока цикл не завершится.
Цикл завершается, когда выполняется одно из следующих условий:
- Указанное выражение оценивается как true.
- Цикл достигает ограничения Count.
- Цикл достигает предела времени ожидания .
После завершения цикла можно выбрать действие "Пока " в журнале выполнения, чтобы просмотреть каждую итерацию и состояние дочерних действий в этой итерации.
Примечание.
Если цикл "Пока " выполняется в течение длительного периода, необходимо дождаться полного завершения цикла, прежде чем можно проверить журнал выполнения для результатов из отдельных итераций. Чтобы отслеживать длительные циклы выполнения, рассмотрите возможность добавления действий ведения журнала или уведомлений в цикл, которые независимо генерируют состояние, например, отправляя сообщение в очередь или обновляя переменную, которую может читать параллельная ветвь.
Определение "until" (JSON)
Если вы работаете в режиме просмотра кода, можно определить действие Until в JSON-определении вашего рабочего процесса, например:
"actions": {
"Initialize_variable": {
// Definition for initialize variable action
},
"Send_an_email": {
// Definition for send email action
},
"Until": {
"type": "Until",
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Limit",
"value": 1
},
"runAfter": {}
}
},
"expression": "@equals(variables('Limit'), 10)",
// To prevent endless loops, an "Until" loop
// includes these default limits that stop the loop.
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
}
}
}
В этом примере цикл "Пока" вызывает конечную точку HTTP, которая создает ресурс. Цикл останавливается, когда тело HTTP-ответа возвращается со статусом Completed. Чтобы предотвратить бесконечные циклы, цикл также останавливается, если произойдет любое из следующих условий:
Цикл выполнялся 10 раз, как указано в атрибуте
count. Значение по умолчанию — 60 раз.Цикл выполнялся в течение двух часов, как указано в атрибуте
timeoutв формате ISO 8601. Значение по умолчанию — один час.
"actions": {
"myUntilLoopName": {
"type": "Until",
"actions": {
"Create_new_resource": {
"type": "Http",
"inputs": {
"body": {
"resourceId": "@triggerBody()"
},
"url": "https://domain.com/provisionResource/create-resource"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(body('Create_new_resource'), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}