Реализация BPMN

# Начальное состояние

Отличия от спецификации

  • должен быть привязан к роли
  • может иметь стартовую форму
  • может быть вызвано только явным запуском процесса

# Роль

Соответствует BPMN (элемент Lane).

Роль характеризуется классом обработчика и конфигурацией, что можно назвать инициализатором для простоты.
Эти свойства определяют как инициализируется роль, т.е. какие пользователи попадут в роль.

Роль инициализируется значением в случае:

  • выполнения стартовой задачи (при условии настройки Доинициализация роли = да)
  • прихода точки управления в задачу с этой ролью (при условии что значение роли не определено либо настройка Переинициализация роли = да
  • при первом использовании в БП, например в обработчике (при использовании настройки ServerConfigurationGuide#process.swimlane.auto.initialization.enabled)
  • при назначении ей значения как переменной

Значением роли может быть:

  • 1 пользователь
  • 1 группа
  • 1 временная группа, состоящая из нескольких пользователей (которые определились инициализатором)
  • 1 группа делегирования
  • 1 группа эскалации

Роль можно использовать как переменную:

  • присваивать ей значение другой роли или переменной типа Исполнитель, Пользователь или Группа
  • получить текущее значение

# Действие

Соответствует BPMN (элемент User Task).

Если настройка Переинициализация роли установлена в да — то выполняется переинициализация роли на основании инициализатора, безусловно от текущего значения роли.

Если настройка Переинициализация роли установлена в нет — то принудительная переинициализация роли при создании задания не выполняется, используется текущее значение роли. И только если оно не определено — выполняется инициализация роли.

Если настройка Доинициализация роли установлена в да — то значение роли при выполнении задания становится равным пользователю, выполнившему задание.

Если настройка Доинициализация роли установлена в нет — то значение роли при выполнении задания не меняется.

Значения настроек по умолчанию задаются в настройках редактора.

значение настройки Переинициализация роли значение настройки Доинициализация роли типичная ситуация использования
да да После выполнения задания можно получить информацию о выполнившем её пользователе. Но при этом закрепления дальнейших заданий за ним не происходит, в каждой задаче — переинициализация роли.
да нет В длинных БП актуализация пользователей в роли. Например если роль инициализируется по отделу — то таким образом учитываются уволенные и вновь взятые сотрудники в старых БП.
нет да Закрепление пула задач за одним пользователем.
нет нет Роль инициализируется 1 раз в БП и далее не меняется. Затрудняюсь привести практичную ситуацию.

# Аннотация

Соответствует BPMN.

# Задача сценария

Соответствует BPMN (элемент Script Task).
Под скриптом подразумевается обработчик в системе.

# Таймер

Соответствует BPMN.

# Параллельный шлюз

Соответствует BPMN.

# Исключающий шлюз

Соответствует BPMN.

# Подпроцесс

Соответствует BPMN (только Reusable SubProcess).

# Работа с переменными

# В режиме копирования

В этом режиме использование в соответствии переменной определяет правила:

  • read — при запуске подпроцесса cзначение переменной копируется в подпроцесс
  • write — при завершении подпроцесса значение переменной копируется в родительский БП
  • sync — при изменении значения переменной в подпроцессе оно будет изменено как в подпроцессе, так и в базовом БП

# В режиме ID базового БП 4.3.0+

Режим «ID базового БП» предназначен для хранения переменных в единственном экземпляре. Этот режим включается настройкой base.process.id.variable.name и передачей в БП соответствующей переменной. Поддерживается иерархия любой вложенности.

При доступе на чтение возвращается первое непустое значение, найденное вверх по иерархии базовых БП.

При доступе на запись значение меняется в последнем базовом БП по иерархии, где определена переменная наличием.

В этом режиме использование в соответствии переменной определяет правила:

  • read — при чтении значение переменной будет доступно из базового БП
  • write — при завершении подпроцесса значение переменной копируется в родительский БП
  • sync — при изменении значения переменной в подпроцессе оно меняется в базовом БП; при чтении значение переменной будет доступно из базового БП

При включённой настройке base.process.id.variable.read.all при чтении используется базовый БП для переменных с любым названием.

# Мультиподпроцесс

Отличия от спецификации (Multiple Instances Activity)

  • иной механизм вычисления подпроцессов:
    • по переменной типа «Список»
    • по пользователям указанной группы
    • по пользователям указанного отношения
  • подпроцессы выполняются всегда параллельно

# Отправить сообщение, Получить сообщение

Близким аналогом в BPMN являются сигналы и сообщения.

Для отправки и получения сообщений используется JMS (Jboss Messaging).

Порядок обработки сообщений в процессе значения не имеет.

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

В сообщении передается информация:

— данные о маршрутизации в виде ключ:значение

— данные в виде ключ:значение переменной процесса

— время жизни хранения (опционально)

Данные о маршрутизации определяют получателя сообщения

Одно сообщение может быть обработано несколькими получателями.

Обрабатываются данные маршрутизации по четкому соответствию значений на стороне получателя.

пример

Отправитель: (тип=»1″,действие=»добавить»)

Такое сообщение будет обработано любым из получателей с настройками маршрутизации

Получатель: (тип=»1″) (в случае настройки)

Получатель: (тип=»1″,действие=»добавить»)

Получатель: () (в случае настройки)

и не будет обработано следующими получателями

Получатель: (тип=»1″,действие=»удалить»)

Получатель: (тип=»1″,действие=»добавить»,ожидание=»да»)

Получатель: (ожидание=»да»)

В конфигураторе параметров предусмотрены предопределенные значения:

по названию определения процесса ( ${currentDefinitionName} )

по названию текущего узла ( ${currentNodeName} )

по номеру экземпляра процесса ( ${currentInstanceId} )

Можно использовать переменные в значении свойства маршрутизатора (задается конструкцией ${названиеПеременной})

Структура и обработка данных сообщения позволяет задавать соответствие
между переменными отправителя и получателя на любой из сторон (или с обеих сторон).

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

# В случае ошибки (отката транзакции)

— Узел-отправитель не отправит сообщение и выполнение откатится на прежнее состояние в процессе. Т.е. гарантируется что после прохождения узла-сообщения отправлено точно 1 сообщение.

— Узел-получатель вернет сообщение в очередь и оно будет обработано при следующей попытке (таймаут по умолчанию = 1 мин.)

# Многопоточная обработка сообщений

# До версии 4.1.0

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

# В версии 4.1.0

Введена настройка receive.message.handle.in.sequence.enabled в system.properties (по умолчанию true).

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

# Начиная с версии 4.1.1

Все сообщения обрабатываются параллельно с синхронизацией по экземплярам процессов. Т.е. если сообщения адресованы в разные процессы — они будут обработаны параллельно, иначе — последовательно.

# Завершение потока

Близким аналогом в BPMN является None End Event.

# Завершение процесса

Близким аналогом в BPMN является “terminate” End Event.

# Бизнес-исключение планируется

В бизнес-процессе несколько элементов объединяются в объемлющую область (логическое компонование), к границе которой присоединяется элемент «Бизнес-исключение». В интерфейсе системы добавляется новое меню, в котором пользователь (который обладает соответствующими правами) может выбрать экземпляр бизнес-процесса, возможное бизнес-исключение и произвести генерацию бизнес-исключения. Список возможных бизнес-исключений создается в соответствии с набором объемлющих областей экземпляра бизнес-процесса, в которых в текущий момент времени находятся точки управления. Из элемента «Бизнес-исключение» можно совершить переход на другие элементы.