Открыть меню
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Присоединенные и связанные свойства. Табличные данные в классах: различия между версиями

Материал из Платформа Эра. Документации
Строка 31: Строка 31:
* ''selectexpand'' - отображение и выпадающего списка для выбора и группы полей выбранной записи
* ''selectexpand'' - отображение и выпадающего списка для выбора и группы полей выбранной записи


Одно из этих значений можно выбрать для свойства в поле cardContents (вкладка UI). Для наглядности перенесем свойство question на вкладку Прочее (задав для него tabCaption, более подробно см. далее) и посмотрим на внешний вид этой вкладки для каждого варианта
Одно из этих значений можно выбрать для свойства в поле cardContents (вкладка UI). Для наглядности перенесем свойство question на вкладку Прочее (задав для него tabCaption, более подробно см. далее) и посмотрим на внешний вид этой вкладки для каждого варианта. Данная настройка влияет только на визуализацию класса, при обращении по API, будет возвращаться только идентификатор записи.


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

Версия от 13:50, 20 января 2025

Предыдущая статья курса: Задание 3. Настройка ролей

Общая информация

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

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

  • Связанные классы
  • Присоединенные классы один к одному
  • Присоединенные классы один ко многим

Связанные классы

Связанный класс. Выпадающий список в интерфейсе

Связанные классы - свойства классов в коллекции data, хранящие ссылку на объект (запись) другого класса. Стандартный подход, по сути отражающий ссылки. В хранилище класса будут храниться идентификаторы объектво (записей) классов.

Для связанных полей в базе данных автоматически создается свойство вида responsibleUser_id, где responsibleUser это имя свойства класса, а _id добавляется автоматически системой.

Иногда бывает необходимо использовать в качестве идентификатора объекта другое поле, как правило уникальное.

Например, сценарии удобно привязывать не по идентификатору, а по текстовому полю code. Это позволяет сохранять связь между объектами при их пересоздании – в частности, можно удалить сценарий и создать новый с таким же значением поля code.

Для реализации такого принципа связи объектов нужно:

  • выставить флажок unique свойству code. Система не позволит создать два объекта с одинаковым значением свойства;
  • выставить флажок lookup свойству code. Это приведет к созданию индекса в базе данных и обеспечит возможность быстрого поиска объектов по code;
  • в поле keyPropertyName класса указать code. После этого поля связанных классов будут иметь вид *_code вместо *_id.

Связанные свойства могут отображаться на карточке в одном из трех вариантов:

  • select - выпадающий список для выбора значений
  • expand - отображение группы полей выбранной записи класса (работает аналогично присоединенным классам, однако изменения в основном классе не внесут изменения в связанный)
  • selectexpand - отображение и выпадающего списка для выбора и группы полей выбранной записи

Одно из этих значений можно выбрать для свойства в поле cardContents (вкладка UI). Для наглядности перенесем свойство question на вкладку Прочее (задав для него tabCaption, более подробно см. далее) и посмотрим на внешний вид этой вкладки для каждого варианта. Данная настройка влияет только на визуализацию класса, при обращении по API, будет возвращаться только идентификатор записи.

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

Также, важно отметить что редактирование полей вложенных объектов приводит к изменению именно в них, так как дублирования данных нет – в объекте Заявка хранится только идентификатор типового вопроса.

Присоединенные классы

Настройки присоединенного свойства "один к одному"

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

Пример отображения присоединенного класса "один к одному"

Присоединенные классы один к одному - свойства классов в коллекции joined, преобразуемые во время работы с классом во вложенный объект с помощью операции, аналогичной JOIN в SQL. При обращении к данным класса, согласно настройкам joined-свойства будет осуществлен поиск записи в присоединенном классе. Запись должна соответствовать заданному в настройках свойства фильтру (т.е. указанная колонка в присоединяемом классе должна иметь совпадающее значение с указанной колонкой в основном классе). В интерфейсе присоединенный класс будет отображаться как блок полей этого класса. С точки зрения кода, этот присоединенный класс будет выглядеть как свойство основного класса, значением которого будет объект присоединенного класса.

Пример присоединенного класса "один ко многим"

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

Подробно, настройка joined-свойств описана в статье Хранение данных. Классы. Поля и действия

Связь с присоединямемым объектом через ID. У присоединяемого объекта в поле client должна быть ссылка на основной объект.

Для построения join'ов можно использовать любые пары свойств у классов. В случае если присоединение происходит с помощью связанных свойств (идентификаторов), необходимо использовать постфикс _id. Пример присоедениения через идентификатор представлен на последнем скриншоте в данной статье.

Следующая статья курса: Задание 4. Взаимодействие классов
Предыдущая статья курса: Задание 3. Настройка ролей