Частичная и жадная загрузка полей приложения
При работе с API получения списка элементов можно задавать правила выборки полей приложения.
Чтобы добавить правило выборки, используйте конструкцию fields
:
{
"fields": {
}
}
Доступно два способа загрузки полей приложения:
- частичная;
- жадная.
Частичная загрузка полей приложения
Вы можете загружать только выбранные поля приложения и игнорировать остальные.
При этом возможны два варианта использования:
- выборка всех полей и исключение указанных;
- загрузка только выбранных полей.
Выборка всех полей и исключение указанных
{
"fields": {
"*": true,
"Field_Name_1": false,
"Field_Name_N": false
}
}
В данном примере:
"*": true
— означает, что загружаются все поля приложения;"Field_Name_N": false
— в строках указаны поля, которые исключаются из выборки.
Обратите внимание, поле __id
загружается всегда.
Загрузка только выбранных полей
{
"fields": {
"Field_Name_1": true,
"Field_Name_N": true
}
}
В данном примере:
"*": false
— опущено, так какfalse
является значением по умолчанию;"Field_Name_N": true
— в строках указаны поля, которые добавляются в выборку.
Обратите внимание, поле __id
загружается всегда.
Жадная загрузка полей приложения
Важно: жадная зарузка полей доступна только для редакции ELMA365 On-Premises начиная с версии системы 2023.9. Для её использования включите фича-флаг collectorEagerLoadEnabled.
Вы можете загружать вложенные поля следующих типов:
- Приложение;
- Пользователи;
- Роль;
- Таблица.
Содержимое полей типов Приложение, Пользователи и Роль сортируется по дате создания (поле __createdAt
). Содержимое типа данных Таблица сортируется по порядку элементов в таблице.
Также при жадной загрузке полей приложения учитываются заданные для них права доступа.
Рассмотрим примеры.
Загрузка всех полей приложения и вложенных полей нескольких из них
{
"fields": {
"*": true,
"F1": {
"*": true
},
"F2": {
"__name": true
}
}
}
В данном примере поле F1
загружается жадно, со всеми вложенными полями, а для поля F2
загружается только название (__name
).
Пример результирующего объекта:
{
"__id": "3a3503d2-52e6-11ee-be56-0242ac120002",
"__name": "Item",
"F1": [
{
"__id": "bd8bb825-9e86-451f-9028-9aee48adbe20",
"__name": "Item 2",
"Z1": 123
}
],
"F2": [
{
"__id": "7bebc2d4-414a-4a4d-8df1-19851dd04fae",
"__name": "Item 3"
}
]
}
Загрузка всех полей приложения с вложенными полями нескольких и ограничением объёма выборки
{
"fields": {
"*": true,
"F1": {
"*": true,
"$": {
"first": 20
}
},
"F2": {
"__name": true,
"$": {
"last": 10
}
}
}
}
Данный пример аналогичен предыдущему, за исключением ограничения и направления выборки полей F1
и F2
, которая задаётся конструкцией вида:
"$": {
"first/last": N
}
Где first
означает загрузку первых N элементов, а last
— загрузку N последних.
Если явно не указаны объём и направление выборки, то по умолчанию выбираются последние 10 элементов. Максимальный объём выборки зависит от параметров системы, по умолчанию — 100 элементов.
Также не допускается одновременное использование first
и last
в рамках одного блока.
Загрузка полей с несколькими уровнями вложенности
{
"fields": {
"*": true,
"F1": {
"*": true,
"Users": {
"*": true,
"$": {
"first": 20
}
},
"$": {
"last": 10
}
}
}
}
Пример результирующего объекта:
{
"__id": "3a3503d2-52e6-11ee-be56-0242ac120002",
"__name": "Item",
"F1": [
{
"__id": "bd8bb825-9e86-451f-9028-9aee48adbe20",
"__name": "Item 2",
"Z1": 123,
"Users": [
{
"__id": "1331b48f-87be-4938-a22c-11cefee30a41",
"__name": "User1",
"X1": 123
},
{
"__id": "c2b2325c-d7ce-43ab-ab32-00f698c414eb",
"__name": "User2",
"X1": 124
}
]
}
]
}
Влияние прав доступа на жадную загрузку полей приложения
Жадная загрузка полей приложения происходит в соответствии с правами доступа к ним. Допустим, в запросе F1
— это поле типа Приложение:
{
"fields": {
"*": true,
"F1": {
"*": true,
"Users": {
"*": true
}
}
}
}
Если у пользователя нет доступа к приложению из поля F1
, то в результатах выборки оно будет пустым.
Чтобы получить идентификаторы элементов, к которым доступ отсутствует, явно укажите в запросе поле __id
:
{
"fields": {
"*": true,
"F1": {
"*": true,
"__id": true,
"Users": {
"*": true
}
}
}
}