logo

[ELMA3] Выборка дерева объектов

Внимание, эта статья описывает новые возможности, появившиеся в Web API версии 1.0.1

В сервисе EntityService добавлены методы LoadTree и QueryTree, которые принимают дополнительный параметр select. В этот параметр необходимо передавать строку выборки свойств и вложенных объектов. Формат этой строки взят из формата параметра OData $select.

Ниже приводится описание синтаксиса выборки:

ABNF для структуры запроса дерева
* - универсальная подстановка для выбора всех свойств объекта на один уровень вложенности
/ - разделитель уровней вложенности свойств объекта
, - объединяет результаты нескольких запросов

Общий вид структуры запроса:
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 - для типа объекта Задача требуется выбрать для всех подзадач их темы, все свойства из комментариев и полные имена авторов комментариев.

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