Действие
процесса
Одним из способов решения бизнес-задач в BPMSoft являются бизнес-процессы. Система предоставляет набор пользовательских действий, но возникают ситуации, при которых они могут не подойти к требованиям конкретной задачи.
Для создания новых пользовательских действий используется конфигурационные элемент «Действие процесса». Для запуска действия процесса используется элемент «Выполнить действие процесса». Познакомиться с этим элементом и описанием преднастроенных действий процесса можно в статье Элемент процесса «Выполнить действие процесса».
Одной из особенностей пользовательских действий является их многократное использование в различных процессах.
Создание пользовательского действия процесса
Для создания действия процесса выполните следующее:
- Откройте раздел «Конфигурация».
- Выберите пользовательский пакет, в который хотите добавить действие процесса.
- На панели инструментов рабочей области раздела «Конфигурация» нажмите «Добавить» и выберите «Действие процесса».
Рисунок 1 — Конфигурационный элемент «Действие процесса»

- Заполните свойства элемента:
Таблица 1 — Свойства элемента «Действие процесса»
|
Свойство |
Описание |
Значение для примера |
|
Код |
Название схемы. Должен начинаться с префикса, указанного в системной настройке «Префикс названия объекта». Код может содержать символы латинского алфавита и/или цифры |
BpmSendNotificationProcessUserTask |
|
Заголовок |
Локализуемый заголовок схемы |
Отправить уведомлению пользователю |
|
Пакет |
Пользовательский пакет, в котором находится или создается действие процесса |
Устанавливается автоматически |
|
Описание |
Описание схемы |
|
|
Страница редактирования параметров |
Страница, которая отображается при настройке элемента в бизнес-процессах. Страницу предварительно необходимо создать |
Базовая страница UserTaskPropertiesPage |
|
Страница редактирования параметров кейса |
Страница настройки параметров действия процесса. Отображается при настройке элемента в дизайнере кейсов. Страницу предварительно необходимо создать |
|
|
Цвет |
Шестнадцатеричный код цвета. Используется для отображения элемента в дизайнере бизнес-процессов |
Заполняется автоматически, для текущего примера — #839DC3 |
|
Маленькое векторное изображение |
Используется для замены стандартного изображения данного действия в дизайнере процессов |
|
Рисунок 2 — Свойства элемента «Действие процесса»

- После нажмите «Применить».
После нажатия на кнопку «Применить» начнется генерация кода для действия. После окончания генерации вы будете перемещены в раздел «Конфигурация».
- Добавьте параметры. Для этого откройте созданную схему, после нажмите на кнопку
.
Рисунок 3 — Добавление параметров действия

Заполните параметры действия процесса:
- Код — название схемы (обязательный свойство);
- Заголовок — локализуемый заголовок схемы;
- Тип данных — тип данных параметра (обязательное свойство);
- Справочник — свойство доступно, если свойстве «Тип данных» выбрано значение «Справочник»;
- Схема — название схемы, связанной с параметром;
- Признак «Обязательный для заполнения» — указывает является ли параметр обязательным для заполнения;
- Признак «Результирующий» — указывает является ли параметр результирующим. Можно использовать в условии условного потока;
- Признак «Содержит Id исполнителя» — идентификатор исполнителя действия. Свойство доступно, если свойстве «Тип данных» выбрано значение «Справочник»;
- Признак «Отложенная загрузка» — позволяет без задержек загружать диаграмму процесса. Параметр загружается непосредственно перед его использованием;
- Признак «Сериализуемый» — значение текущего параметра сохраняется в процессе выполнения действия процесса (между вызовами методов InternalExecute() и CompleteExecuting()). Используется для интерактивных действий процесса;
- Признак «Копировать значение» — если признак установлен, значение параметра копируется при его повторном использовании. Данное свойство является устаревшим, не рекомендуется к использованию.
Для реализации примера создадим параметр:
Таблица 2 — Параметр пользовательского действия
|
Код |
Заголовок |
Тип |
Сериализуемый |
|
BpmNotificationReceiver |
Получатель уведомления |
Уникальный идентификатор |
Да |
Для реализации логики действия-процесса BPMSoft предоставляет два базовых класса:
- Класс ProcessUserTask;
- Класс ProcessUserTaskSchemaExtension.
Действия процесса делятся на два типа: интерактивные и неинтерактивные. В зависимости от типа действия дизайнер действия процесса позволяет классам-наследникам замещать определенные методы. Ниже представлена таблица зависимости замещаемых методов от типа действия процесса.
Таблица 3 — Таблица зависимости замещаемых методов от типа действия
| Тип действия процесса | Описание | Замещаемые методы |
| Интерактивные | Для завершения выполнения действия процесса необходимо взаимодействие с пользователем или приложением. Взаимодействие включает в себя ввод дополнительных данных, выбор режима работы, ожидание сигнала от объекта |
|
| Неинтерактивные | Для завершения работы действия процесса нет необходимости взаимодействия с пользователем |
|
- Напишите логику действия в методе InternalExecute.
// Получаем схему Reminding.
var remindingSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Reminding");
// Создаем экземпляр объекта Reminding.
var reminding = remindingSchema.CreateEntity(UserConnection);
// Заполнение полей по умолчанию.
reminding.SetDefColumnValues();
// Идентификатор уведомления в таблице.
reminding.SetColumnValue("Id", Guid.NewGuid());
// Автор уведомления.
reminding.SetColumnValue("AuthorId", UserConnection.CurrentUser.ContactId);
// Получатель уведомления.
reminding.SetColumnValue("ContactId", BpmNotificationReceiver);
// Идентификатор из таблицы RemindingSource, указывающий на автора уведомления.
reminding.SetColumnValue("SourceId", new Guid("a66d08e1-2e2d-e011-ac0a-00155d043205"));
// Время отправки уведомления.
reminding.SetColumnValue("RemindTime", UserConnection.CurrentUser.GetCurrentDateTime());
// Содержание уведомления.
reminding.SetColumnValue("SubjectCaption", "Содержание уведомления");
// Заголовок уведомления.
reminding.SetColumnValue("PopupTitle", "Заголовок уведомления");
// Идентификатор таблицы (схемы) раздела, данное значение взято из имеющихся в таблице Reminding примеров уведомления.
// При реализации примера на своих стендах замените данное значение.
reminding.SetColumnValue("SysEntitySchemaId", new Guid("1BAB9DCF-17D5-49F8-9536-8E0064F1DCE0"));
// Сохраняем запись.
reminding.Save();
// При возвращении значения true, действие процесса завершает работу, устанавливается статус "Выполнено".
// Сам бизнес-процесс продолжит работу.
return true;
- Сохраните и опубликуйте схему.
Добавление пользовательского действия процесса в бизнес-процесс
Для демонстрации написанного пользовательского действия создадим бизнес-процесс.
- Откройте раздел «Конфигурация».
- Выберите пакет, в который хотите добавить бизнес-процесс.
- На панели инструментов рабочей области раздела «Конфигурация» нажмите «Добавить» и выберите «Бизнес-процесс».
- Заполните свойства «Название» и «Имя».
Рисунок 4 — Свойства бизнес-процесса

- Вынесите на рабочую область элемент «Выполнить действие процесса».
Рисунок 5 — Элемент «Выполнить действие процесса»

Рисунок 6 — Схема бизнес-процесса

- Добавьте параметр бизнес-процесса:
Рисунок 7 — Параметр процесса

В качестве значения параметра выберите значение системной переменной «Контакт текущего пользователя».
- Настройте элемент «Выполнить действие процесса»:
- «Какое пользовательское действие выполнить» = «Отправить уведомление пользователю»;
- Заполните параметр «Получатель уведомления».
Рисунок 8 — Параметры элемента «Выполнить действие процесса»

- Сохраните бизнес-процесс.
После завершения работы бизнес-процесса уведомление появится в коммуникационной панели для получателя.
Рисунок 9 — Уведомление в коммуникационной панели

Добавление пользовательского действия на вкладку «Действия пользователя»
Система позволяет добавить пользовательское действие в меню «Действия пользователя».
Рисунок 10 — Список «Действия пользователя»

Для добавления пользовательского действия в список необходимо выполнить SQL-сценарий в базе данных системы:
INSERT INTO SysProcessUserTask(SysUserTaskSchemaUId, Caption) SELECT s.UId, s.Caption FROM SysSchema s WHERE s.Name = '[Имя действия процесса]'
INSERT INTO "SysProcessUserTask" ("SysUserTaskSchemaUId", "Caption")
SELECT s."UId", s."Caption" FROM "SysSchema" AS s WHERE s."Name" = '[Имя действия процесса]';
После того как SQL-сценарий выполнится, рекомендуется повторно зайти в систему или перекомпилировать систему. Пакет с реализованным примером доступен по ссылке.
Рисунок 11 — Список «Действия пользователя» после выполнения SQL-сценария

Чтобы настроить параметры элемента бизнес-процесса, нужно заполнить поле «Страница редактирования параметров». Укажите страницу, которая будет отображать эти параметры в дизайнере. Можно выбрать стандартную страницу UserTaskPropertiesPage.
Рисунок 12 — Свойство «Страница редактирования параметров»

Базовые классы реализации действия процесса
Класс ProcessUserTask
Данный класс находится в пространстве имен BPMSoft.Core.Process и предназначен для реализации основной логики действия процесса. Для реализации своей логики действия классы-наследники должны заместить методы базового класса. Методы, которые можно заместить, зависят от типа действия процесса.
Таблица 4 — Методы класса ProcessUserTask
| Сигнатура метода | Аргументы | Описание |
|
protected virtual bool InternalExecute (ProcessExecutingContext context) |
ProcessExecutingContext context — контекст процесса |
Метод замещается для интерактивного и неинтерактивного типов действия процесса Если метод возвращает true, то действие завершает свою работу, устанавливая статус «Выполнено» Сам процесс продолжают свою работу Если метод возвращает false, тогда выполнение действия завершается. Статус остается в состоянии «Запущено» Далее могут вызываться методы CompleteExecuting() или CancelExecuting() |
|
public virtual bool CompleteExecuting (params object[] parameters) |
object[] parameters — массив параметров, необходимый при вызове IProcessEngine.CompleteExecuting | Метод замещается для интерактивного типа действия процесса. В замещенном методе обязательно должен содержаться вызов базового метода base.CompleteExecuting (parameters). Метод возвращает true |
| public virtual void CancelExecuting(params object[] parameters) | object[] parameters — массив параметров, обеспечивающий обратную совместимость | Метод замещается для интерактивного типа действия процесса. Выполняется при прерывании выполнения действия процесса. В результате выполнения метода будут отменены активности, созданные в методе InternalExecute() |
|
protected internal virtual void WriteExecutionData (IProcessExecutionDataWriter dataWriter) |
IProcessExecutionDataWriter dataWriter — экземпляр интерфейса. Выполняет сериализацию значений | Передает дополнительную информацию, необходимую при открытии страницы элемента действия |
Класс ProcessUserTaskSchemaExtension
Данный класс находится в пространстве имен BPMSoft.Core.Process и предназначен для расширения возможностей действий процесса, например, синхронизации параметров, установке зависимостей, и т.д. Для класса-наследника существует правило, по которому должно формироваться его имя: к названию реализовываемого класса необходимо добавить суффикс SchemaExtension.
Например, для пользовательского действия процесса BpmTestProcessUserTask название класса-наследника будет — BpmTestProcessUserTaskSchemaExtension.
Таблица 5 — Методы класса ProcessUserTaskSchemaExtension
| Сигнатура метода | Аргументы | Описание |
| public virtual Dictionary<Guid, string> GetResultParameterAllValues(UserConnection userConnection, ProcessSchemaUserTask userTask) |
|
Возвращает перечень возможных значений результирующих параметров действия процесса |
| public virtual void SynchronizeDynamicParameters(UserConnection userConnection, ProcessUserTaskSchema target) |
|
Синхронизирует динамические параметры. Динамическими параметрами называются параметры, которые отсутствуют в схеме действия процесса, но динамически генерируются для элемента |
| public virtual void SynchronizeParameters(ProcessSchemaUserTask schemaElement) |
|
Синхронизирует параметры, созданные при реализации действия процесса в дизайнере процессов |
Рекомендуем изучить
Бизнес-процессы
Элемент процесса «Выполнить действие процесса»