Частичная и жадная загрузка полей приложения
При работе с API получения списка элементов приложения можно задавать правила выборки полей приложения.
Добавление правил выборки осуществляется путем вставки конструкции fields
, например:
{
"fields": {
}
}
Различают 2 способа загрузки полей приложения:
- Частичная загрузка;
- Жадная загрузка.
Частичная загрузка полей приложения
Позволяет загружать только выбранные поля приложения и игнорировать оставшиеся.
При этом возможны два варианта использования:
- Выборка всех полей и исключение указанных;
- Загрузка только выбранных полей.
Выборка всех полей и исключение указанных
{
"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
можно не указывать, так как оно является значением по-умолчанию. Строки типа "Field_Name_N": true"
указывают поля которые следует добавить в выборку.
При этом, поле __id
будет загружено в любом случае.
Жадная загрузка полей приложения
Работает только для редакции системы OnPremise, начиная с 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
}
]
}
]
}
Влияние прав доступа на жадную загрузку полей приложения
Как было сказано выше, жадная загрузка полей приложения происходит в соответствии с их правами доступа. Например, если для запроса вида
{
"fields": {
"*": true,
"F1": {
"*": true,
"Users": {
"*": true
}
}
}
}
у пользователя отсутствуют права доступа на приложения из поля F1
, то это поле в результатах выборки будет пустым.
В некоторых случаях бывает полезно знать идентификаторы объектов доступ к которым отсутствует. Чтобы указать системе, что она должен вернуть идентификаторы объектов доступ к которым отсутствует, необходимо явно указать выборку поля __id
:
{
"fields": {
"*": true,
"F1": {
"*": true,
"__id": true,
"Users": {
"*": true
}
}
}
}