Creatio development guide
Это документация Creatio версии 7.9.0. Мы рекомендуем использовать новую версию документации.

Запуск процесса из клиентского модуля

Glossary Item Box

Общие сведения

Чтобы запустить бизнес-процесс из JavaScript-кода клиентской схемы, необходимо:

  1. В модуль страницы, из которой вызывается сервис, подключить в качестве зависимости модуль ProcessModuleUtilities. Этот модуль предоставляет удобный интерфейс для выполнения запросов к сервису ProcessEngineService.svc.
  2. Вызвать метод 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. — Результат запуска бизнес-процесса. Передача параметра со страницы редактирования контрагента в бизнес-процесс

© Terrasoft 2002-2017.

Был ли данный материал полезен?

Как можно улучшить эту статью?