Creatio development guide
PDF
Это документация Creatio версии 7.16.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, в свойствах которого в поле [Тип данных] ([Data type]) укажите "Уникальный идентификатор" ("Unique identifier") (рис. 2).

Рис. 2. — Добавление входящего параметра

Затем в свойствах первого действия процесса [Позвонить клиенту] ([Call customer]) заполните поле [Контакт] ([Contact]) данным входящим параметром процесса (рис. 3).

Рис. 3. — Передача параметра в элемент процесса

2. Создать замещающую страницу редактирования контрагента и добавить на нее действие

Добавление действия на страницу редактирования подробно описано в статье "Добавление действия на страницу редактирования".

В схему замещающего модуля страницы редактирования и схему раздела контрагента добавьте локализуемую строку CallProcessCaption с заголовком действия, например, "Назначить встречу" ("Schedule a meeting").

Дополнительно в объявлении модуля страницы редактирования подключите в качестве зависимости модуль ProcessModuleUtilities.

Исходные коды схемы раздела и страницы редактирования раздела [Контрагенты] ([Accounts]) приведены ниже.

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;
            }
        }
    };
});

После сохранения схем и обновления страницы приложения с очисткой кеша, в меню действий страницы контрагента появится новое действие [Назначить встречу] ([Schedule a meeting]) (рис. 4). Это действие будет доступным только в случае наличия основного контакта для активной записи реестра. При выполнении действия будет запущен пользовательский бизнес-процесс "Проведение встречи" ("Holding a meeting"). При этом в параметр бизнес-процесса будет передан основной контакт контрагента (рис. 5).

Рис. 4. — Вызов бизнес-процесса по действию на странице редактирования

Рис. 5. — Результат запуска бизнес-процесса. Передача параметра со страницы редактирования контрагента в бизнес-процесс

© Terrasoft 2002-2020.

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

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