Примеси

Этот раздел описывает примеси — механизм расширения сущностей.

О примесях

Примеси — это механизм расширения функциональности сущностей за счет встраивания данных и интерфейсных элементов из другого домена. Это обеспечивает переиспользование конфигурации представлений и логики без необходимости изменять исходную схему домена. При этом сами примеси могут наследоваться по иерархии представлений.

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

Общие поля блока mixins

Путь в схеме: mixins[]

Блок mixins представляет собой массив объектов, описывающих правила подмешивания. Описания примесей включают как общие, так и специфические поля, зависящие от типа конкретной примеси.

Описание каждой примеси включает следующие поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

Data ID

Уникальный идентификатор примеси.

name

нет

строка

Наименование примеси.

description

нет

строка

Описание примеси.

weight

нет

целое число

Приоритет примеси. Чем меньше значение, тем выше приоритет.

Ознакомьтесь с описанием приоритетов.

useForChild

нет (по умолчанию: true)

логическое

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

Ознакомьтесь с описанием наследования.

type

да

перечисление

Тип подмешивания: linkage или view.

Ознакомьтесь с описанием типов.

entity

да

объект или Data ID Ref

Объект встраивания примеси. Структура поля определяется типом примеси и описана далее для каждого типа.

views

да

массив

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

Ознакомьтесь с описанием поля views.

Пример описания примесей
mixins:
  - id: linkage_mixin
    linkage: incident_to_gossopka
    type: linkage
    entity:
      to: unit.example.com/Incident
      from: gossopka-card.example.com/GossopkaNotification
    views:
      - id: linkage_mixin_panel
        type: panel
        to:
            panel: panels_infoIncident
        change:
          add:
            tabs:
              tabs:
                - tab: tabs_main
                  label: Данные ГосСопка

      - id: linkage_mixin_list
        type: list
        to:
            list: lists_incidents
        change:
          add:
            list: lists_GNlist

      - id: linkage_mixin_create_form
        type: form
        to:
            form: forms_panels_newIncident
        change:
          add:
            form: blocks_forms_new

      - id: linkage_mixin_edit_form
        type: form
        to:
            form: forms_panels_edit
        change:
          add:
            form: blocks_forms_edit

  - id: view_mixin
    type: view
    entity: unit.example.com/Incident
    views:
      - id: view_mixin_tab
        type: tab
        to:
          tab: tabs_info
        fromView: views_main
        change:
          add:
            components:
                - block: blocks_info_main

Типы примесей (type) и специфические поля

Путь в схеме: mixins[].type

Существует два типа примесей:

  • linkage — примеси на основе связей. Используют связанный объект, из которого заимствуются данные и логика действий.

  • view — примеси компонентов интерфейса. Расширяют представление целевого объекта без создания связи с исходным объектом. Отображение атрибутов и выполнение действий происходит в контексте целевого объекта.

Примеси на основе связей (type: linkage)

Примеси на основе связей расширяют представления за счет использования данных связанного объекта. Одна и та же примесь может использоваться в нескольких сущностях.

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

  • 1-1 — примесь может находиться с любой стороны связи.

  • 1-N — примесь должна находиться со стороны 1.

При создании объекта целевой сущности создается и объект примеси; между этими объектами устанавливается связь.

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

Если объект примеси или связь с ним удалены, подмешанные данные не отображаются в целевом объекте. При этом можно установить связь с другим объектом сущности, тогда в целевом объекте появятся данные нового объекта.

Описание примеси типа linkage дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

linkage

да

Data ID Ref

Связь, на основе которой строится примесь. Допустима связь со значением type: 1_1 или 1_n.

entity

да

объект

Описание направления примеси.

Ознакомьтесь с описанием поля entity.

Направление примеси на основе связи (entity)

Путь в схеме: mixins[].entity

Поле entity в примесях с type: linkage имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

from

да

Data ID Ref

Сущность, которая служит источником примеси.

to

да

Data ID Ref

Целевая сущность, в которую встраивается примесь.

Примеси компонентов интерфейса (type: view)

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

  • Целевая сущность и сущность примеси находятся в одном домене.

  • В представлении сущности примеси установлен параметр isMixin: true.

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

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

Описание примеси типа view дополнительно включает поле:

Поле Обязательность и значение по умолчанию Тип данных Описание

entity

да

Data ID Ref

Целевая сущность, в которую встраивается примесь.

Источники примесей компонентов интерфейса определяются в массиве views отдельно для каждого компонента.

Приоритет примеси (weight)

Путь в схеме: mixins[].weight

Поле weight определяет приоритет использования примеси: чем меньше число, тем выше приоритет. Если приоритет не указан, он считается наименьшим.

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

  1. Если у примесей разные веса, сначала встраивается примесь с наивысшим приоритетом.

  2. Если у нескольких примесей одинаковый приоритет или приоритет не указан:

    1. Примеси сортируются по полю id в алфавитном порядке. Первой встраивается примесь, идентификатор которой выше по алфавиту.

    2. Если у примесей разные типы, сначала встраивается примесь с type: view.

Логика работы наследования (useForChild)

Путь в схеме: mixins[].useForChild

Если для примеси установлено значение параметра useForChild: true, она автоматически встраивается в представления всех дочерних сущностей, которые используют то же представление, что и родительская сущность. Это позволяет добавить примесь один раз на верхнем уровне иерархии и обеспечить ее доступность для всех наследников.

Если установлено значение useForChild: false, примесь будет добавлена исключительно в родительское представление.

Подмешиваемые представления (views)

Путь в схеме: mixins[].views[]

Блок views в структуре примеси определяет подмешиваемые представления и их компоненты. Существуют следующие варианты подмешивания:

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

  • Замена — компоненты целевого представления заменяются компонентами примеси.

Описания примеси представлений включают как общие, так и специфические поля, зависящие от типа представления.

Общие поля представлений

Описание каждой примеси представления включает следующие поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

id

да

View ID

Идентификатор примеси компонентов.

type

да

перечисление

Тип представления.

Ознакомьтесь с описанием поля type.

fromView

да (при type: view)

View ID Ref

Представление, из которого будут подмешаны компоненты. Доступно для примесей с type: view.

to

да

объект

Содержит поле с View ID Ref целевого представления.

Структура описана далее для каждого типа представления.

change

да (при view: linkage)

объект

Компоненты, которые должны быть добавлены или удалены в целевом представлении.

Ознакомьтесь с описанием поля change

replace

нет

объект

Содержит поле с View ID Ref представления, компонентами которого будут заменены компоненты целевого представления. Доступно для примесей с type: view.

Структура описана далее для каждого типа представления.

Изменение компонентов в целевом представлении (change)

Путь в схеме: mixins[].views[].change

Поле change имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

add

да

объект

Компоненты, которые должны быть подмешаны в целевое представление. Содержит ссылки на компоненты и определение их расположения в поле position.

Структура описана далее для каждого типа представления.

delete

нет

объект

Компоненты, которые будут удалены в целевом представлении. Доступно для примесей с type: view.

Структура описана далее для каждого типа представления.

Расположение добавленных компонентов (position)

Путь в схеме: mixins[].views[].….position

Поле position имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

type

нет (по умолчанию — end)

перечисление

Расположение добавленных компонентов среди компонентов целевого представления. Доступные значения:

  • begin — в начале;

  • after — после компонента, указанного в поле after;

  • end — в конце.

after

да (при type: after)

объект

Содержит поле с View ID Ref компонента целевого представления, после которого должны отображаться добавленные компоненты.

Структура описана далее для каждого типа представления.

Типы представлений (type)

Путь в схеме: mixins[].views[].type

Поле type в записи группы может принимать следующие значения:

  • form — модальное окно создания или редактирования объекта;

  • tab — вкладка;

  • panel — панель компактного представления объекта;

  • page — страница полноэкранного представления объекта;

  • list — список объектов.

Примесь модального окна (type: form)

При примеси модального окна к целевому представлению добавляются указанные виджеты и блоки примеси.

К окну создания объекта необходимо добавить виджеты всех обязательных атрибутов сущности примеси.

Описание примеси type: form дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

to.form

да

View ID Ref

Целевая форма, в которое должны быть добавлены виджеты и блоки.

change.add.form

да (при type: linkage)

View ID Ref

Форма, компоненты которой должны быть добавлены к целевой форме.

change.add.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных компонентов среди компонентов целевой формы: begin, after или end.

change.add.position.after

да (при position.type: after)

объект

Содержит одно из полей с идентификатором компонента, после которого будут отображаться добавленные компоненты:

change.delete.components

нет

массив

Ссылки на блоки, а также виджеты, непосредственно включенные в модальное окно, которые будут удалены из целевого представления. Доступно для примесей с type: view.

replace.form

нет

View ID Ref

Форма, компонентами которой будут заменены компоненты целевой формы. Доступно для примесей с type: view.

Примесь вкладки (type: tab)

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

Описание примеси type: tab дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

to.tab

да

View ID Ref

Целевая вкладка, к которой будут добавлены виджеты и блоки.

change.add.components

да (при type: linkage)

массив

Ссылки на блоки и виджеты, которые должны быть добавлены к вкладке. Взаимное расположение определяется порядком в массиве.

change.add.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных компонентов среди компонентов целевой вкладки: begin, after или end.

change.add.position.after

да (при position.type: after)

объект

Содержит одно из полей с идентификатором компонента, после которого будут отображаться добавленные компоненты:

change.delete.components

нет

массив

Ссылки на блоки, а также виджеты, непосредственно включенные в состав вкладки, которые будут удалены из целевого представления. Доступно для примесей с type: view.

replace.components

нет

View ID Ref

Ссылки на блоки и виджеты, которыми будут заменены компоненты целевой вкладки. Доступно для примесей с type: view.

Примесь панели (type: panel)

При примеси панели к целевому представлению добавляются указанные вкладки и действия меню примеси.

Описание примеси type: panel дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

to.panel

да

View ID Ref

Целевая панель, на которую будут добавлены вкладки и действия меню.

change.add.tabs.tabs

нет

массив

Ссылки на вкладки, которые должны быть добавлены к панели.

Ознакомьтесь с описанием поля tabs.

change.add.tabs.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных вкладок среди вкладок целевой панели: begin, after или end.

change.add.tabs.position.after.tab

да (при position.type: after)

View ID Ref

Вкладка, правее которой будут отображаться добавленные вкладки.

change.add.menu.menu

нет

массив

Ссылки на действия, которые должны быть добавлены к меню панели.

Ознакомьтесь с описанием поля menu.

change.add.menu.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных действий среди действий меню целевой панели: begin, after или end.

change.add.menu.position.after.action

да (при position.type: after)

View ID Ref

Действие в меню, ниже которого будут отображаться добавленные действия.

change.delete.tabs

нет

массив

Массив ссылок на вкладки, которые будут удалены из целевой карточки, в формате tab: <View ID Ref>. Доступно для примесей с type: view.

change.delete.menu

нет

массив

Массив ссылок на действия, которые будут удалены из меню целевой панели, в формате action: <View ID Ref>. Доступно для примесей с type: view.

replace.tabs

нет

массив

Ссылки на вкладки, которыми будут заменены вкладки целевой панели. Доступно для примесей с type: view.

Ознакомьтесь с описанием поля tabs.

replace.menu

нет

массив

Ссылки на действия, которыми будут заменены действия меню целевой панели. Доступно для примесей с type: view.

Ознакомьтесь с описанием поля menu.

Вкладки, подмешиваемые к панели (tabs)

Путь в схеме:

  • mixins[].views[].change.add.tabs.tabs[]

  • mixins[].views[].replace.tabs.tabs[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

tab

да

View ID Ref

Подмешиваемая вкладка.

label

нет

строка

Отображаемое название вкладки.

Ознакомьтесь с описанием поля label.

Путь в схеме:

  • mixins[].views[].change.add.menu.menu[]

  • mixins[].views[].replace.menu.menu[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

action

да

View ID Ref

Подмешиваемое действие меню.

label

нет

строка

Отображаемое название действия.

Ознакомьтесь с описанием поля label.

Примесь полноэкранной карточки (type: page)

При примеси полноэкранной карточки к целевому представлению добавляются указанные группы виджетов и действия меню примеси. Тип и количество примешиваемых групп зависят от групп, используемых в целевой карточке:

  • Если в целевой карточке используются вкладки, то можно примешать одну или несколько вкладок. Расположение добавленных вкладок определяется в схеме.

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

Описание примеси type: page дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

to.page

да

View ID Ref

Целевая полноэкранная карточка, в которую будут добавлены вкладки и действия меню.

change.add.tabs

нет

объект

Вкладки, которые будут добавлены к целевой карточке. Доступно, если карточка состоит из вкладок.

Включает следующие поля:

change.add.block

нет

View ID Ref

Ссылка на блок, который будет добавлен к целевой карточке. Доступно, если в карточке используется блок.

change.add.actionPanel.actionPanel

да

массив

Ссылки на виджеты действий, которые будут добавлены к панели действий карточки.

Ознакомьтесь с описанием поля actionPanel.

change.add.actionPanel.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных действий среди действий меню целевой панели: begin, after или end.

change.add.actionPanel.position.after.widget

да (при position.type: after)

View ID Ref

Действие в меню, ниже которого будут отображаться добавленные действия.

change.delete.tabs

нет

массив

Массив ссылок на вкладки, которые будут удалены из целевой карточки, в формате tab: <View ID Ref>. Доступно для примесей с type: view.

change.delete.actionPanel

нет

массив

Массив ссылок на виджеты действий, которые будут удалены с панели действий целевой карточки, в формате widget: <View ID Ref>. Доступно для примесей с type: view.

replace.tabs

нет

массив

Ссылки на вкладки, которыми должны быть заменены вкладки целевой панели. Доступно для примесей с type: view, если в карточке используются вкладки.

Ознакомьтесь с описанием поля tabs.

replace.block

нет

View ID Ref

Ссылка на блок, которым будет заменен блок целевой карточки. Доступно для примесей с type: view, если в карточке используется блок.

replace.actionPanel

нет

массив

Ссылки на виджеты действий, которыми будут заменены виджеты панели действий целевой карточки. Доступно для примесей с type: view.

Ознакомьтесь с описанием поля actionPanel.

Вкладки, подмешиваемые к панели (tabs)

Путь в схеме:

  • mixins[].views[].change.add.tabs.tabs[]

  • mixins[].views[].replace.tabs.tabs[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

tab

да

View ID Ref

Подмешиваемая вкладка.

label

нет

строка

Отображаемое название вкладки.

Ознакомьтесь с описанием поля label.

Виджеты, подмешиваемые к панели действий карточки (actionPanel)

Путь в схеме:

  • mixins[].views[].change.add.actionPanel.actionPanel[]

  • mixins[].views[].replace.actionPanel.actionPanel[]

Каждый элемент массива имеет следующую структуру:

Поле Обязательность и значение по умолчанию Тип данных Описание

widget

да

View ID Ref

Подмешиваемый виджет действия.

label

нет

строка

Отображаемое название действия.

Ознакомьтесь с описанием поля label.

Примесь списочного представления (type: list)

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

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

Описание примеси type: list дополнительно включает поля:

Поле Обязательность и значение по умолчанию Тип данных Описание

to.list

да

View ID Ref

Целевое списочное представление, в которое будут добавлены столбцы и виджеты панели действий.

change.add.list

да (при type: linkage)

View ID Ref

Списочное представление, компоненты которого должны быть добавлены к целевому списку.

change.add.position.type

нет (по умолчанию — end)

перечисление

Расположение добавленных компонентов среди компонентов целевой формы: begin, after или end.

change.add.tabs.position.after.column

да (при position.type: after)

View ID Ref

Столбец, правее которого будут отображаться добавленные столбцы.

change.delete.columns

нет

массив

Массив ссылок на столбцы, которые будут удалены из целевого представления, в формате column: <View ID Ref>. Доступно для примесей с type: view.

change.delete.actionPanel

нет

массив

Массив ссылок на виджеты, которые будут удалены с панели действий целевого представления, в формате widget: <View ID Ref>. Доступно для примесей с type: view.

replace.list

нет

View ID Ref

Списочное представление, компонентами которого будут заменены компоненты целевого списка. Доступно для примесей с type: view.

Была ли полезна эта страница?

Обратная связь