Creatio development guide
PDF
Документация по разработке
Это документация Creatio версии 7.12.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-2019.

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

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