Создать мини-карточку добавления

Сложный

Пример. Создать пользовательскую мини-карточку добавления новой записи в раздел Продукты (Products). Мини-карточка должна добавлять базовый набор полей Название (Name) и Код (Code).

1. Создать схему модели представления мини-карточки 

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Модель представления страницы (Add —> Page view model).

  3. В дизайнере схем заполните свойства схемы:

    • Код (Code) — "UsrProductMiniPage".
    • Заголовок (Title) — "Мини-карточка продукта" ("Product Mini Page").
    • Родительский объект (Parent object) — выберите "BaseMiniPage".

    Для применения заданных свойств нажмите Применить (Apply).

2. Отобразить поля основного объекта 

В дизайнере схем добавьте необходимый исходный код.

  1. В качестве схемы объекта укажите схему Product .
  2. Объявите атрибут MiniPageModes и присвойте ему массив, содержащий коллекцию необходимых операций, выполняемых мини-карточкой.

    На заметку. Если кроме операции добавления новой записи требуется отображение мини-карточки на странице раздела (см. Создать пользовательскую мини-карточку), то в массив, присваиваемый атрибуту MiniPageModes, также необходимо добавить значение this.Terrasoft.ConfigurationEnums.CardOperation.VIEW.

  3. Добавьте необходимые модификации в массив модификаций diff модели представления .

    Элементы модели представления базовой мини-карточки:

    • MiniPage — поле карточки.
    • HeaderContainer — заголовок карточки (по умолчанию размещается в первом ряду поля карточки).

    В примере в массив модификаций diff добавлены два объекта, которые конфигурируют поля Name и Code.

Исходный код схемы модели представления приведен ниже.

UsrProductMiniPage.js — отобразить поля объекта
define("UsrProductMiniPage", ["UsrProductMiniPageResources"],
    function(resources) {
        return {
            entitySchemaName: "Product",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            attributes: {
                "MiniPageModes": {
                    "value": [this.Terrasoft.ConfigurationEnums.CardOperation.ADD]
                }
            },
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "parentName": "MiniPage",
                    "propertyName": "items",
                    "name": "Name",
                    "values": {
                        "isMiniPageModelItem": true,
                        "layout": {
                            "column": 0,
                            "row": 1,
                            "colSpan": 24
                        },
                        "controlConfig": {
                            "focused": true
                        }
                    }
                },
                {
                    "operation": "insert",
                    "parentName": "MiniPage",
                    "propertyName": "items",
                    "name": "Code",
                    "values": {
                        "isMiniPageModelItem": true,
                        "layout": {
                            "column": 0,
                            "row": 2,
                            "colSpan": 24
                        }
                    }
                }
            ]/**SCHEMA_DIFF*/
        };
    });

3. Зарегистрировать мини-карточку в базе данных 

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

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

UPDATE SysModuleEdit
SET MiniPageSchemaUId = (
    SELECT TOP 1 UId
    FROM SysSchema
    WHERE Name = @ClientUnitSchemaName
)
WHERE SysModuleEntityId = (
    SELECT TOP 1 Id
    FROM SysModuleEntity
    WHERE SysEntitySchemaUId = (
        SELECT TOP 1 UId
        FROM SysSchema
        WHERE Name = @EntitySchemaName
            AND ExtendParent = 0
    )
);

В результате выполнения запроса уникальный идентификатор мини-карточки будет добавлен  в таблицу [SysModuleEdit] в поле [MiniPageSchemaUId] записи, соответствующей разделу Продукты (Products) .

scr_table.png

4. Добавить системную настройку 

В разделе Системные настройки (System settings) дизайнера системы добавьте системную настройку со следующими свойствами :

  • Название (Name) — "HasProductMiniPageAddMode".
  • Код (Code) — "HasProductMiniPageAddMode".
  • Тип (Type) — "Логическое" ("Boolean").
  • Значение по умолчанию (Default value) — признак установлен.
scr_syssetting.png

Результат выполнения примера 

В результате выполнения примера при добавлении нового продукта будет отображаться мини-карточка с двумя полями.

scr_result-01.png

После сохранения мини-карточки соответствующая запись появится в реестре раздела.

scr_result-02.png

Важно. Запись в реестре раздела будет отображена только после обновления страницы браузера. Чтобы запись отображалась сразу же после сохранения мини-карточки, необходимо добавить соответствующую функциональность в схему мини-карточки и страницы раздела, используя механизм сообщений (см. статью Sandbox).