🔀 Ad-hoc subprocess: когда процесс сам не знает, что будет дальше
Обычно BPM - это чёткий маршрут: A → B → C. Но иногда садишься моделировать и понимаешь: не знаю я заранее, что нужно сделать. Зависит от ситуации.
Для этого в BPMN 2.0 есть Ad-hoc субпроцесс (~) - блок, где задачи не имеют фиксированного порядка. Каждую можно запустить в любой момент, несколько раз или вообще пропустить.
Где можно использовать?
Везде, где «набор действий зависит от контекста»: сбор документов по кейсу, медосмотр, юридическое дело. И актуальный сейчас кейс - AI-агент, который сам решает, какой инструмент вызвать следующим.
Как управлять?
• Через переменную - передаёшь список задач, движок их активирует при входе
• Через job worker - воркер получает управление после каждого шага и решает, что дальше. Это уже похоже на агентскую логику
Кто поддерживает?
• В Camunda 7 не работает. Тильду нарисовать можно, после деплоя — тишина. Визуальная декорация. Обходят через createProcessInstanceModification() или gateway + флаги.
Но отсутствие нативного ad-hoc - не приговор, так DMN-таблица (или Script Task) определяет то, какие задачи нужны будут в конкретном контексте, multi-instance subprocess принимает их как коллекцию и управляет запуском. Та же гибкость, только из стандартных кубиков.
• В Camunda 8 (с 8.7) работает, но есть нюанс: активировать задачи динамически после входа в субпроцесс нельзя, только при входе. В режиме job worker это решается итеративно - воркер переполучает управление после каждого шага.
• Во Flowable движок умеет всё, полный BPMN 2.0 spec + Java API. Но Work UI из коробки не поддерживает активацию задач пользователем. Нужно дорабатывать через кастомные Actions.
• В jBPM / PAM глубже всех. Ad-hoc - основа для stage в кейсах, можно добавлять задачи в уже запущенный инстанс через API.
❓ Сталкивались с ad-hoc логикой в процессах? Как решали?
👍 Используем ad-hoc / CMMN нативно
🤔 Обходимся BPMN-паттернами (event subprocess, gateway + флаги)
👎 Всё структурировано, такого не встречали
Post #258
473

- 👍 4
- 🤔 3