Профиль связанной сущности

Сложный

Профиль связанной сущности — элемент управления, который по умолчанию представляет собой информационный блок, наполняемый при загрузке страницы записи информацией о связанной сущности. В приложении элемент используется как профиль связанной записи на странице записи раздела. Например, при открытии страницы контакта в контейнере левой части страницы записи (LeftModulesContainer) отображается профиль контакта и информация о связанном с ним контрагенте. Контрагент связан с контактом по колонке Account объекта Contact. Профиль записи и профиль связанной записи подробно описаны в статье Страницы записей.

Составляющие, которые реализуют функциональность профиля связанной сущности:

  • Класс Profile.
  • BaseProfileSchema — базовая схема для создания профиля связанной сущности. Позволяет отобразить любой набор полей по связанной сущности, а также любое количество модулей. Является родительским классом для класса Profile. Все схемы профилей связанных сущностей должны наследовать схему BaseProfileSchema.
  • BaseMultipleProfileSchema — базовая схема для создания профиля связанной сущности, который содержит в себе несколько профилей и свободно между ними переключается, пользуясь логикой выбора значений из справочников. Основное отличие от базового профиля — возможность встраивать другие профили в текущий профиль. При этом встроенные профили могут взаимодействовать друг с другом посредством сообщений. Профили BaseMultipleProfileSchema должны наследовать базовую схему BaseRelatedProfileSchema, которая реализует профили,зависимые или встроенные в другие профили.

Добавить профиль связанной сущности 

  1. Создайте схему модели представления профиля связанной сущности. Для этого воспользуйтесь инструкцией, которая приведена в статье Клиентский модуль.
  2. В схеме модели представления настройте профиль связанной сущности.

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

    1. В свойство modules добавьте модуль связанного пользовательского профиля контрагента. В свойство masterColumnName свойства viewModelConfig добавьте название колонки, по которой выполняется связь связанного профиля с основной схемой страницы записи. Опираясь на значение этой колонки, класс Profile загружает данные.
    2. В массив модификаций diff добавьте конфигурационный объект с настройками расположения связанного пользовательского профиля контрагента.

По значению колонки, которая указана в свойстве masterColumnName, класс Profile загружает данные. На этапе инициализации объекта профиля класс Profile:

  • Отправляет сообщение GetColumnInfo для получения дополнительной информации о колонке, по которой он связан (фильтры, заголовок и т. д.).
  • Запрашивает значение колонки, по которой он связан.

    • Если связанный профиль не пустой (т. е. в поле связи выбрана запись), то по этой записи инициализируются данные.
    • Если связанный профиль пустой (т. е. в поле связи не выбрана запись), то на месте связанного профиля контрагента отображаются:

      • Название поля, по которому выполняется связь. Например, на странице контакта отображается связанный профиль контрагента, который связан с контактом по полю Контрагент (Account).
      • Добавить контрагент(New account) — создать новую запись в справочнике поля связи.
      • Выбрать (Search) — выбрать существующую запись из списка доступных.

Профиль контакта, у которого присутствует связанный профиль контрагента, представлен на рисунке ниже.

Профиль контакта, у которого отсутствует связанный профиль контрагента, представлен на рисунке ниже.

При очистке поля или изменении значения в объекте профиля выполняется переинициализация данных. При выборе существующей связанной сущности на справочник накладывается бизнес-логика, которая определена в странице записи и связана с атрибутом, который ссылается на эту сущность. Т. е. сохраняется фильтрация, настройки колонок запроса и т. д. Удаление атрибута из схемы страницы записи приведет к удалению бизнес-логики.

Добавить пользовательский профиль связанной сущности на страницу записи
Сложный

Пример. Добавить связанный пользовательский профиль контрагента на страницу контакта.

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

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

  3. Заполните свойства схемы.

    • Код (Code) — "UsrAccountProfileSchema".
    • Заголовок (Title) — "Профиль контрагента" ("Account profile").
    • Родительский объект (Parent object) — выберите "AccountProfileSchema".
  4. В объявлении класса модели представления в качестве зависимостей добавьте миксин ProfileSchemaMixin.
  5. Настройте связанный пользовательский профиль контрагента.

    1. В свойство mixins добавьте миксин ProfileSchemaMixin.
    2. В массив модификаций diff добавьте конфигурационный объект с настройками связанного пользовательского профиля контрагента.

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

    UsrAccountProfileSchema
    /* В качестве зависимостей укажите миксин ProfileSchemaMixin. */
    define("UsrAccountProfileSchema", ["ProfileSchemaMixin"], function () {
        return {
            /* Название схемы объекта. */
            entitySchemaName: "Account",
            /* Миксины. */
            mixins: {
                /* Миксин, который содержит функции для получения иконок и картинок профиля. */
                ProfileSchemaMixin: "Terrasoft.ProfileSchemaMixin"
            },
            /* Массив модификаций diff. */
            diff: /**SCHEMA_DIFF*/[
                {
                    /* Операция добавления. */
                    "operation": "insert",
                    /* Имя сущности. */
                    "name": "Contact",
                    /* Имя родительского элемента, в который выполняется вставка. */
                    "parentName": "ProfileContentContainer",
                    /* Свойство элемента родителя, с которым выполняется операция. */
                    "propertyName": "items",
                    /* Значение добавляемого элемента. */
                    "values": {
                        /* Привязка к значению свойства Account объекта Contact. */
                        "bindTo": "Account",
                        /* Конфигурация разметки. Позиционирование элемента. */
                        "layout": {
                            "column": 3,
                            "row": 10,
                            "colSpan": 19
                        }
                    }
                }
                /* Другие конфигурационные объекты массива модификаций. */
            ]/**SCHEMA_DIFF*/
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

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

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

  3. Заполните свойства схемы.

    • Код (Code) — "ContactPageV2".
    • Заголовок (Title) — "Схема отображения карточки контакта" ("Display schema - Contact card").
    • Родительский объект (Parent object) — выберите "ContactPageV2".
  4. В объявлении класса модели представления в качестве зависимостей добавьте модули BaseFiltersGenerateModule, BusinessRuleModule, ContactPageV2Resources, ConfigurationConstants, ContactCareer, DuplicatesSearchUtilitiesV2, UsrAccountProfileSchema.
  5. Добавьте связанный пользовательский профиль контрагента на страницу контакта.

    1. В свойство modules добавьте модуль связанного пользовательского профиля контрагента.
    2. В массив модификаций diff добавьте конфигурационный объект с настройками расположения связанного пользовательского профиля контрагента.

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

    ContactPageV2
    /* Определение схемы страницы записи и ее зависимостей. */
    define("ContactPageV2", ["BaseFiltersGenerateModule", "BusinessRuleModule", "ContactPageV2Resources", "ConfigurationConstants", "ContactCareer", "DuplicatesSearchUtilitiesV2", "UsrAccountProfileSchema"], function (BaseFiltersGenerateModule, BusinessRuleModule, resources, ConfigurationConstants, ContactCareer) {
        return {
            entitySchemaName: "Contact",
            /* Модули. */
            modules: /**SCHEMA_MODULES*/{
                /* Модуль профиля контрагента. */
                "AccountProfile1": {
                    /* Конфигурация профиля. */
                    "config": {
                        /* Название схемы. */
                        "schemaName": "UsrAccountProfileSchema",
                        /* Признак, который сообщает об инициализации конфигурации схемы. */
                        "isSchemaConfigInitialized": true,
                        /* Признак, который сообщает, что не используется HistoryState. */
                        "useHistoryState": false,
                        /* Параметры профиля. */
                        "parameters": {
                                /* Конфигурация модели представления. */
                            "viewModelConfig": {
                                /* Название колонки связанной сущности. */
                                masterColumnName: "Account"
                            }
                        }
                    }
                }
            }/**SCHEMA_MODULES*/,
            /* Массив модификаций. */
            diff: /**SCHEMA_DIFF*/[
                {
                    /* Операция добавления. */
                    "operation": "insert",
                    /* Имя родительского элемента, в который выполняется вставка. */
                    "parentName": "LeftModulesContainer",
                    /* Свойство элемента родителя, с которым выполняется операция. */
                    "propertyName": "items",
                    /* Имя сущности. */
                    "name": "AccountProfile1",
                    /* Значение добавляемого элемента. */
                    "values": {
                        /* Тип элемента — модуль. */ 
                        "itemType": Terrasoft.ViewItemType.MODULE
                    }
                }
            ]/**SCHEMA_DIFF*/
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

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

Чтобы посмотреть результат выполнения примера, обновите страницу раздела Контакты (Contacts).

В результате выполнения примера на страницу контакта добавлен связанный пользовательский профиль контрагента.

Схема BaseProfileSchema
Средний

BaseProfileSchema — базовая схема для создания профиля связанной сущности. Позволяет отобразить любой набор полей по связанной сущности, а также любое количество модулей. Реализована в пакете NUI. Схема является схемой модели представления. Описание свойств схемы содержится в статье Клиентская схема. Все схемы профилей связанных сущностей должны наследовать схему BaseProfileSchema.

Атрибуты 

MasterColumnValue GUID

Значение главной колонки.

MasterColumnInfo CUSTOM_OBJECT

Информация о главной колонке.

DataItemMarkerTpl TEXT

Шаблон маркера элемента данных.

Сообщения 

Сообщения базовой схемы
Название Режим Направление Описание
EntityInitialized Широковещательное Подписка Событие инициализации основной сущности.
GetEntityColumnChanges Широковещательное Подписка Обрабатывает изменения колонки сущности.
GetColumnsValues Адресное Публикация Возвращает запрошенные значения колонки.
GetLookupQueryFilters Адресное Публикация Получает справочник фильтров запроса.
GetColumnInfo Адресное Публикация Возвращает информацию колонки.
UpdateCardProperty Адресное Публикация Изменяет значение карточки модели.
OpenCard Адресное Публикация Открывает карточку.
CardModuleResponse Адресное Подписка Ответное сообщение карточки модуля.

Режимы сообщений представлены перечислением Terrasoft.core.enums.MessageMode, а направления сообщений — перечислением Terrasoft.core.enums.MessageDirectionType. Перечисление MessageMode описано в Библиотеке JS классов. Перечисление MessageDirectionType описано в Библиотеке JS классов.

Методы 

getMiniPageConfig(options)

Возвращает конфигурацию мини-карточки.

Параметры
{Object} options Свойства мини-карточки.
getLookupConfig(config)

Возвращает справочник конфигурации открытого справочника.

Параметры
{Object} config Конфигурация открытой справочной страницы.
getVisibleBlankSlate()

Возвращает тег видимости контейнера BlankSlateContainer.

getVisibleContent()

Возвращает тег видимости контейнера ProfileContentContainer.

getClearButtonHint()

Возвращает всплывающую подсказку к кнопке Очистить (Clear).

getUpdateCardPropertyConfig(response)

Получает свойства конфигурации обновления карточки при ее сохранении.

Параметры
{Object} response Ответ сервера.
Схема BaseMultipleProfileSchema
Средний

BaseMultipleProfileSchema — базовая схема для создания профиля связанной сущности, который содержит в себе несколько профилей и свободно между ними переключается, пользуясь логикой выбора значений из справочников. Реализована в пакете NUI. Схема является схемой модели представления. Описание свойств схемы содержится в статье Клиентская схема. Профили BaseMultipleProfileSchema должны наследовать базовую схему BaseRelatedProfileSchema, которая реализует профили,зависимые или встроенные в другие профили.

Атрибуты 

EditColumnName STRING

Название колонки свойства карточки.

MasterColumnNames CUSTOM_OBJECT

Массив имен основных колонок модулей.

Сообщения 

Сообщения базовой схемы
Название
Режим
Направление
Описание
ProfileEntityColumnChanges Широковещательное Публикация Обрабатывает изменения колонки сущности профиля.
GetProfileEntityColumnChanges Адресное Подписка Возвращает запрошенные значения колонки.
ProfileOpenCard Адресное Подписка Отправляет запрос открытой карточки с конфигурацией.

Режимы сообщений представлены перечислением Terrasoft.core.enums.MessageMode, а направления сообщений — перечислением Terrasoft.core.enums.MessageDirectionType. Перечисление MessageMode описано в Библиотеке JS классов. Перечисление MessageDirectionType описано в Библиотеке JS классов.

Схема BaseRelatedProfileSchema
Средний

BaseRelatedProfileSchema — базовая схема, которая реализует профили,зависимые или встроенные в другие профили. Реализована в пакете NUI. Схема является схемой модели представления. Описание свойств схемы содержится в статье Клиентская схема. Является родительской схемой для базовой схемы BaseMultipleProfileSchema создания профиля связанной сущности, который содержит в себе несколько профилей и свободно между ними переключается, пользуясь логикой выбора значений из справочников.

Сообщения 

Сообщения базовой схемы
Название
Режим
Направление
Описание
ProfileEntityColumnChanges Широковещательное Подписка Обрабатывает изменения колонки сущности профиля.
GetProfileEntityColumnChanges Адресное Публикация Отправляет запрошенные значения колонки.
ProfileOpenCard Адресное Публикация Отправляет запрос открытой карточки с конфигурацией.

Режимы сообщений представлены перечислением Terrasoft.core.enums.MessageMode, а направления сообщений — перечислением Terrasoft.core.enums.MessageDirectionType. Перечисление MessageMode описано в Библиотеке JS классов. Перечисление MessageDirectionType описано в Библиотеке JS классов.