Запуск процесса из клиентского модуля
Glossary Item Box
Общие сведения
Чтобы запустить бизнес-процесс из JavaScript-кода клиентской схемы, необходимо:
- В модуль страницы, из которой вызывается сервис, подключить в качестве зависимости модуль ProcessModuleUtilities. Этот модуль предоставляет удобный интерфейс для выполнения запросов к сервису ProcessEngineService.svc.
- Вызвать метод executeProcess(args) модуля ProcessModuleUtilities, передав ему в качестве параметра объект args с такими свойствами (табл. 1):
Табл. 1. — Свойства объекта args
Свойство | Описание |
---|---|
sysProcessName | Имя вызываемого процесса (необязательное свойство в случае, если определено свойство sysProcessId). |
sysProcessId | Уникальный идентификатор вызываемого процесса (необязательное свойство в случае, если определено свойство sysProcessName). |
parameters |
Объект, свойствами которого являются входящие параметры вызываемого процесса. |
Описание кейса
На страницу редактирования контрагента необходимо добавить действие, по которому будет запускаться бизнес-процесс "Проведение встречи". В бизнес-процесс необходимо передать в качестве параметра основной контакт контрагента.
Алгоритм реализации кейса
1. Создать пользовательский бизнес-процесс "Проведение встречи"
В примере используется бизнес-процесс "Проведение встречи", создание которого детально описано в разделах "Построение линейных процессов" и "Как работать с email" документации по настройке процессов (рис. 1).
Рис. 1. — Диаграмма исходного бизнес-процесса "Проведение встречи"
После создания бизнес-процесса необходимо добавить в него входящий параметр ProcessSchemaContactParameter, в свойствах которого в поле [Тип данных] указать "Уникальный идентификатор" (рис. 2).
Рис. 2. — Добавление входящего параметра
Затем в свойствах первого действия процесса [Позвонить клиенту] заполнить поле [Контакт] данным входящим параметром процесса (рис. 3).
Рис. 3. — Передача параметра в элемент процесса
2. Создать замещающую страницу редактирования контрагента и добавить на нее действие
Процесс добавления действия на страницу редактирования детально описан в статье "Добавление действия на страницу редактирования".
В схему замещающего модуля страницы редактирования и схему раздела контрагента необходимо добавить локализуемую строку CallProcessCaption с заголовком действия, например, "Назначить встречу".
Дополнительно в объявлении модуля страницы редактирования необходимо подключить в качестве зависимости модуль ProcessModuleUtilities.
Исходные коды схемы раздела и страницы редактирования раздела [Контрагенты] приведены ниже.
3. Добавить необходимые методы в схемы
Для запуска процесса необходимо воспользоваться методом executeProcess() модуля ProcessModuleUtilities, в который в качестве параметра передать объект со следующими свойствами: имя созданного бизнес-процесса, объект с проинициализированными входящими параметрами для процесса. Все это реализовано в методе callCustomProcess(). Также реализованы методы проверки существования основного контакта isAccountPrimaryContactSet() и добавления элементов меню действий getActions().
Программный код замещающего модуля страницы редактирования:
define("AccountPageV2", ["ProcessModuleUtilities"], function(ProcessModuleUtilities) { return { // Название схемы объекта страницы редактирования. entitySchemaName: "Account", // Коллекция методов модели представления страницы редактирования. methods: { // Метод проверяет, заполнено ли поле [Основной контакт] страницы. isAccountPrimaryContactSet: function() { return this.get("PrimaryContact") ? true : false; }, // Перегрузка базового виртуального метода, возвращающего коллекцию действий страницы редактирования. getActions: function() { // Вызывается родительская реализация метода для получения // коллекции проинициализированных действий базовой страницы. var actionMenuItems = this.callParent(arguments); // Добавление линии сепаратора для визуального отделения пользовательского действия от списка // действий базовой страницы. actionMenuItems.addItem(this.getActionsMenuItem({ Type: "Terrasoft.MenuSeparator", Caption: "" })); // Добавление пункта меню [Назначить встречу] в список действий страницы редактирования. actionMenuItems.addItem(this.getActionsMenuItem({ // Привязка заголовка пункта меню к локализуемой строке схемы. "Caption": { bindTo: "Resources.Strings.CallProcessCaption" }, // Привязка метода обработчика действия. "Tag": "callCustomProcess", // Привязка свойства видимости пункта меню к значению, которое возвращает метод isAccountPrimaryContactSet. "Visible": { bindTo: "isAccountPrimaryContactSet" } })); return actionMenuItems; }, // Метод-обработчик выбора действия. callCustomProcess: function() { // Получение идентификатора основного контакта контрагента. var contactParameter = this.get("PrimaryContact"); // Объект, который будет передан в качестве аргумента в метод executeProcess. var args = { // Имя процесса, который необходимо запустить. sysProcessName: "UsrCustomProcess", // Объект со значением входящего параметра ContactParameter для процесса CustomProcess. parameters: { ProcessSchemaContactParameter: contactParameter.value } }; // Запуск пользовательского бизнес-процесса. ProcessModuleUtilities.executeProcess(args); } } }; });
Для корректного отображения действия в меню действий в совмещенном режиме отображения страницы с вертикальным реестром необходимо в схеме раздела также добавить реализацию метода isAccountPrimaryContactSet().
Программный код замещающего модуля схемы раздела:
define("AccountSectionV2", [], function() { return { // Название схемы объекта страницы редактирования. entitySchemaName: "Account", methods: { // Метод проверяет, заполнено ли поле [Основной контакт] выбранной записи. isAccountPrimaryContactSet: function() { // Определение активной записи. var activeRowId = this.get("ActiveRow"); if (!activeRowId) { return false; } // Получение коллекции данных списочного представления реестра раздела. // Получение модели выбранного контрагента по заданому значению первичной колонки. var selectedAccount = this.get("GridData").get(activeRowId); if (selectedAccount) { // Получение свойства модели — статуса выбранного заказа. var selectedPrimaryContact = selectedAccount.get("PrimaryContact"); // Если первичный контакт установлен, возвращает true. Иначе — false. return selectedPrimaryContact ? true : false; } return false; } } }; });
После сохранения схем и обновления страницы приложения с очисткой кеша, в меню действий страницы контрагента появится новое действие [Назначить встречу] (рис. 4). Это действие будет доступным только в случае наличия основного контакта для активной записи реестра. При выполнении действия будет запущен пользовательский бизнес-процесс "Проведение встречи". При этом в параметр бизнес-процесса будет передан основной контакт контрагента (рис. 5).
Рис. 4. — Вызов бизнес-процесса по действию на странице редактирования
Рис. 5. — Результат запуска бизнес-процесса. Передача параметра со страницы редактирования контрагента в бизнес-процесс