Создание детали со страницей добавления
Glossary Item Box
Общие положения
Детали — это элементы страницы редактирования раздела. Детали предназначены для отображения записей, связанных с текущей записью раздела по справочной колонке. Это могут быть, например, записи другого раздела, в основном объекте которого есть справочная колонка, ссылающаяся на основной объект текущего раздела. Детали отображаются во вкладках страницы редактирования раздела.
Подробнее детали описаны в статье "Деталь" раздела "Основные элементы интерфейса приложения и их структура.
ВАЖНО
Деталь со страницей добавления является стандартной деталью приложения Creatio. Рекомендуется добавлять этот тип детали в раздел при помощи мастера деталей.
Ниже будет рассмотрен способ добавления детали со страницей добавления без использования мастера деталей.
Для добавления пользовательской детали со страницей добавления в существующий раздел необходимо:
- Создать схему объекта детали.
- Создать схему реестра детали.
- Создать схему страницы редактирования записи детали.
- Выполнить настройку детали в замещающей схеме страницы редактирования раздела.
- Зарегистрировать связи между схемами объекта, реестра детали и страницы редактирования записи детали при помощи специальных SQL-запросов в системные таблицы.
- Выполнить настройку полей детали.
ВАЖНО
Чтобы связать пользовательские схемы создаваемой детали, необходимо внести изменения в системные таблицы SysModuleEdit, SysModulentity и SysDetail базы данных Creatio при помощи SQL-запросов.
Однако при составлении и выполнении SQL-запроса к базе данных следует быть предельно внимательным. Выполнение неправильно составленного SQL-запроса может привести к повреждению существующих данных и нарушению работы системы.
Описание примера
Создать пользовательскую деталь [Курьеры] ([Couriers]) для раздела [Заказы] ([Orders]). Деталь должна отображать список курьеров для текущего заказа.
Исходный код
Пакет с реализацией примера можно скачать по ссылке.
Алгоритм реализации примера
1. Создать схему объекта детали
В разделе [Конфигурация] на вкладке [Схемы] выполните пункт меню [Добавить] — [Объект] ([Add] — [Object]) (рис. 1).
Рис. 1. — Добавление схемы объекта детали
Для схемы объекта детали в открывшемся дизайнере объектов заполните ее свойства как на рисунке 2.
Рис. 2. — Настройка свойств схемы объекта детали
В схему объекта добавьте справочную колонку [Заказ] ([Order]), по которой будет осуществляться связь с разделом [Заказ], и справочную колонку [Контакт] ([Contact]), в которой будет храниться контакт курьера. Для обеих колонок установите признак обязательности для заполнения, чтобы избежать добавления пустых записей. Настройки свойств колонок показаны на рисунках 3 и 4.
Рис. 3. — Настройка свойств колонки [Заказ] ([Order])
Рис. 4. — Настройка свойств колонки [Контакт] ([Contact])
Схему объекта сохраните и опубликуйте.
2. Создать схему реестра детали
В разделе [Конфигурация] на вкладке [Схемы] выполните пункт меню [Добавить] — [Схема модели представления карточки] ([Add] — [Schema of the Edit Page View Model]) (рис. 1).
Созданный модуль должен наследовать функциональность базовой схемы детали с реестром BaseGridDetailV2, которая определена в пакете NUI. Для этого укажите эту схему в качестве родительской для создаваемой схемы реестра детали (рис. 5). Остальные свойства установите так, как показано на рисунке 5.
Рис. 5. — Свойства схемы детали
Установите значение [Курьеры] ([Couriers]) для локализуемой строки [Caption] схемы реестра детали (рис. 6). В локализуемой строке [Caption] хранится заголовок детали, отображаемый на странице редактирования.
Рис. 6. — Установка значения локализуемой строки [Caption]
Ниже исходный код схемы реестра детали, который нужно добавить в секцию [Исходный код] дизайнера клиентского модуля. Здесь определяется название схемы реестра детали и ее связь со схемой объекта.
define("UsrCourierDetail", [], function() { return { // Название схемы объекта детали. entitySchemaName: "UsrCourierInOrder", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, methods: {}, diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/ }; });
Для применения внесенных изменений сохраните созданную схему реестра детали.
3. Создать схему страницы редактирования записи детали
В разделе [Конфигурация] на вкладке [Схемы] выполните пункт меню [Добавить] — [Схема модели представления карточки] ([Add] — [Schema of the Edit Page View Model]) (рис. 1).
Создаваемая схема страницы редактирования записи детали должна наследовать функциональность базовой схемы карточки BasePageV2, которая определена в пакете NUI. Для этого укажите эту схему в качестве родительской (рис. 7). Остальные свойства установите как показано на рисунке 7.
Рис. 7. — Свойства схемы страницы редактирования детали
Для настройки полей, отображаемых на странице редактирования записи детали, в секцию [Исходный код] дизайнера клиентского модуля добавьте следующий код. Здесь в массиве модификаций diff указываются конфигурационные объекты метаданных для добавления, определения местоположения и привязки полей ввода значений заказа и контакта курьера.
define("UsrCourierDetailPage", [], function() { return { // Название схемы объекта детали. entitySchemaName: "UsrCourierInOrder", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, // Массив модификаций. diff: /**SCHEMA_DIFF*/[ // Метаданные для добавления поля [Заказ]. { "operation": "insert", //Название поля. "name": "Order", "values": { // Настройка расположения поля на странице редактирования. "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Header" }, // Привязка к колонке [Order] схемы объекта. "bindTo": "UsrOrder" }, "parentName": "Header", "propertyName": "items", "index": 0 }, // Метаданные для добавления поля [Контакт]. { "operation": "insert", //Название поля. "name": "Contact", "values": { // Настройка расположения поля на странице редактирования. "layout": { "colSpan": 12, "rowSpan": 1, "column": 12, "row": 0, "layoutName": "Header" }, // Привязка к колонке [Contact] схемы объекта. "bindTo": "UsrContact" }, "parentName": "Header", "propertyName": "items", "index": 1 } ]/**SCHEMA_DIFF*/, methods: {}, rules: {} }; });
4. Выполнить настройку детали в замещающей схеме страницы редактирования раздела
Чтобы отобразить деталь на странице редактирования заказа, создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите [Страница редактирования заказа] ([Order edit page], OrderPageV2) (рис. 8). Процесс создания замещающей страницы описан в статье "Создание клиентской схемы".
Рис. 8. — Свойства замещающей схемы страницы редактирования заказа
Для отображения детали [Курьеры] ([Couriers]) на вкладке [Доставка] ([Delivery]) страницы редактирования заказа добавьте следующий исходный код. Здесь в секции details определяется новая деталь CourierDetail, а ее расположение на странице редактирования раздела задается в секции массива модификаций diff.
define("OrderPageV2", [], function() { return { // Название схемы объекта страницы редактирования. entitySchemaName: "Order", // Перечень добавляемых деталей страницы редактирования. details: /**SCHEMA_DETAILS*/{ // Настройка детали [Курьеры]. "CourierDetail": { // Название схемы детали. "schemaName": "UsrCourierDetail", // Название схемы объекта детали. "entitySchemaName": "UsrCourierInOrder", // Фильтрация отображения контактов только для текущего заказа. "filter": { // Колонка схемы объекта детали. "detailColumn": "UsrOrder", // Колонка схемы объекта раздела. "masterColumn": "Id" } } }/**SCHEMA_DETAILS*/, // Массив модификаций. diff: /**SCHEMA_DIFF*/[ // Метаданные для добавления детали [Курьеры]. { "operation": "insert", // Название детали. "name": "CourierDetail", "values": { "itemType": 2, "markerValue": "added-detail" }, // Родительский контейнер (Вкладка [Доставка]). "parentName": "OrderDeliveryTab", // Контейнер, в котором размещена деталь. "propertyName": "items", // Индекс в списке добавляемых элементов. "index": 3 } ]/**SCHEMA_DIFF*/, methods: {}, rules: {} }; });
Уже на этом этапе деталь отображается на странице редактирования раздела [Заказы] ([Orders]), однако добавить новую запись в деталь нельзя до тех пор, пока не будут зарегистрированы связи между схемами детали.
5. Зарегистрировать связи между схемами при помощи SQL-запросов в системные таблицы
Чтобы зарегистрировать связь между схемой объекта детали и схемой реестра детали, выполните SQL-запрос.
DECLARE -- Название схемы создаваемой детали. @DetailSchemaName NCHAR(100) = 'UsrCourierDetail', -- Заголовок детали. @DetailCaption NCHAR(100) = 'Couriers', --Название схемы объекта, к которому привязывается деталь. @EntitySchemaName NCHAR(100) = 'UsrCourierInOrder' INSERT INTO SysDetail( ProcessListeners, Caption, DetailSchemaUId, EntitySchemaUId ) VALUES ( 0, @DetailCaption, (SELECT TOP 1 UId FROM SysSchema WHERE name = @DetailSchemaName), (SELECT TOP 1 UId FROM SysSchema WHERE name = @EntitySchemaName) )
Для регистрации связи между схемой объекта детали и схемой страницы редактирования записи детали выполните следующий SQL-запрос.
DECLARE -- Название схемы страницы детали. @CardSchemaName NCHAR(100) = 'UsrCourierDetailPage', -- Название схемы объекта, к которому привязывается деталь. @EntitySchemaName NCHAR(100) = 'UsrCourierInOrder', -- Заголовок страницы детали. @PageCaption NCHAR(100) = '"Courier in order" detail edit page', -- Пустая строка. @Blank NCHAR(100) = '' -- Добавление записи в таблицу SysModuleEntity. INSERT INTO SysModuleEntity( ProcessListeners, SysEntitySchemaUId ) VALUES( 0, (SELECT TOP 1 UId FROM SysSchema WHERE Name = @EntitySchemaName ) ) -- Добавление записи в таблицу SysModuleEdit INSERT INTO SysModuleEdit( SysModuleEntityId, UseModuleDetails, Position, HelpContextId, ProcessListeners, CardSchemaUId, ActionKindCaption, ActionKindName, PageCaption ) VALUES ( (SELECT TOP 1 Id FROM SysModuleEntity WHERE SysEntitySchemaUId = ( SELECT TOP 1 UId FROM SysSchema WHERE Name = @EntitySchemaName ) ), 1, 0, @Blank, 0, (SELECT TOP 1 UId FROM SysSchema WHERE name = @CardSchemaName ), @Blank, @Blank, @PageCaption )
ВАЖНО
Чтобы эти изменения применились на уровне приложения, перезапустите сайт в IIS или скомпилируйте приложение в разделе [Конфигурация].
6. Выполнить настройку колонок реестра детали
На этом этапе деталь уже полностью работоспособна, однако записи контактов на детали не отображаются, поскольку не указаны колонки для отображения. Вызовите меню действий детали и настройте отображаемые колонки (рис. 9).
Рис. 9. — Меню действий детали
Смотрите также:
- Создание детали при помощи мастеров
- Создание детали с редактируемым реестром
- Создание детали с выбором из справочника
- Создание детали с полями