Наследование в домене

Этот раздел описывает наследование свойств сущностей.

Ознакомьтесь с правилами нотации в схеме домена. Это позволит присваивать корректные названия создаваемым элементам схемы. Эти названия будут отображаться в интерфейсе системы.

О наследовании

Наследование позволяет использовать описанные свойства сущностей при работе с другими сущностями.

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

Ссылка на родительскую сущность (inherits)

Путь в схеме: entities[].inherits

Наследование задается при помощи поля inherits в описании сущности. Для сущности можно указать ссылку только на одного родителя.

Пример для родителя и потомка, находящихся в одном домене
entities:
  - id: Device
    name: Оборудование
    description: Оборудование
  - id: Server
    name: Сервер
    description: Сервер
    # В этом поле задается наследование: сущность Сервер является потомком сущности Оборудование.
    inherits: Device

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

Местонахождение сущностей Формат ссылки на родителя

Сущности находятся в одном домене.

Data ID Ref (ссылка на ID сущности в текущей схеме).

Сущности находятся в разных доменах.

FQID (полный доменный идентификатор).

Наследование лейбла

Поле label (лейбл) является дополнительным неуникальным, но дружелюбным к пользователю идентификатором объекта. Если лейбл не задан явно для потомка, в представлениях для потомка наследуется лейбл родителя.

Фильтрация и поиск в интерфейсе списка объектов

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

Пример

Имеются следующие цепочки наследования от сущности Родителя (Оборудование):

  • Оборудование → Сервер → Сервер БД;

  • Оборудование → Рабочая станция → Моноблок.

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

  • Оборудование;

  • Сервер;

  • Сервер БД;

  • Рабочая станция;

  • Моноблок.

Наследование атрибутов

В поле attributes в описании потомка включаются только его собственные атрибуты. Ссылки на атрибуты родителя в описание не включаются.

Пример

Родитель — сущность Оборудование. Потомок — сущность Сервер.

В описании сущности-Потомка указываются только атрибуты Потомка (ServerID, ServerLocation).

entities:
  - id: Server
    name: Сервер
    description: Сервер
    # Сущность Сервер - потомок сущности Оборудование.
    inherits: Device
    attributes:
      # Собственный атрибут сущности Сервер; должен быть описан ниже.
      - id: ServerID
        name: ИД сервера
        description: ИД сервера
        dataType: String
      - id: ServerLocation
        name: Местоположение сервера
        description: Местоположение сервера
        dataType: String

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

  • На атрибут потомка можно ссылаться кратко, указывая только ID атрибута. Формат: <ID атрибута>.

  • На атрибут родителя в этом же домене нужно ссылаться одним из следующих способов:

    • указывать только ID сущности и ID атрибута. Формат: <ID сущности>.<ID атрибута>;

    • указывать FQDN домена, ID сущности и ID атрибута. Формат: <FQDN>/<ID сущности>.<ID атрибута>.

  • На атрибут родителя в другом домене нужно ссылаться, упоминая FQDN домена, ID сущности и ID атрибута. Формат: <FQDN>.<ID сущности>.<ID атрибута>.

  • Ссылка на атрибут указывается от той сущности, в которой он изначально объявлен.

Таким образом, полная ссылка на атрибут в формате <FQDN>/<ID сущности>.<ID атрибута> может использоваться во всех случаях.

Пример использования атрибута сущности-Родителя, описанного в другом домене, в представлении сущности-Потомка
# Домен-источник для атрибута.
id: ref.domain.example
entities:
  - id: admin
    attributes:
      - id: admin_name
        name: Имя
        dataType: String
views:
  - id: admin_view
    type: entity
    entity: admin
    widgets:
      - id: editors_name
        type: attribute
        attribute: admin_name

# Основной домен.
id: main.domain.example
entities:
  - id: user
    # Задаем наследование от сущности Родителя (admin).
    inherits: ref.domain.example/admin
    attributes:
      - id: username
        name: Пользователь
        dataType: String
views:
  - id: user_view
    type: entity
    entity: user
    widgets:
    - id: userModalEditor
      type: attribute
      # Ссылка на идентификатор атрибута сущности Родителя из другого домена.
      attribute: ref.domain.example/admin.admin_name
      # Описание виджета
      description: Поле для редактирования имени администратора, закрепленного за пользователем

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

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

Наследование правил данных

Правила данных поддерживают наследование:

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

  • Если в правиле указана ссылка на сущность Родителя, правило применяется только для объектов Родителя.

  • Если в правиле указана ссылка на сущность Потомка, правило применяется только для объектов Потомка.

Наследование действий

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

Пример

Имеется цепочка наследования: Оборудование (Родитель) → Сервер (Потомок). В схеме домена для Родителя определено действие Редактировать, редактирующее объекты Оборудования в домене.

Если в интерфейсе списка объектов Сервера описать виджет действия, который будет ссылаться на действие Родителя Редактировать, пользователям в этом интерфейсе станет доступно действие Редактировать.

Описание действие редактирования объекта Родителя (Оборудование).
actions:
 - id: editDeviceAction
   name: Редактировать
   type: open_modal
   modal: deviceView_EditDeviceForm
   entity: Device
   operation: edit

При описании виджета действия редактирования объекта Потомка (Сервер) нужно сослаться на действие Родителя:

widget:
  - id: editServerButton
    type: action
    # Ссылка на действие Родителя.
    action: editDeviceAction
    control:
      type: regular_button
      icon: example.com/PencilIcon
      description: Кнопка для запуска действия редактирования серве

Особенности работы с действием создания объекта

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

  • Если название действия содержит более одного слова, оно отображается в виджете согласно описанию.

    Пример
    Название действия для сущности-Потомка Принтер Создать запись Принтера отобразится в виджете именно в таком виде.
  • Если название действия содержит только одно слово, в виджете отображается название сущности-Потомка.

    Пример
    Названия действия для сущности-Потомка Принтер Создать или Добавить отобразятся в виджете как Принтер.

Если сослаться в описании Потомка на виджет Родителя, который использует это действие, оно станет также отображаться в интерфейсе списка объектов Потомка.

Наследование в интерфейсах объекта и списка объектов

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

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

  2. Выполните аналогичные настройки для интерфейсов сущностей потомков.

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

Переиспользование элементов Родителя в интерфейсе Потомка

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

При этом подходе необходимо сохранять ссылочную целостность при переиспользовании элементов.

Рассмотрим, как работает наследование в интерфейсе Потомка для разных случаев.

Отображение объектов сущности в схеме домена задается на трех уровнях:

Отображение объектов Потомка не задано ни на одном уровне

В этом случае система отображает для объектов Потомка:

  • Объекты Потомка в табличном отображении Родителя со столбцами, описанными для Родителя.

    Отдельного табличного отображения объектов Потомка в этом случае нет.

  • Модальные окна и панели, заданные для Родителя.

    Панель просмотра объекта Потомка содержит вкладки, виджеты атрибутов и действий, заданные для панели Родителя.

    Модальное окно создания объекта Потомка содержит виджеты атрибутов, заданные для модального окна создания объекта Родителя.

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

Пример. Вы указали, что определенный атрибут Потомка является обязательным, но не описали интерфейс объекта Потомка со ссылкой на этот атрибут. Интерфейс унаследован от Родителя. При попытке вызвать модальное окно создания объекта Потомка отобразится ошибка, потому что в настройках унаследованного от Родителя модального окна такой атрибут не предусмотрен.

Переиспользование настроек форм и вкладок, заданных в интерфейсе Родителя

В этом случае пользователь описывает панель или модальное окно для Потомка, ссылаясь на формы и вкладки Родителя.

При описании представлений Потомка можно использовать ссылки на формы, вкладки, группы виджетов и виджеты сущности Родителя, в том числе если она описана в другом домене. В этом случае ссылка должна содержать FQDN домена, ID сущности и ID атрибута (формат: <FQDN>/<ID сущности>.<ID атрибута>).

Пример использования виджета атрибута сущности из другого домена:
# Домен-источник для виджета.
id: ref.domain/example
entities:
  - id: admin
    attributes:
      - id: admin_name
        name: Имя
        dataType: String
views:
  - id: admin_view
    type: entity
    entity: admin
    # Виджет атрибута.
    widgets:
      - id: editors_name
        type: attribute
        attribute: admin_name

# Основной домен.
id: main.domain/example
entities:
  - id: user
    # Задаем наследование от сущности Родителя (admin).
    inherits: ref.domain.example/admin
    attributes:
      - id: username
        name: Пользователь
        dataType: String
views:
  - id: user_view
    type: entity
    entity: user
    groups:
      - id: UserBlock
        description: Информация об администраторе, обслуживающем пользователя
        type: block
        layout:
          direction: column
        components:
          # Ссылка на виджет сущности из другого домена.
          - widget: ref.domain.example/admin.admin_name
Переиспользование настроек блоков, заданных в интерфейсе Родителя

В этом случае пользователь выполняет шаги:

  1. Описывает формы и вкладки Потомка, ссылаясь на блоки Родителя.

  2. Описывает панель или модальное окно Потомка, ссылаясь на формы и вкладки Потомка.

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

В этом случае пользователь выполняет шаги:

  1. Описывает блоки Потомка, ссылаясь на виджеты Родителя.

  2. Описывает формы и вкладки Потомка, ссылаясь на блоки Потомка.

  3. Описывает панель или модальное окно Потомка, ссылаясь на формы и вкладки Потомка.

Переиспользование настроек атрибутов и действий, заданных в интерфейсе Родителя

В этом случае пользователь выполняет шаги:

  1. Описывает виджеты Потомка, ссылаясь на атрибуты и действия Родителя.

  2. Описывает блоки Потомка, ссылаясь на виджеты Потомка.

  3. Описывает формы и вкладки Потомка, ссылаясь на блоки Потомка.

  4. Описывает панель или модальное окно Потомка, ссылаясь на формы и вкладки Потомка.

Отображение объектов Потомка задано на всех уровнях

В этом случае система отображает для объектов Родителя и Потомка заданные интерфейсы в соответствии с настройками, выполненными отдельно для каждой сущности:

  • Таблица объектов Потомка содержит столбцы, заданные для табличного отображения Потомка.

  • Модальное окно создания объекта Потомка содержит виджеты атрибутов, заданные для модального окна создания объекта Потомка.

  • При выборе объекта Потомка в таблице объектов Родителя отобразится панель Потомка.

  • Панель просмотра объекта Потомка содержит вкладки, виджеты атрибутов и действий, заданные для панели Потомка.

Наследование в представлении объекта

Карточки объекта могут наследовать свойства от представления родительской сущности.

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

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

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

Наследование в списочном представлении

Списочное представление может наследовать свойства от другого списка той же сущности или родительской сущности. В зависимости от элемента применяется следующее поведение:

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

  • Настройки сортировки, фильтрации и связанные сущности наследуются автоматически и могут быть дополнены в текущем представлении.

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

Наследование и примеси

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

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

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

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