Как сохранять, не закрывая, открытую бизнес-процессом страницу редактирования
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]). Открытая для редактирования запись будет сохраняться при каждом изменении детали [Продукты в счете], но сама страница редактирования при этом закрываться не будет.