Создание детали с редактируемым реестром
Glossary Item Box
Общие положения
Детали — это элементы страницы редактирования раздела, предназначенные для отображения дополнительных данных для основного объекта раздела. Они отображаются во вкладках страницы редактирования раздела в контейнере вкладок.
В системе bpm'online можно выделить четыре основных типа деталей:
- деталь со страницей добавления;
- деталь с полями редактирования;
- деталь с редактируемым реестром;
- деталь с выбором из справочника.
Подробнее детали описаны в статье "Деталь" раздела "Основные элементы интерфейса и их структура".
Поскольку деталь с редактируемым реестром не является стандартной деталью приложения bpm'online, то она не может быть добавлена в раздел при помощи Мастера деталей. Ниже будет рассмотрен способ добавления этой детали на страницу редактирования раздела.
Общая последовательность действий для добавления детали с редактируемым реестром в существующий раздел системы
Для добавления пользовательской детали с редактируемым реестром в существующий раздел необходимо выполнить следующую последовательность действий:
- Создать схему объекта детали.
- Создать и сконфигурировать схему детали.
- Выполнить настройку детали в замещающей схеме страницы редактирования раздела.
- Выполнить настройку полей детали.
Описание кейса
Создать пользовательскую деталь "Курьерские службы" для раздела [Заказы]. Деталь должна отображать список курьерских служб для текущего заказа.
Алгоритм реализации кейса
1. Создать схему объекта детали
В режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Объект] (рис. 1).
Рис. 1. — Добавление схемы объекта детали
Для создаваемой схемы объекта в качестве родительского объекта необходимо выбрать базовый объект BaseEntity, определенный в пакете Base (рис. 2). Остальные свойства необходимо установить так, как показано на рисунке 2. В качестве значения свойства [Пакет] система устанавливает название текущего пакета. Подробнее об установке свойств схемы объекта в дизайнере объекта изложено в статье "Дизайнер объектов".
Рис. 2. — Настройка свойств схемы объекта детали
В схему объекта необходимо добавить справочную колонку [Заказ], по которой будет осуществляться связь с разделом [Заказ], и справочную колонку [Контрагент], в которой будет храниться контрагент, осуществляющий доставку по данному заказу. Для обеих колонок необходимо установить признак обязательности для заполнения, чтобы избежать добавления пустых записей. Настройки свойств колонок отображены на рисунках 3 и 4.
Рис. 3. — Настройка свойств колонки [Заказ]
Рис. 4. — Настройка свойств колонки [Контрагент]
Схему объекта необходимо сохранить и опубликовать.
2. Создать схему детали
В режиме настройки в разделе [Конфигурация] на вкладке [Схемы] выполнить пункт меню [Добавить] > [Модуль] (рис. 1).
Созданный модуль должен наследовать функциональность базовой схемы детали с реестром BaseGridDetailV2, которая определена в пакете NUI. Для этого необходимо указать эту схему в качестве родительской для создаваемой схемы детали (рис. 5). Остальные свойства необходимо установить так, как показано на рисунке 5. В качестве значения свойства [Пакет] система устанавливает название текущего пакета.
Рис. 5. — Свойства схемы детали
Далее необходимо установить значение Курьерcкая служба для локализуемой строки [Caption] схемы детали (рис. 6). В локализуемой строке [Caption] хранится заголовок детали, отображаемый на странице редактирования.
Рис. 6. — Установка значения локализуемой строки [Caption]
Для того чтобы сделать реестр детали редактируемым, в ее схеме необходимо:
- Добавить зависимости от модулей ConfigurationGrid, ConfigurationGridGenerator, ConfigurationGridUtilities.
- Подключить миксины ConfigurationGridUtilites и OrderUtilities.
- Установить атрибут IsEditable в значение true.
- В массив модификаций добавить конфигурационный объект, в котором устанавливаются свойства и выполняется привязка методов-обработчиков событий реестра детали.
Ниже приведен исходный код схемы детали с подробными комментариями, который нужно добавить в секцию [Исходный код] дизайнера клиентского модуля.
// Определение схемы и установка ее зависимостей от других модулей. define("CourierServiceDetail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() { return { // Название схемы объекта детали. entitySchemaName: "CourierServiceInOrder", // Перечень атрибутов схемы. attributes: { // Признак возможности редактирования. "IsEditable": { // Тип данных — логический. dataValueType: Terrasoft.DataValueType.BOOLEAN, // Тип атрибута — виртуальная колонка модели представления. type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, // Устанавливаемое значение. value: true } }, details: {}, // Массив модификаций. diff: [ { // Тип операции — слияние. "operation": "merge", // Название элемента схемы, над которым производится действие. "name": "DataGrid", // Объект, свойства которого будут объединены со свойствами элемента схемы. "values": { // Имя класса "className": "Terrasoft.ConfigurationGrid", // Генератор представления должен генерировать только часть представления. "generator": "ConfigurationGridGenerator.generatePartial", // Привязка события получения конфигурации элементов редактирования // активной строки к методу-обработчику. "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"}, // Привязка события смены активной записи к методу-обработчику. "changeRow": {"bindTo": "changeRow"}, // Привязка события отмены выбора записи к методу-обработчику. "unSelectRow": {"bindTo": "unSelectRow"}, // Привязка события клика на реестре к методу-обработчику. "onGridClick": {"bindTo": "onGridClick"}, // Действия, производимые с активной записью. "activeRowActions": [ // Настройка действия [Сохранить]. { // Имя класса элемента управления, с которым связано действие. "className": "Terrasoft.Button", // Стиль отображения — прозрачная кнопка. "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, // Тег. "tag": "save", // Значение маркера. "markerValue": "save", // Привязка к изображению кнопки. "imageConfig": {"bindTo": "Resources.Images.SaveIcon"} }, // Настройка действия [Отменить]. { "className": "Terrasoft.Button", "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, "tag": "cancel", "markerValue": "cancel", "imageConfig": {"bindTo": "Resources.Images.CancelIcon"} }, // Настройка действия [Удалить]. { "className": "Terrasoft.Button", "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, "tag": "remove", "markerValue": "remove", "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"} } ], // Привязка к методу, который инициализирует подписку на события // нажатия кнопок в активной строке. "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"}, // Привязка события выполнения действия активной записи к методу-обработчику. "activeRowAction": {"bindTo": "onActiveRowAction"}, // Признак возможности выбора нескольких записей. "multiSelect": false } } ], // Используемые классы с дополнительной функциональностью. mixins: { ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities", OrderUtilities: "Terrasoft.OrderUtilities" }, methods: {} }; });
Для применения внесенных изменений созданную схему детали необходимо сохранить.
3. Выполнить настройку детали в замещающей схеме страницы редактирования раздела
Чтобы отобразить деталь на странице редактирования заказа, сначала необходимо создать замещающий клиентский модуль, в котором в качестве родительского объекта указать страницу редактирования заказа OrderPageV2, определенную в пакете Order (рис. 7). Последовательность создания замещающих схем подробно изложена в статье "Создание клиентской схемы".
Рис. 7. — Свойства замещающей схемы страницы редактированя заказа
Для отображения детали [Курьерcкие службы] на вкладке [Доставка] страницы редактирования заказа необходимо добавить следующий исходный код. Здесь в секции details определяется новая деталь CourierServiceDetail, а ее расположение на странице редактирования раздела задается в секции массива модификаций diff.
define("OrderPageV2", [], function() { return { // Название схемы объекта страницы редактирования. entitySchemaName: "Order", // Перечень добавляемых деталей страницы редактирования. details: /**SCHEMA_DETAILS*/{ // Настройка детали [Курьерcкие службы]. "CourierServiceDetail": { // Название схемы детали. "schemaName": "CourierServiceDetail", // Название схемы объекта детали. "entitySchemaName": "CourierServiceInOrder", // Фильтрация отображения контактов только для текущего заказа. "filter": { // Колонка схемы объекта детали. "detailColumn": "Order", // Колонка схемы объекта раздела. "masterColumn": "Id" } } }/**SCHEMA_DETAILS*/, // Массив модификаций. diff: /**SCHEMA_DIFF*/[ // Метаданные для добавления детали [Курьерские службы]. { "operation": "insert", // Название детали. "name": "CourierServiceDetail", "values": { "itemType": 2, "markerValue": "added-detail" }, // Контейнеры, в котором размещена деталь. "parentName": "OrderDeliveryTab", "propertyName": "items", // Индекс в списке добавляемых элементов. "index": 3 } ]/**SCHEMA_DIFF*/, methods: {}, rules: {} }; });
Чтобы изменения были применены, замещающую схему страницы редактирования необходимо сохранить.
4. Выполнить настройку колонок реестра детали
На этом этапе деталь уже полностью работоспособна, однако записи контактов на детали не отображаются, поскольку не указаны колонки для отображения. Для исправления этого недостатка необходимо вызвать меню действий детали и настроить отображаемые колонки (рис. 8).
Рис. 8. — Меню действий детали