Документация

Документация по разработке bpm’online
PDF
Как сохранять, не закрывая, открытую бизнес-процессом страницу редактирования

Glossary Item Box

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

Базовая логика bpm'online реализована так, что если страница редактирования записи открыта элементом бизнес-процесса [Открыть страницу редактирования], то сохранение записи (по кнопке [Сохранить] или методом this.save() в исходном коде схемы) приводит к закрытию страницы. Страница редактирования закрывается, даже если элемент [Открыть страницу редактирования] считается не выполненным (настраивается в свойстве элемента [Когда считать элемент выполненным?]).

Если необходимо сохранить запись несколько раз, не закрывая страницу редактирования, то необходимо методу this.save() в качестве аргумента передавать конфигурационный объект со свойством isSilent равным true. Например:

this.save({isSilent : true});

Описание примера

Необходимо создать бизнес-процесс, при выполнении которого будет открываться страница редактирования счета. Идентификатор редактируемой записи сохранять в параметре процесса. В исходном коде схемы страницы редактирования реализовать программную логику сохранения записи при любом изменении детали [Продукты в счете]. Обеспечить возможность редактирования записей детали без закрытия страницы редактирования счета.

Реализация примера

1. Создание бизнес-процесса

Для этого необходимо выполнить следующие шаги.

1.1 Создать бизнес-процесс

В разделе [Конфигурация] ([Configuration]) выполнить действие [Добавить] — [Бизнес-процесс] ([Add] — [Business process], рис. 1).

Рис. 1. — Действие [Добавить] — [Бизнес-процесс]

В открывшемся дизайнере процесса установить следующие значения свойств (рис. 2):

  • [Заголовок] ([Title]) — "Открыть страницу счета" ("Open Invoice Page").
  • [Код] ([Code]) — "UsrOpenInvoicePage".

Рис. 2. — Свойства бизнес-процесса

1.2 Добавить параметр

В созданный на предыдущем шаге бизнес-процесс добавить параметр, в котором будет сохранен идентификатор открываемой записи счета. Для параметра установить следующие свойства (рис. 3):

  • [Заголовок] ([Title]) — "Id счета" ("Invoice Id").
  • [Код] ([Code]) — "InvoiceId".
  • [Тип данных] ([Data type]) — "Уникальный идентификатор" ("Unique identifier").

Рис. 3. — Свойства параметра бизнес-процесса

1.3 Добавить элемент [Задание-сценарий]

Нужное значение идентификатора записи счета можно узнать из строки навигации браузера, открыв запись на редактирование (рис. 4).

Рис. 4. — Определение идентификатора записи

Это значение можно сохранить в параметр InvoiceId с помощью программного кода, выполняемого элементом [Задание-сценарий].

Для этого необходимо добавить в бизнес-процесс элемент [Задание-сценарий] ([Script task]). Свойству [Заголовок] ([Title]) элемента можно присвоить значение "Установить Id счета" ("Set Invoice Id"). Элемент должен выполнять следующий программный код

Set<Guid>("InvoiceId", new Guid("3c2b6d9f-4c1e-4364-99f2-53956562b606"));
return true;

Здесь устанавливается значение параметра InvoiceId. Экземпляр класса Guid создается на основе строки с идентификатором записи счета, полученной из строки навигации браузера (рис. 5).

Рис. 5. — Свойства элемента [Задание-сценарий]

К СВЕДЕНИЮ

Нужный идентификатор можно получить с помощью экземпляра класса EntitySchemaQuery (см. "Использование EntitySchemaQuery для построения запросов к базе данных").

1.5. Добавить элемент [Открыть страницу редактирования]

С помощью элемента [Открыть страницу редактирования] ([Open edit page]) можно во время выполнения процесса открыть нужную страницу для редактирования. Для этого элемента следует установить следующие свойства (рис. 6):

  • [Заголовок] ([Title]) — "Открыть страницу счета" ("Open invoice page").
  • [Какую страницу открыть?] ([Which page to open]) — выбрать "Страница редактирования счета" ("Invoice").
  • [Режим редактирования] ([Editing mode]) — выбрать "Редактировать существующую запись" ("Edit existing record").
  • [Идентификатор записи] ([Record Id]) — выбрать параметр процесса [Id счета] ([Invoice Id]), добавленный на шаге 1.2.
  • [Рекомендации по заполнению страницы] ([Recommendation for filling in the page]) — "Измените деталь [Продукты в счете]" ("Edit product in invoice detail").
  • [Когда считать элемент выполненным?] ([When element is considered complete?]) — выбрать "Сразу после сохранения записи" ("Immediately after saving the record").

Рис. 6. — Свойства элемента [Открыть страницу редактирования]

Все изменения в бизнес-процессе необходимо сохранить.

После запуска бизнес-процесса будет открыта страница редактирования записи, автоматически закрываемая при сохранении (рис. 7).

Рис. 7. — Страница редактирования, открытая бизнес-процессом

2. Добавить программную логику в схему страницы редактирования

Чтобы при изменении детали [Продукты в счете] на странице редактирования счета выполнялось сохранение записи без принудительного закрытия страницы, необходимо выполнить следующие шаги.

2.1 Добавить замещающую схему страницы редактирования счета

Как создать замещающую схему страницы редактирования подробно описано в статье "Создание клиентской схемы". В качестве родительского объекта следует выбрать схему "Страница редактирования счета" ("Invoice edit page", InvoicePageV2).

2.2 Переопределить метод onDetailChanged()

В замещающей схеме страницы редактирования счета необходимо переопределить метод onDetailChanged(), реализованный в базовой схеме BaseEntityPage. Этот метод является обработчиком полученного сообщения об изменении детали, размещенной на странице редактирования.

Чтобы обеспечить возможность редактирования записей детали [Продукты в счете] без закрытия страницы редактирования счета, необходимо в схему страницы добавить приведенный ниже исходный код.

define("InvoicePageV2", [], function() {
    return {
        entitySchemaName: "Invoice",
        methods: {
            // Обработчик сообщения об изменении детали.
            onDetailChanged: function(detail, args) {
                this.callParent(arguments);
                // Только для детали [Продукты в счете]
                if (detail.schemaName === "InvoiceProductDetailV2") {
                    // Сохранение записи с автоматическим закрытием страницы редактирования.
                    //this.save();
                    // Сохранение записи без закрытия страницы редактирования.
                    this.save({isSilent : true});
                }
            }
        },
        diff: /**SCHEMA_DIFF*/[
        ]/**SCHEMA_DIFF*/
    };
});

После внесения изменений схему необходимо сохранить.

В результате модификации схемы после запуска бизнес-процесса будет открыта страница редактирования записи (рис. 7), которая будет закрыта автоматически только после нажатия кнопки [Сохранить] ([Save]). Открытая для редактирования запись будет сохраняться при каждом изменении детали [Продукты в счете], но сама страница редактирования при этом закрываться не будет.

© Terrasoft 2002-2018.

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

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