Введение
Подпроцесс (Sub-Process) в BPMN – это составной элемент, представляющий собой процесс, вложенный внутрь другого процесса. Визуально подпроцесс изображается прямоугольником со скруглёнными углами, как и задача, но с маленьким знаком «+» в центре нижней стороны (свёрнутый вид) или раскрытым содержимым (развёрнутый вид). Подпроцесс позволяет управлять сложностью больших процессов: детали скрываются за одним элементом на верхнем уровне, но могут быть раскрыты при необходимости.
Подпроцессы решают одну из главных проблем процессного моделирования – «плоские» диаграммы с десятками задач становятся нечитаемыми. Иерархическая декомпозиция через подпроцессы делает модели управляемыми и понятными как руководству, так и разработчикам.
История и контекст
Концепция иерархической декомпозиции процессов присутствовала в IDEF0 (блоки раскрываются в дочерние диаграммы) и в ранних workflow-системах 1990-х. В BPMN 1.0 (2004) подпроцессы уже были ключевым элементом. В BPMN 2.0 (2011) появились дополнительные специализации: транзакционный подпроцесс (Transaction) и подпроцесс компенсации. Также разграничены встроенный (embedded, выполняется в контексте родительского) и вызываемый (callable, многократно используемый, аналог функции).
Как это работает
Типы подпроцессов в BPMN 2.0:
- Встроенный подпроцесс (Embedded Sub-Process) – вложен непосредственно в родительский процесс. Имеет доступ к переменным родителя. Нельзя переиспользовать независимо.
- Многократно используемый подпроцесс / Call Activity – вызов глобально определённого процесса или задачи. Аналог вызова функции: подпроцесс определён отдельно и может вызываться из нескольких мест.
- Транзакционный подпроцесс – особый тип с транзакционной семантикой: при ошибке инициирует компенсацию всех выполненных задач (откат). Используется для «бизнес-транзакций».
- Событийный подпроцесс (Event Sub-Process) – запускается событием, а не потоком управления. Используется для обработки прерываний на уровне процесса (например, получение сигнала отмены).
На границе подпроцесса можно разместить граничные события (Error, Timer, Signal), которые прерывают или не прерывают выполнение подпроцесса. Маркеры: «+» (обычный), знак волны (транзакционный), двойная линия (событийный), буква «М» (цикл «Multi-instance»).
Где применяется
- Управление сложными процессами – разбиение больших процессов (закупки, онбординг) на логические блоки.
- Повторное использование логики – Call Activity для стандартных процедур (проверка KYC, согласование).
- Транзакционные бизнес-процессы – оформление заказа с возможностью отмены и компенсации.
- Обработка исключений на уровне блока задач – граничные события на подпроцессе для управления ошибками.
Преимущества и ограничения
Преимущества: управление сложностью через иерархическую декомпозицию, возможность повторного использования (Call Activity), транзакционная семантика для бизнес-критических операций, чистое управление исключениями через граничные события.
Ограничения: чрезмерная вложенность подпроцессов усложняет отладку. Разница между встроенным и вызываемым подпроцессом неочевидна начинающим. Транзакционный подпроцесс требует явной реализации компенсирующих задач.
Связь с другими понятиями
Задача (BPMN) – атомарный аналог подпроцесса, не декомпозируемый далее. Событие (процесс) – может запускать Event Sub-Process или прерывать выполнение через граничные события. Шлюз (BPMN) – управляет потоком внутри подпроцесса. Пул и дорожка – подпроцесс может содержать собственные дорожки. BPMN – нотация, определяющая все виды подпроцессов.