[ELMA3] Выборка дерева объектов
В сервисе EntityService добавлены методы LoadTree и QueryTree, которые принимают дополнительный параметр select. В этот параметр необходимо передавать строку выборки свойств и вложенных объектов. Формат этой строки взят из формата параметра OData $select.
Ниже приводится описание синтаксиса выборки:
ABNF для структуры запроса дерева
* - универсальная подстановка для выбора всех свойств объекта на один уровень вложенности
/ - разделитель уровней вложенности свойств объекта
, - объединяет результаты нескольких запросов
Общий вид структуры запроса:
COMMA = ","
star = "*"
separator = "/"
propertyName = Имя свойства простого типа
navigationProperty = Имя свойства типа Объект, Список объектов, Блок
selectItem = star | propertyName | navigationProperty [ separator selectItem ]
selectClause = selectItem *( COMMA selectItem )
/ - разделитель уровней вложенности свойств объекта
, - объединяет результаты нескольких запросов
Общий вид структуры запроса:
COMMA = ","
star = "*"
separator = "/"
propertyName = Имя свойства простого типа
navigationProperty = Имя свойства типа Объект, Список объектов, Блок
selectItem = star | propertyName | navigationProperty [ separator selectItem ]
selectClause = selectItem *( COMMA selectItem )
Например, вы можете передать список нужных свойств через запятую, или выбрать данные связанного объекта:
- * - специальный знак, означающий, что надо выбрать все доступные свойства объекта на один уровень. Этот знак может применяться на любом уровне вложенности;
- Subject, CreationAuthor, Description, StartDate, EndDate – для типа объекта Задача требуется выбрать только свойства Тема, Автор, Описание, Дата начала и Дата окончания. В этом случае остальные свойства просто не будут возвращены в ответе сервера;
- Subject, Description, CreationAuthor/UserName, CreationAuthor/FullName - для типа объекта Задача требуется выбрать только свойства Тема, Описание и для свойства Автор (тип объекта Пользователь) выбрать свойства Логин и Полное имя;
- Subject,Comments/* – для типа объекта Задача требуется выбрать свойство Тема и для всех объектов в свойстве Комментарии выбрать все их доступные свойства;
- ChildTasks/Subject,ChildTasks/Comments/*, ChildTasks/Comments/CreationAuthor/FullName - для типа объекта Задача требуется выбрать для всех подзадач их темы, все свойства из комментариев и полные имена авторов комментариев.
Таким образом, вы можете комбинировать уровни связанных объектов и требуемые свойства для минимизации количества запросов и их размера.