Управление рабочими процессами
Введение
Навык управления рабочими процессами создаёт, редактирует, включает и диагностирует рабочие процессы NocoBase — от выбора триггера до построения цепочки узлов и устранения неполадок результатов выполнения, охватывая полный жизненный цикл рабочего процесса.
Установка
npx skills add nocobase/skills --skill nocobase-workflow-manage -y
Возможности
Можно:
- Создавать рабочие процессы: выбирать типы триггеров и добавлять узлы обработки по одному
- Редактировать рабочие процессы: изменять конфигурацию триггера, добавлять/удалять/обновлять узлы, перемещать и копировать узлы
- Управление версиями: выполненные версии автоматически создают новую ревизию без влияния на исторические записи
- Включать и вручную выполнять рабочие процессы
- Диагностировать неудачные выполнения: находить узлы с ошибками и сообщения об ошибках
Нельзя:
- Нельзя проектировать модели данных (используйте навык моделирования данных)
- Нельзя устанавливать MCP или решать проблемы окружения (используйте навык управления окружением)
- Нельзя удалять целый рабочий процесс (высокорис ковая операция, требующая отдельного подтверждения)
- Нельзя выдумывать типы узлов или типы триггеров
Примеры запросов
Сценарий A: создание нового рабочего процесса
Помоги настроить рабочий процесс, который автоматически списывает товар со склада после создания заказа
Навык сначала подтвердит тип триггера и проект цепочки узлов, затем после подтверждения создаст их пошагово.

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

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

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