- 1 # Начальное состояние
- 2 # Роль
- 3 # Действие
- 4 # Аннотация
- 5 # Задача сценария
- 6 # Таймер
- 7 # Параллельный шлюз
- 8 # Исключающий шлюз
- 9 # Подпроцесс
- 10 # Мультиподпроцесс
- 11 # Отправить сообщение, Получить сообщение
- 12 # Завершение потока
- 13 # Завершение процесса
- 14 # Бизнес-исключение планируется
# Начальное состояние
Отличия от спецификации
- должен быть привязан к роли
- может иметь стартовую форму
- может быть вызвано только явным запуском процесса
# Роль
Соответствует 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.
# Бизнес-исключение планируется
В бизнес-процессе несколько элементов объединяются в объемлющую область (логическое компонование), к границе которой присоединяется элемент «Бизнес-исключение». В интерфейсе системы добавляется новое меню, в котором пользователь (который обладает соответствующими правами) может выбрать экземпляр бизнес-процесса, возможное бизнес-исключение и произвести генерацию бизнес-исключения. Список возможных бизнес-исключений создается в соответствии с набором объемлющих областей экземпляра бизнес-процесса, в которых в текущий момент времени находятся точки управления. Из элемента «Бизнес-исключение» можно совершить переход на другие элементы.