Эта документац ия была автоматически переведена ИИ.
Цикл
Workflow: Loop nodeCommunity Edition+Введение
Цикл — это синтаксическая конструкция, аналогичная for/while/forEach в языках программирования. Вы можете использовать узел цикла, когда необходимо повторить определённые операции заданное количество раз или для элементов какой-либо коллекции данных (массива).
Установка
Это встроенный плагин, его установка не требуется.
Создание узла
В интерфейсе настройки рабочего процесса нажмите кнопку с плюсом («+») в потоке, чтобы добавить узел «Цикл»:

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

Объект цикла
Цикл по-разному обрабатывает различные типы данных объекта цикла:
-
Массив: Это наиболее распространённый случай. Обычно вы можете выбрать переменную из контекста рабочего процесса, например, несколько результатов данных из узла запроса или предварительно загруженные данные отношений «один-ко-многим». Если выбран массив, узел цикла будет перебирать каждый элемент массива, присваивая текущий элемент локальной переменной в контексте цикла для каждой итерации.
-
Число: Если выбранная переменная является числом, оно будет использоваться как количество итераций. Значение должно быть положительным целым числом; отрицательные числа не будут запускать цикл, а дробная часть числа будет игнорироваться. Индекс счётчика цикла в локальной переменной также является значением объ екта цикла. Это значение начинается с 0. Например, если число объекта цикла равно 5, то объект и индекс в каждой итерации будут последовательно: 0, 1, 2, 3, 4.
-
Строка: Если выбранная переменная является строкой, её длина будет использоваться как количество итераций, при этом каждый символ строки будет обрабатываться по индексу.
-
Другие: Значения других типов (включая объекты) рассматриваются как объекты цикла для однократной обработки и будут выполняться только один раз. Обычно в таких случаях использование цикла не требуется.
Помимо выбора переменной, вы также можете напрямую вводить константы для числовых и строковых типов. Например, ввод 5 (числовой тип) приведёт к выполнению узла цикла 5 раз. Ввод abc (строковый тип) приведёт к выполнению узла цикла 3 раза, обрабатывая символы a, b и c соответственно. В инструменте выбора переменных выберите желаемый тип для константы.
Условие цикла
Начиная с версии v1.4.0-beta, добавлены опции, связанные с условиями цикла. Вы можете включить условия цикла в настройках узла.
Условие
Аналогично настройке условий в узле «Условие», вы можете комбинировать конфигурации и использовать переменные из текущего цикла, такие как объект цикла, индекс цикла и т. д.
Время проверки
Подобно конструкциям while и do/while в языках программирования, вы можете выбрать, когда проверять условие: до начала каждой итерации цикла или после её завершения. Проверка условия после итерации позволяет сначала выполнить другие узлы внутри тела цикла, а затем проверить условие.
При невыполнении условия
Подобно операторам break и continue в языках программирования, вы можете выбрать выход из цикла или переход к следующей итерации.
Обработка ошибок во внутренних узлах цикла
Начиная с версии v1.4.0-beta, если узел внутри цикла не выполняется (из-за несоблюдения условий, ошибок и т. д.), вы можете настроить дальнейший ход рабочего процесса. Поддерживаются три способа обработки:
- Выход из рабочего процесса (аналогично
throwв программировании) - Выход из цикла и продолжение рабочего процесса (аналогично
breakв программировании) - Переход к следующему объекту цикла (аналогично
continueв программировании)
По умолчанию выбрано «Выход из рабочего процесса», но вы можете изменить это по мере необходимости.
Пример
Например, при оформлении заказа необходимо проверить наличие каждого товара в заказе. Если товара достаточно на складе, его количество уменьшается; в противном случае товар в детализации заказа помечается как недействительный.
-
Создайте три коллекции: Товары <-(1:m)-- Детали заказа --(m:1)-> Заказы. Модель данных выглядит следующим образом:
Коллекция «Заказы»
Коллекция «Детали заказа»
Коллекция «Товары»
-
Создайте рабочий процесс. В качестве триггера выберите «Событие коллекции» и укажите коллекцию «Заказы» для срабатывания «При добавлении записи». Также необходимо настроить предварительную загрузку данных отношений для коллекции «Детали заказа» и коллекции «Товары» в рамках этих деталей:

-
Создайте узел цикла и выберите объект цикла как «Данные триггера / Детали заказа», что означает обработку каждой записи в коллекции «Детали заказа»:

-
Внутри узла цикла создайте узел «Условие», чтобы проверить, достаточно ли товара на складе:

-
Если товара достаточно, в ветке «Да» создайте узел «Вычисление» и узел «Обновить запись», чтобы обновить запись соответствующего товара с рассчитанным уменьшенным остатком:


-
В противном случае, в ветке «Нет» создайте узел «Обновить запись», чтобы обновить статус детализации заказа на «недействительный»:

Общая структура рабочего процесса показана ниже:

После настройки и активации этого

