logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo
Рабочие процессы
Обзор
Быстрый старт

Триггер

Обзор
Событие таблицы данных
Задача по расписанию
Событие перед действием
Событие после действия
Пользовательское событие действия
Согласование
Webhook

Узел

Обзор

Искусственный интеллект (AI)

Большая языковая модель (LLM)

Управление потоком

Условие
Ветвление по условиям
Цикл
Переменная
Параллельное ветвление
Вызов рабочего процесса
Вывод потока
Сопоставление переменных JSON
Задержка
Завершение

Вычисление

Вычисление
Вычисление даты
Вычисление JSON

Операции с данными

Добавление данных
Обновление данных
Запрос данных
Удаление данных
Операция SQL

Ручная обработка

Ручная обработка
Согласование
Копия (CC)

Расширенные типы

HTTP-запрос
Скрипт JavaScript
Уведомление
Отправка email
Ответ
Сообщение ответа
Переменная
Журнал выполнения
Управление версиями
Расширенные параметры

Разработка расширений

Обзор
Расширенные типы триггеров
Расширенные типы узлов
Справочник API
Previous PageВетвление по условиям
Next PageПеременная
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Цикл

This feature is provided by the plugin «Рабочий процесс: Узел цикла»

#Введение

Цикл — это синтаксическая конструкция, аналогичная for/while/forEach в языках программирования. Вы можете использовать узел цикла, когда необходимо повторить определённые операции заданное количество раз или для элементов какой-либо коллекции данных (массива).

#Установка

Это встроенный плагин, его установка не требуется.

#Создание узла

В интерфейсе настройки рабочего процесса нажмите кнопку с плюсом («+») в потоке, чтобы добавить узел «Цикл»:

Создание узла цикла

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

#Настройка узла

20241016135326

#Объект цикла

Цикл по-разному обрабатывает различные типы данных объекта цикла:

  1. Массив: Это наиболее распространённый случай. Обычно вы можете выбрать переменную из контекста рабочего процесса, например, несколько результатов данных из узла запроса или предварительно загруженные данные отношений «один-ко-многим». Если выбран массив, узел цикла будет перебирать каждый элемент массива, присваивая текущий элемент локальной переменной в контексте цикла для каждой итерации.

  2. Число: Если выбранная переменная является числом, оно будет использоваться как количество итераций. Значение должно быть положительным целым числом; отрицательные числа не будут запускать цикл, а дробная часть числа будет игнорироваться. Индекс счётчика цикла в локальной переменной также является значением объекта цикла. Это значение начинается с 0. Например, если число объекта цикла равно 5, то объект и индекс в каждой итерации будут последовательно: 0, 1, 2, 3, 4.

  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. Создайте три коллекции: Товары <-(1:m)-- Детали заказа --(m:1)-> Заказы. Модель данных выглядит следующим образом:

    Коллекция «Заказы»

    Название поляТип поля
    Детали заказаОдин-ко-многим (Детали заказа)
    Общая стоимость заказаЧисло

    Коллекция «Детали заказа»

    Название поляТип поля
    ТоварМногие-к-одному (Товар)
    КоличествоЧисло

    Коллекция «Товары»

    Название поляТип поля
    Название товараОднострочный текст
    ЦенаЧисло
    ОстатокЦелое число
  2. Создайте рабочий процесс. В качестве триггера выберите «Событие коллекции» и укажите коллекцию «Заказы» для срабатывания «При добавлении записи». Также необходимо настроить предварительную загрузку данных отношений для коллекции «Детали заказа» и коллекции «Товары» в рамках этих деталей:

    Узел цикла_Пример_Настройка триггера

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

    Узел цикла_Пример_Настройка узла цикла

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

    Узел цикла_Пример_Настройка узла условия

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

    Узел цикла_Пример_Настройка узла вычисления

    Узел цикла_Пример_Настройка узла обновления остатка

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

    Узел цикла_Пример_Настройка узла обновления детализации заказа

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

Узел цикла_Пример_Структура рабочего процесса

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