BPMNImplementation

Материал из RunaWFE
Перейти к навигации Перейти к поиску

Реализация BPMN

Версия 4.6.0

© 2015-2023, ООО "Процессные технологии"

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

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

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

# Переменная

Переменная — адресуемая область памяти, используемая для хранения данных. Характеризуется размером и форматом представления данных внутри адресуемой области. В RunaWFE размер переменной скрыт от пользователя, и пользователю известно только название формата.

Используются следующие форматы переменных:


Роль является переменной со специальным использованием.

# Роль

Соответствует 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 - при запуске подпроцесса значение переменной копируется в подпроцесс
  • 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} )

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

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

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

# Время жизни сообщений

Выставляется явно.

Значение "0" гарантирует хотя бы 1 попытку обработки, остальное по интуиции.

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

- Узел-отправитель не отправит сообщение и выполнение откатится на прежнее состояние в процессе. Т.е. гарантируется что после прохождения узла-сообщения отправлено точно 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.

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

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