Управление рабочими процессами
Предварительные требования
Перед чтением этой страницы убедитесь, что Вы установили NocoBase CLI и выполнили инициализацию по инструкции Быстрый старт с Конструктором ИИ.
Введение
Skill управления рабочими процессами служит для создания, редактирования, включения и диагностики рабочих процессов NocoBase — от выбор а триггера до построения цепочки узлов и анализа результатов выполнения, охватывая полный жизненный цикл использования рабочего процесса.
Возможности
Может:
- Создавать рабочие процессы: выбирать тип триггера и пошагово добавлять узлы обработки
- Редактировать рабочие процессы: менять конфигурацию триггера, добавлять, удалять и изменять узлы, перемещать и копировать их
- Управлять версиями: после выполнения текущей версии автоматически создаётся новая ревизия, не затрагивая историю
- Включать и вручную запускать рабочие процессы
- Диагностировать неудачные выполнения: находить узел сбоя и сообщение об ошибке
Не может:
- Не проектирует модель данных (используйте Skill моделирования данных)
- Не устанавливает MCP и не решает проблемы окружения (используйте Skill управления окружениями)
- Не удаляет рабочий процесс целиком (это операция повышенного риска, требующая отдельного подтверждения)
- Не выдумывает несуще ствующие типы узлов или триггеров
Примеры промптов
Сценарий A: создание нового рабочего процесса
Помоги мне настроить рабочий процесс, который автоматически уменьшает остаток товара после создания заказа
Skill сначала уточнит тип триггера и структуру цепочки узлов, и после подтверждения создаст её пошагово.

Сценарий B: редактирование существующего рабочего процесса
В рабочем процессе создания заказа добавь узел уведомления, отправляющего администратору внутреннее сообщение, если остаток товара недостаточен
Если текущая версия уже выполнялась, перед редактированием будет создана новая ревизия — история выполнения не пострадает.

Сценарий C: диагностика сбоя выполнения
Последний запуск рабочего процесса уменьшения остатков после создания заказа завершился ошибкой — посмотри, в чём дело
Skill найдёт последнее неудачное выполнение, определит узел сбоя и сообщение об ошибке, предложит варианты исправления.

Сценарий D: анализ или сводка логики рабочего процесса
Помоги мне разобрать логику обработки рабочего процесса «Уменьшение остатков при создании заказа»
Результат:
# Анализ рабочего процесса: Уменьшение остатков при создании заказа
## Обзор рабочего процесса
**Название рабочего процесса:** Уменьшение остатков при создании заказа
### Триггер
- **Тип:** Событие после д ействия (Action)
- **Условие срабатывания:** срабатывает при выполнении действия «Создание» в коллекции `orders` (заказы) — глобальный триггер.
- **Связанные данные:** при срабатывании передаются связанные данные `details` (позиции заказа).
- **Режим выполнения:** асинхронный
---
### Цепочка выполнения узлов
**[Триггер] Создание заказа**
│
▼
**[1] Цикл по позициям заказа (Loop)**
* **Цель:** `{{$context.data.details}}`
* *Действие: для каждой позиции выполняются следующие шаги:*
│
▼
**branchIndex=0 (тело цикла)**
│
▼
**[2] Запрос остатка товара (Query)**
* **Коллекция:** `products`
* **Условие фильтрации:** `id = {{$scopes.5u6lsjzf8vh.item.productId}}`
│
▼
**[3] Проверка достаточности остатка (Condition)**
* **Движок:** `formula.js`
* **Выражение:** `{{$jobsMapByNodeKey.n6rf8lf2lum.inventory}} < {{$scopes.5u6lsjzf8vh.item.quantity}}`
│
├── **YES (branchIndex=1, остатка недостаточно, условие TRUE):**
│ ▼
│ **[4] Уведомление суперадминистратора (Notification)**
│ *Отправка уведомления пользователям с ролью root, содержащего:*
│ *название товара, ID товара, текущий остаток, требуемое количество в заказе.*
│
└── **NO (branchIndex=0, остатка достаточно, пустая ветка)**
│
▼
**[5] Уменьшение остатка (SQL)**
* **SQL-запрос:** `UPDATE products SET inventory = inventory - :quantity`
---
### Описание ключевой логики
| Этап | Описание |
| :--- | :--- |
| **Триггер** | При создании заказа система передаёт в рабочий процесс полный список позиций. |
| **Цикл** | Позиции обрабатываются по очереди — каждая соответствует товару и его количеству. |
| **Запрос** | По `productId` определяется текущий остаток товара. |
| **Проверка** | Проверяется, выполняется ли `inventory < quantity` (то есть остатка недостаточно). |
| **Уведомление** | Если остатка недостаточно, пользователю с ролью `root` отправляется внутреннее уведомление. |
| **Уменьшение** | Остаток уменьшается напрямую через SQL; поскольку ветви сходятся, уменьшение выполняется независимо от достаточности остатка. |
---
### ⚠️ Возможные проблемы дизайна
`downstreamId` узла условия указывает на узел «Уменьшение остатка», то есть независимо от выбранной ветви (достаточно остатка или нет) в итоге выполняется уменьшение. Фактическое поведение:
- **Остатка достаточно** $\rightarrow$ остаток уменьшается напрямую (нормальный сценарий). ✓
- **Остатк а недостаточно** $\rightarrow$ сначала уведомляется администратор, **затем всё равно выполняется уменьшение** (остаток может стать отрицательным).
**Анализ:** такой подход — это шаблон «разрешить продажу с превышением и предупреждать», но также возможна логическая ошибка (по замыслу при недостатке остатка уменьшение должно блокироваться). Нужно уточнить намерение у бизнес-заказчика.
---
### Текущее состояние
- **Состояние включения:** `false` (отключён)
- **История выполнения:** выполнялся 1 раз.
- **Контроль версий:** текущая версия заморожена, для изменений нужно создать новую версию.
Часто задаваемые вопросы
Почему созданный рабочий процесс не запускается?
Только что созданный рабочий процесс по умолчанию отключён (enabled: false). Убедитесь, что триггер настроен правильно, и затем включите рабочий процесс вручную.
Затронет ли изменение рабочего процесса историю выполнений?
Нет. Если в текущей версии уже есть запись выполнения, Skill автоматически создаст новую ревизию (revision); история выполнений привязана к старой версии и не пострадает.
Связанные ссылки