Перейти к содержанию

Введение в конструктор бизнес-процессов

В данном разделе представлена информация об основных компонентах конструктора бизнес-процессов, их особенностях и взаимоотношении друг с другом.

Основные компоненты

Узел (Node)

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

Для каждого узла есть возможность указания подписок по умолчанию. При отправке сигнала определенного типа в процесс, данные подписки также принимают участие при формировании списка узлов для обработки. Важно, данные подписки работают только для активных процессов, старт нового процесса всегда осуществляется с узла с действием “Старт процесса”.

Узел поддерживает настройку и использование параметров. Параметры узла копируются в каждый созданный по данному узлу экземпляр и доступны в контексте обработки действий узла и проверки условий выхода из узла и перехода в узел. Редактор узла описан в разделе Редактор узла.

Действие (Action)

Действие – это элементарная функция процесса. Например, скрипт, отправка задания, генерация управляющего сигнала, отправка уведомления и т.д.

Некоторые виды действий (старт процесса, конец процесса, “И” и т.д.) не могут находиться в узлах с любыми другими действиями. Для узлов с данными действиями также не допустимо существование нескольких активных экземпляров узла.

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

Действие поддерживает настройку и использование параметров. Параметры действия копируются в каждый созданный по данному действию экземпляр и доступны в контексте обработки данного действия. В параметры действия записываются все настройки действия, заполненные через редактор действия. Редактор действия описан в разделе Редактор действия.

Сигнал

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

При приходе сигнала на узел, для которого уже есть несколько активных экземпляров и нет указаний, какой конкретный экземпляр необходимо обработать, происходит обработка данного сигнала во всех узлах, при этом на каждый узел отправляется своя копия отправляемого сигнала, т.е. изменение или добавление параметров в сигнал при обработке одного экземпляра узла никак не повлияет на параметры сигнала при обработке другого экземпляра узла.

Событие

Событие – внешнее событие, обработчик которого инициирует отправку какого-либо сигнала в процесс. Например, нажатие кнопки в задании, кнопки процесса на боковой панели и т.д.

Связь - переход, ведущий от одного узла к другому. Связи являются каналами, по которым двигаются сигналы.

В настройках связи могут быть указаны условие выхода из узла (выполняется в контексте узла, из которого происходит переход сигнала по связи) и условие входа в узел (выполняется в контексте узла, в который происходит переход сигнала по связи). Если одно из этих условий не выполнено, то обработка данного сигнала прерывается.

В связи определяется поведение создания экземпляров узла при переходе на новый узел. Оно может иметь одно из трех значений:

  • Создать экземпляр узла, если его нет - при переходе сигнала в узел по данной связи, если для данного узла еще нет активных экземпляров узла, то создается новый экземпляр и для него выполняется обработка, иначе сигнал отправляется на все активные экземпляры узла.

  • Всегда создавать экземпляр узла - при переходе сигнала в узел по данной связи, всегда будет создаваться новый экземпляр узла и для него будет выполняться обработка сигнала. Исключением являются только узлы, которые содержат действия, для которых недопустимо существование нескольких активных экземпляров узла

  • Никогда не создавать экземпляр узла - при переходе сигнала в узел по данной связи, если для данного узла еще нет активных экземпляров узла, то обработка данного сигнала прерывается, иначе сигнал отправляется на все активные экземпляры узла.

В связи определяется, должен ли данный сигнал выполняться синхронно, асинхронно или после загрузки файлов. Если установлен режим обработки сигнала Асинхронный, то при переходе сигнала по данной связи, его обработка будет выполнена асинхронно плагином Chronos, а если установлен режим После сохранения файлов, то обработка сигнала будет выполнена не в основном сохранении, а в отдельном уже после сохранения всех файлов карточки. Так же присутствует настройка Блокировать процесс при асинхронном вызове, которая определяет, может ли производиться обработка сигнала в данном процессе (синхронная или асинхронная) при выполнении данной асинхронной операции.

Шаблон процесса

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

Шаблон процесса поддерживает настройку и использование параметров. Параметры процесса копируются в каждый созданный по данному шаблону экземпляр и доступны в контексте обработки в любой момент обработки процесса. Редактор процесса описан в разделе Редактор процесса.

Экземпляр процесса

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

Экземпляр узла

Экземпляром узла называется совокупность данных узла (параметров узла), а также параметров всех действий узла.

Подписка

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

Есть несколько различных видов подписок:

  • Подписка на задание - данная подписка срабатывает при выполнении действия над заданием (взятие в работу, откладывание, завершение и т.д.), на которое подписан узел. Тип отправляемого сигнала зависит от произведенного над заданием действия.

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

  • Подписка на подпроцесс - данная подписка срабатывает при отправке сигнала от подпроцесса родительскому процессу, который на него подписан. Например, действие “Подпроцесс” создает подписку на дочерний подпроцесс, а действие “Конец процесса” отправляет по данной подписке сигнал, указанный в поле “Сигнал окончания” во все процессы, подписанные на данный (в обычном случае, на родительский процесс).

  • Подписка на таймер - данная подписка срабатывает при каждом тике таймера, в зависимости от переданных в нее настроек (период, флаг “Выполнять один раз” и т.д.). При обработке данной подписки на узел отправляется сигнал “TimerTick”.

Стандартные типы сигналов

  • Default – сигнал по умолчанию. Отправляется при создании процесса или если не указан иной тип сигнала при переходе.

  • Exit – сигнал, отправляемый при обработке выхода из узла.

  • CompleteTask – сигнал, отправляемый при завершении задания или для завершения задания. В параметрах имеет список заданий (если не задан, обрабатываются все задания) и вариант завершения задания.

  • DeleteTask – сигнал, отправляемый для удаления задания. В параметрах имеет список заданий (если не задан, обрабатываются все задания).

  • ReinstateTask – сигнал, отправляемый при возвращении задания на роль.

  • ProgressTask – сигнал, отправляемый при взятии задания в работу.

  • PostponeTask – сигнал, отправляемый при откладывании задания.

  • ReturnFromPostponeTask – сигнал, отправляемый при возврате задания из отложенного.

  • UpdateTask – сигнал, отправляемый для обновления параметров задания. В параметрах имеет список заданий (если не задан, обрабатываются все задания) и новые параметры для задания (дата завершения, исполнитель, описание задания)

  • SubprocessCompleted – сигнал, отправляемый подпроцессом в родительский процесс при завершении. Содержит тип сигнала, который фактически отправляет подпроцесс для обработки в родительский процесс.

  • SubprocessControl – сигнал, отправляемый для отправки сигнала в подпроцесс. В параметрах имеет тип отправляемого в подпроцесс сигнала.

  • Start – сигнал, используемый по умолчанию для запуска процесса.

  • UpdateTimer – сигнал, отправляемый для обновления параметров таймера. В параметрах имеет список идентификаторов обновляемых таймеров (или пустой список, если обновляются все таймеры) и новые параметры таймера (период и/или cron-выражение)

  • StopTimer – сигнал, отправляемый для остановки таймера. В параметрах имеет список идентификаторов обновляемых таймеров (или null, если ожидается остановка всех таймеров).

  • TaskGroupControl - сигнал, отправляемый для управления группой заданий. С помощью него можно добавить добавить новых исполнителей в группу, приостановить выполнение группы заданий или полностью отменить ее.

  • TimerTick – сигнал, отправляемый при обработке завершения таймера.

Обработка сигналов

В данном разделе концепция работы бизнес-процессов, созданных в редакторе.

Запуск процесса

Процесс запускается по нажатию на тайл с настройкой Запуск процесса на правой или левой боковой панели, в зависимости от флага Запуск из карточки в карточке шаблона процесса (подробнее см. Кнопки бизнес-процесса).

При нажатии кнопки, запускающей процесс, система отправляет сигнал с указанным в настройках кнопки типом сигнала на все узлы с действием Старт процесса, который ожидают этот тип сигнала. Действие старта процесса после его выполнения меняет тип сигнала на Default. Описание того, как конкретное действие обрабатывает сигналы, смотрите в разделе Описание действий.

При запуске процесса по данным из текущей версии шаблона бизнес-процесса создается новый экземпляр. И на все узлы с действием Старт процесса с нужным типом сигнала производится отправка сигнала с типом Default.

Обработка события

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

Например, узел, в котором есть действие с типом Задание, ожидает завершение отправленного им задания. При завершении задания в узел отправляется сигнал с типом CompleteTask и дополнительными параметрами, которые определяют задание и вариант завершения.

Все кнопки, которые не запускают процесс, они отправляют сигнал определенного типа в процесс, и все узлы, подписанные на данный тип сигнала, получают сигнал данного типа. Например, узел с действием типа Ожидание сигнала при получении сигнала с типом Default формируют подписку на сигнал с типом, указанным в действии, а при нажатии на кнопку, которая отправляет сигнал данного типа, получит подписавшийся узел и выполнит его обработку.

Также есть особый вид подписок на сигнал - подписки по умолчанию.

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

Обработка сигнала в узлах

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

Если при отправке сигнала на узел должно обработаться несколько экземпляров узла, то каждый из них обрабатывает свою копию сигнала. Т.е. изменение сигнала при обработке одного экземпляра никак не скажется на сигнале при обработке другого экземпляра.

Обработку сигнала в узле происходит в следующей последовательности:

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

  2. Дальше происходит вызов всех действий узла по порядку. Различные действия по-разному обрабатывают сигналы разных типов. Но каждое действие производит следующую цепь действий:

    1. Действие проверяет, должно ли оно обрабатывать сигнал данного типа. Если тип сигнала присутствует в настройке действия Список обрабатываемых сигналов, иди данный список пуст, то производится дальнейшая обработка, иначе обработка текущего действия пропускается.

    2. Выполняется предобработка действия. Если в предобработке задать свойству Cancel значение true, то дальнейшая обработка текущего действия пропускается.

    3. Выполняется само действие. Как каждый тип действия обрабатывает сигналы, смотрите в разделе в разделе Описание действий.

    4. Выполняется постобработка действия. Если в постобработке задать свойству Cancel значение true, то дальнейшая обработка всех действий узлов пропускается.

  3. После того, как все действия обработаны, происходит проверка списка связей для дальнейшей обработки. Если список пустой, то сигнал завершает свою обработку. Если список не пустой, то происходит дальнейшая обработка.

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

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

Warning

Порядок, в котором происходит обработка связей, всегда одинаков для одного и того же набора связей, но им нельзя управлять, поэтому на порядок обработки связей опираться нельзя.

Обработка сигнала в связи

Обработка сигнала по связи производится по следующему алгоритму:

  1. Выполняется условие выхода из узла (если оно задано для конкретной связи). Если условие выполнено, то происходит дальнейшая обработка, иначе обработка сигнала прерывается. Условие выхода из узла выполняется в контексте узла, из которого происходит переход.

  2. Далее выполняется условие перехода в узел (если оно задано для конкретной связи). Если условие выполнено, то дальше происходит обработка сигнала в узле, куда выполняется переход, иначе обработка сигнала прерывается. Условие выхода из узла выполняется в контексте узла, из которого происходит переход.

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

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

Пример

Рассмотрим простой процесс.

При нажатии на кнопку запуска процесса происходит следующая последовательность событий:

  1. В первую очередь сигнал с типом Default придет в узел Старт процесса с действием типа Старт процесса в нем. Данное действие не выполняет никакой дополнительной обработки над список связей для дальнейшей обработки или над самим сигналом (если это не задано в пред- или постобработке).

  2. Дальше произойдет обработка списка связей для дальнейшей обработки. Т.к. он не был изменен действием Старт процесса, то дальше проверятся условия связи между узлами Старт процесса и сценарий, и если они выполнены, дальше вызовется обработка сигнала в узла Сценарий.

  3. Дальше происходит обработка узла Сценарий с действием типа Сценарий в нем. Допустим, что сценарий не изменил ни сигнал, ни список связей для дальнейшей обработки. В такой ситуации после обработки данного узла, должна произойти обработка сигнала в обоих узлах заданий.

  4. В каждый узел Задание придет своя копия сигнала с типом Default (т.к. ни одно из действий до этого не изменило тип сигнала). Действия типа Задание при получении данного сигнала отправляет задание и очищает список связей для дальнейшей обработки. Поэтому дальнейшая обработка процесса после нажатия кнопки завершится.

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

При завершении первого из заданий сформируется сигнал завершения задания (тип сигнала CompleteTask) и отправится в тот узел, действие которого отправило данное задание. Дальше обработка перейдет в узел И с соответствующим типом действия, которое будет ожидать сигнала от второго узла Задание. Т.е. при завершении первого задания его узел завершит свое существование, но узел И остановит дальнейшую обработку.

При завершении второго задания произойдет аналогичная выше обработка, но при обработке действия в узле И, данное действие уже завершит свое выполнение и сигнал пройдет дальше в узел Конец процесса, который завершит выполнение текущего процесса.

Неперсистентный режим хранения процесса

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

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

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

Important

Важно понимать, что неперсистентный процесс может перейти в персистентный, но персистентный в неперсистентный - не может.

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

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

Back to top