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

Импорт процесса BPMN

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

Конвертацию процесса при необходимости можно доработать под свои нужды с помощью доработки или реализации своих конвертеров объектов нотации BPMN. Более подробно об этом написано в разделе Доработка конвертации процесса.

Для того, чтобы импортировать процесс, нужно:

  1. Открываем или создаем шаблон бизнес-процесса, открываем версию процесса, в которую хотим импортировать структуру процесса из BPMN.

  2. Нажимаем кнопку “Импортировать” на панели с кнопками в редакторе процесса.

  3. В открывшемся окне выбираем тип файла - Процесс BPMN.

  4. Выбираем файл процесса и нажимаем кнопку “Открыть”.

  5. Система конвертирует процесс BPMN в процесс на конструкторе бизнес-процессов.

Ограничения

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

В базовой реализации конвертации процессов BPMN в процесс конструктора бизнес-процессов игнорируются следующие элементы BPMN:

  • Пулы и линии (Pools and Lanes). Все содержимое пулов и линий конвертируется.

  • Потоки сообщений (Message flow), которые идут от/к пулу. Система конвертирует потоки сообщений, которые соединяют узлы различных пулов.

  • Задача хореографии (Choreography Task).

  • Объект данных (Data Object).

  • Сообщение (Message).

  • Группа (Group).

  • Соединитель страниц (Off-Page Connector).

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

В базовой реализации конвертации процессов BPMN в процесс конструктора бизнес-процессов следующие элементы BPMN имеют ограничения и особенности при конвертации:

  • Поток операций (Sequence Flow) - в процесс на конструкторе не передается информацию о типе потока операций (условный, по умолчанию). Данные настройки в бизнес-процессе конструктора определяются настройкой условий в связи.

  • Текстовая аннотация (Text Annotation) - в BPMN текстовая аннотация может быть привязана к нескольким элементам с помощью ассоциаций (Association). Текстовые аннотации в конструкторе могут быть привязаны только к одному элементу, поэтому при конвертации текстовой аннотации из BPMN переносится связь только с первым элементом (первый элемент определяется структурой данных процесса).

  • Действие (Activity) - настройки действия Цикличность действия (Activity Looping), Многоэкземплярность (Multiple Instances) и Маркер Ad Hoc (Ad-Hoc Marker) не переносятся в бизнес-процесс конструктора. Логика данных настроек в бизнес-процессе определяется действиями в узле и входящими в узел связями.

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

Настройка импортированного процесса

Рассмотрим абстрактный процесс согласования заявки на отпуск. В нотации BPMN он мог бы выглядеть примерно следующим образом:

Импортировав файл с данным процессом в конструктор процессов система создаст следующий каркас процесса:

В первую очередь можно поправить внешний вид процесса в конструкторе:

Узел запуска процесса по умолчанию ожидает сигнал Start. Оставим данное поведение и не будем дополнительно настраивать действия данного узла.

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

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

Далее рассмотрим узлы Уведомления руководителя и Согласование заявки. По придуманной нами логике данные узлы должны отправить уведомление руководителю и отправить ему задание на согласование соответственно. Конструктор позволяет поместить несколько последовательно выполняемых действий в один узел. Поэтому мы можем упростить наш процесс, объединив в один узел Согласование заявки и отправку задания и отправку уведомления.

Tip

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

Tip

Действие Задание в настройках имеет поле Уведомление, которое позволяет указать уведомление, которое придет исполнителю задания при его создании. Это позволяет отправить и задание и уведомление одним действием.

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

Узлы с отправкой уведомления о согласовании, не согласовании и доработки заявки настраиваются по одной схеме:

  1. Добавляем действие Уведомление

  2. Удаляем действие Сценарий

  3. Настраиваем действие Уведомление, чтобы указанному сотруднику приходило соответствующее уведомление.

Узел Обработка заявки - это некая логика, которая определяет, как система обработает согласование заявки. Например, запишет в некий календарь отпусков информацию о новом отпуске, или автоматически добавит заместителя для инициатора на период отпуска. В большинстве случаев данная логика реализуется с помощью скриптов и поэтому действие Сценарий для данного узла подходит как нельзя кстати.

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

Доработка конвертации процесса

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

Для того, чтобы реализовать свой конвертер объекта BPMN нужно:

  1. Сделать свою реализацию интерфейса IWorkflowEngineBPMNObjectConverter<T>, где T - тип конвертируемого объекта BPMN (список всех типов находится в пространстве имен Tessa.Workflow.BPMN.Classes). Лучше всего использовать в качестве базового класса WorkflowEngineBPMNObjectConverterBase<T> или его открытого наследника, в зависимости от объекта, для которого создается конвертер.

  2. Зарегистрировать ваш класс в Unity.

  3. Зарегистрировать ваш класс в IWorkflowEngineBPMNObjectConverterResolver с указанием в качестве ключа - тип объекта, для которого будет использоваться конвертер (тип T из первого пункта).

Все платформенные конвертеры находятся в пространстве имен Tessa.Workflow.BPMN.Converters.

Пример переопределения конвертера для объекта tUserTask (задание пользователя):

using System; using System.Collections.Generic; using System.Threading.Tasks; using Tessa.Platform.Storage; using Tessa.Workflow.Actions.Descriptors; using Tessa.Workflow.BPMN.Classes; using Tessa.Workflow.Storage;

namespace Tessa.Workflow.BPMN.Converters { public class MyTUserTaskConverter : TUserTaskConverter { #region Constructors

public MyTUserTaskConverter(IWorkflowEngineBPMNObjectConverterResolver objectConverterResolver) : base(objectConverterResolver) { }

#endregion

#region Base Overrides

protected override async Task PrepareForConvertAsyncCore<CoreT>(IWorkflowEngineBPMNObjectConverterContext<CoreT, tUserTask> context) { await base.PrepareForConvertAsyncCore(context);

// Базовая реализация создает узел WE для элементов узлов BPMN и записывает его в context.BPMNObjectInfo["Node"] WorkflowNodeStorage node = context.BPMNObjectInfo.TryGet<WorkflowNodeStorage>("Node");

var name = node.Name;

// Добавляем действие Задание var action = node.Actions.Add(); action.ActionTypeID = WorkflowActionDescriptors.TaskDescriptor.ID; action.Order = 0; action.Caption = name; action.Hash = new Dictionary<string, object>(StringComparer.Ordinal) { // Здесь можно заполнить параметры действия некими настройками }; action.SetName(name); }

protected override string GetNodeName(tUserTask element) { // Переопределяем имя для узлов данного типа в WE return "UserTask"; }

#endregion } }

Пример его регистрации:

// Регистрируем в Unity this.UnityContainer.RegisterType<MyTUserTaskConverter>(new ContainerControlledLifetimeManager());

// Регистрируем как конвертер для объекта this.UnityContainer.Resolve<IWorkflowEngineBPMNObjectConverterResolver>() .Register<MyTUserTaskConverter>(typeof(tUserTask)) ;

Back to top