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

Создание детали с редактируемым реестром

Glossary Item Box

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

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

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

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

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

ВАЖНО

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

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

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

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

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

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

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

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

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

 

Для создаваемой схемы объекта в качестве родительского объекта необходимо выбрать [Базовый объект] (BaseEntity), определенный в пакете Base (рис. 2). Остальные свойства необходимо установить так, как показано на рисунке 2. В качестве значения свойства [Пакет] необходимо выбрать пакет, в котором ведется пользовательская разработка. Подробнее об установке свойств схемы объекта в дизайнере объекта изложено в статье "Дизайнер объектов".

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

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

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

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

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

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

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

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

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

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

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

Для того чтобы сделать реестр детали редактируемым, в ее схеме необходимо:

  1. Добавить зависимости от модулей ConfigurationGrid, ConfigurationGridGenerator, ConfigurationGridUtilities.
  2. Подключить миксины ConfigurationGridUtilites и OrderUtilities.
  3. Установить для атрибута IsEditable значение true.
  4. В массив модификаций diff добавить конфигурационный объект, в котором устанавливаются свойства и выполняется привязка методов-обработчиков событий реестра детали.

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

UsrCourierServiceDetail// Определение схемы и установка ее зависимостей от других модулей.
define("UsrCourierServiceDetail", ["ConfigurationGrid", "ConfigurationGridGenerator",
    "ConfigurationGridUtilities"], function() {
    return {
        // Название схемы объекта детали.
        entitySchemaName: "UsrCourierService",
        // Перечень атрибутов схемы.
        attributes: {
            // Признак возможности редактирования.
            "IsEditable": {
                // Тип данных — логический.
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                // Тип атрибута — виртуальная колонка модели представления.
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                // Устанавливаемое значение.
                value: true
            }
        },
        // Используемые миксины.
        mixins: {
            ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities",
            OrderUtilities: "Terrasoft.OrderUtilities"
        },
        // Массив модификаций модели представления.
        diff: /**SCHEMA_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
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

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

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

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

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

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

define("OrderPageV2", [], function() {
    return {
        // Название схемы объекта страницы редактирования.
        entitySchemaName: "Order",
        // Перечень добавляемых деталей страницы редактирования.
        details: /**SCHEMA_DETAILS*/{
            // Настройка детали [Курьерcкие службы].
            "UsrCourierServiceDetail": {
                // Название схемы детали.
                "schemaName": "UsrCourierServiceDetail",
                // Название схемы объекта детали.
                "entitySchemaName": "UsrCourierService",
                // Фильтрация отображения контактов только для текущего заказа.
                "filter": {
                    // Колонка схемы объекта детали.
                    "detailColumn": "UsrOrder",
                    // Колонка схемы объекта раздела.
                    "masterColumn": "Id"
                }
            }
        }/**SCHEMA_DETAILS*/,
        // Массив модификаций.
        diff: /**SCHEMA_DIFF*/[
            // Метаданные для добавления детали [Курьерские службы].
            {
                "operation": "insert",
                // Название детали.
                "name": "UsrCourierServiceDetail",
                "values": {
                    "itemType": 2,
                    "markerValue": "added-detail"
                },
                // Контейнеры, в котором размещена деталь.
                // Деталь размещена на вкладке [Доставка].
                "parentName": "OrderDeliveryTab",
                "propertyName": "items",
                // Индекс в списке добавляемых элементов.
                "index": 3
            }
        ]/**SCHEMA_DIFF*/
    };
});

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

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

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

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

Мастер деталей, мастер раздела и деталь с редактируемым реестром

Поскольку деталь с редактируемым реестром не является стандартной деталью приложения bpm'online, то она не может быть добавлена в раздел при помощи мастера деталей. Поэтому при выполнении команды [Настроить деталь] (рис. 8) появится сообщение о том, что деталь не зарегистрирована. Также информация о том, что деталь не зарегистрирована, отображается в мастере разделов (рис. 9) уже после того, как она была добавлена вручную.

Рис. 9. — Отображение незарегистрированной детали в мастере разделов

В общем случае регистрация детали с редактируемым реестром в системе не нужна. Однако, если по каким-либо причинам деталь все же нужно зарегистрировать в системе, то для этого необходимо выполнить следующий SQL-сценарий:

DECLARE 
    -- Название схемы представления создаваемой миникарточки.
    @ClientUnitSchemaName NVARCHAR(100) = 'UsrCourierServiceDetail',
    -- Название схемы объекта, к которому привязывается миникарточка.
    @EntitySchemaName NVARCHAR(100) = 'UsrCourierService',
    -- Название детали.
    @DetailCaption NVARCHAR(100) = 'Курьерская служба'

INSERT INTO SysDetail(Caption, DetailSchemaUId, EntitySchemaUId)
VALUES(@DetailCaption,
     (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @ClientUnitSchemaName),
      (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @EntitySchemaName))

 

ВАЖНО

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

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

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

Рис. 9. — Отображение зарегистрированной детали в мастере разделов

 

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

© Terrasoft 2002-2017.

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

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