Creatio development guide
Это документация Creatio версии 7.9.0. Мы рекомендуем использовать новую версию документации.

Создание детали со страницей добавления

Glossary Item Box

Общие положения

Детали — это элементы страницы редактирования раздела, предназначенные для отображения дополнительных данных для основного объекта раздела. Они отображаются во вкладках страницы редактирования раздела в контейнере вкладок.

В системе bpm'online можно выделить четыре основных типа деталей:

  • деталь со страницей добавления;
  • деталь с полями редактирования;
  • деталь с редактируемым реестром;
  • деталь с выбором из справочника.

Подробнее детали описаны в статье "Деталь" раздела "Основные элементы интерфейса и их структура".

Деталь со страницей добавления является стандартной деталью приложения bpm'online и может быть добавлена в раздел при помощи Мастера деталей. Ниже будет рассмотрен способ добавления детали со страницей добавления без использования мастера деталей.

Общая последовательность действий для добавления детали со страницей добавления в существующий раздел системы

Для добавления пользовательской детали со страницей добавления в существующий раздел необходимо выполнить следующую последовательность действий:

  1. Создать схему объекта детали.
  2. Создать схему детали.
  3. Создать схему страницы редактирования детали.
  4. Выполнить настройку детали в замещающей схеме страницы редактирования раздела.
  5. Зарегистрировать связи между схемами объекта, детали и страницы редактирования детали при помощи специальных SQL-запросов в системные таблицы.
  6. Выполнить настройку полей детали.

ВАЖНО!

Для того чтобы связать пользовательские схемы создаваемой детали, необходимо внести изменения в системные таблицы SysModuleEdit, SysModulentity и SysDetail базы данных bpm’online при помощи SQL-запросов.

Однако при составлении и выполнении SQL-запроса к базе данных следует быть предельно внимательным. Выполнение неправильно составленного SQL-запроса может привести к повреждению существующих данных и нарушению работы системы.

Описание кейса

Создать пользовательскую деталь [Курьеры] для раздела [Заказы]. Деталь должна отображать список курьеров для текущего заказа.

Алгоритм реализации кейса

1. Создать схему объекта детали

В режиме настройки перейти в раздел [Конфигурация] и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Объект] (рис. 1).

Рис. 1. — Добавление схемы объекта детали

Для схемы объекта детали необходимо в открывшемся дизайнере объектов заполнить ее свойства так, как показано на рисунке 2.

Рис. 2. — Настройка свойств схемы объекта детали

В схему объекта необходимо добавить справочную колонку [Заказ], по которой будет осуществляться связь с разделом [Заказ], и справочную колонку [Контакт], в которой будет храниться контакт курьера. Для обеих колонок необходимо установить признак обязательности для заполнения, чтобы избежать добавления пустых записей. Настройки свойств колонок отображены на рисунках 3 и 4.

Рис. 3. — Настройка свойств колонки [Заказ]

Рис. 4. — Настройка свойств колонки [Контакт]

Схему объекта необходимо сохранить и опубликовать.

2. Создать схему детали

В режиме настройки в разделе [Конфигурация] на вкладке [Схемы] выполнить пункт меню [Добавить] > [Модуль] (рис. 1).

Созданный модуль должен наследовать функциональность базовой схемы детали с реестром BaseGridDetailV2, которая определена в пакете NUI. Для этого необходимо указать эту схему в качестве родительской для создаваемой схемы детали (рис. 5). Остальные свойства необходимо установить так, как показано на рисунке 5. В качестве значения свойства [Пакет] система устанавливает название текущего пакета.

Рис. 5. — Свойства схемы детали

Далее необходимо установить значение Курьеры для локализуемой строки [Caption] схемы детали (рис. 6). В локализуемой строке  [Caption] хранится заголовок детали, отображаемый на странице редактирования.

Рис. 6. — Установка значения локализуемой строки [Caption]

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

define("CourierDetail", [], function() {
    return {
        // Название схемы объекта детали.
        entitySchemaName: "CourierInOrder",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        methods: {},
        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
    };
});

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

3. Создать схему страницы редактирования детали

В режиме настройки в разделе [Конфигурация] на вкладке [Схемы] выполнить пункт меню [Добавить] > [Модуль] (рис. 1).

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

Рис. 7. — Свойства схемы страницы редактирования детали

Для настройки полей, отображаемых на странице редактирования детали, в секцию [Исходный код] дизайнера клиентского модуля необходимо добавить следующий код. Здесь в массиве модификаций diff указываются конфигурационные объекты метаданных для добавления, определения местоположения и привязки полей ввода значений заказа и контакта курьера.

define("CourierDetailPage", [], function() {
    return {
        // Название схемы объекта детали.
        entitySchemaName: "CourierInOrder",
        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": "Order"
                },
                "parentName": "Header",
                "propertyName": "items",
                "index": 0
            },
            // Метаданные для добавления поля [Контакт].
            {
                "operation": "insert",
                //Название поля.
                "name": "Contact",
                "values": {
                    // Настройка расположения поля на странице редактирования.
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 12,
                        "row": 0,
                        "layoutName": "Header"
                    },
                    // Привязка к колонке [Contact] схемы объекта.
                    "bindTo": "Contact"
                },
                "parentName": "Header",
                "propertyName": "items",
                "index": 1
            }
        ]/**SCHEMA_DIFF*/,
        methods: {},
        rules: {}
    };
});

Для применения внесенных изменений созданную схему страницы редактирования детали нужно сохранить.

4. Выполнить настройку детали в замещающей схеме страницы редактирования раздела

Чтобы отобразить деталь на странице редактирования заказа, сначала необходимо создать замещающий клиентский модуль, в котором в качестве родительского объекта указать страницу редактирования заказа OrderPageV2, определенную в пакете Order (рис. 8). Последовательность создания замещающих схем подробно изложена в статье "Создание клиентской схемы".

Рис. 8. — Свойства замещающей схемы страницы редактированя заказа

Для отображения детали [Курьеры] на вкладке [Доставка] страницы редактирования заказа необходимо добавить следующий исходный код. Здесь в секции details определяется новая деталь CourierDetail, а ее расположение на странице редактирования раздела задается в секции массива модификаций diff.

define("OrderPageV2", [], function() {
    return {
        // Название схемы объекта страницы редактирования.
        entitySchemaName: "Order",
        // Перечень добавляемых деталей страницы редактирования.
        details: /**SCHEMA_DETAILS*/{
            // Настройка детали [Курьеры].
            "CourierDetail": {
                // Название схемы детали.
                "schemaName": "CourierDetail",
                // Название схемы объекта детали.
                "entitySchemaName": "CourierInOrder",
                // Фильтрация отображения контактов только для текущего заказа.
                "filter": {
                    // Колонка схемы объекта детали.
                    "detailColumn": "Order",
                    // Колонка схемы объекта раздела.
                    "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: {}
    };
});

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

Уже на этом этапе деталь отображается на странице редактирования раздела [Заказы], однако добавить новую запись в деталь нельзя до тех пор,  пока не будут зарегистрированы связи между схемами детали.

5. Зарегистрировать связи между схемами при помощи SQL-запросов в системные таблицы

Для того чтобы зарегистрировать связь между схемой объекта детали и непосредственно схемой детали, необходимо выполнить SQL-запрос.

DECLARE
-- Название схемы создаваемой детали.
@DetailSchemaName NCHAR(100) = 'CourierDetail',
-- Заголовок детали.
@DetailCaption NCHAR(100) = 'Курьеры',
--Название схемы объекта, к которому привязывается деталь.
@EntitySchemaName NCHAR(100) = 'CourierInOrder'

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) = 'CourierDetailPage',
-- Название схемы объекта, к которому привязывается деталь.
@EntitySchemaName NCHAR(100) = 'CourierInOrder',
-- Заголовок страницы детали.
@PageCaption NCHAR(100) = 'Страница схемы "Курьер в заказе"',
-- Пустая строка.
@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
)

6. Выполнить настройку колонок реестра детали

На этом этапе деталь уже полностью работоспособна, однако записи контактов на детали не отображаются, поскольку не указаны колонки для отображения. Для исправления этого недостатка необходимо вызвать меню действий детали и настроить отображаемые колонки (рис. 9).

Рис. 9. — Меню действий детали

Смотрите также

© Terrasoft 2002-2017.

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

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