← К документации

REST

BX24.callMethod, пагинация и ошибки

Вызов из приложения, переход между страницами и корректная остановка при ошибке.

Первый вызов

BX24.js работает в контексте приложения, открытого из Bitrix24. Подключите официальный SDK и дождитесь BX24.init. На обычной внешней странице такой контекст отсутствует.

BX24.init(function () {
    BX24.callMethod(
        'user.current',
        {},
        function (result) {
            if (result.error()) {
                console.error(result.error());
                return;
            }

            console.log(result.data());
        }
    );
});

Все страницы crm.item.list

result.next() запускает следующую страницу и повторно вызывает тот же callback. Его возвращаемое значение не является смещением для start. Код ниже разбирает именно массив items метода crm.item.list.

function fetchAllCrmItems(parameters) {
    return new Promise(function (resolve, reject) {
        const items = [];
        BX24.callMethod('crm.item.list', parameters, function (result) {
            if (result.error()) {
                reject(new Error(String(result.error())));
                return;
            }
            const page_items = result.data().items;
            if (!Array.isArray(page_items)) {
                reject(new Error('В ответе нет массива items.'));
                return;
            }
            items.push(...page_items);
            if (result.more()) {
                result.next();
            } else {
                resolve(items);
            }
        });
    });
}

BX24.init(function () {
    fetchAllCrmItems({
        entityTypeId: 2,
        select: ['id', 'title'],
        order: { id: 'ASC' }
    }).then(function (items) {
        console.log(items);
    }).catch(function (error) {
        console.error(error);
    });
});

При ошибке Promise отклоняется, а не возвращает частично загруженный список как полный. Большие объёмы лучше обрабатывать на сервере порциями: массив в браузере занимает память.

Параметр start в серверном запросе

В классических списочных методах start обычно задаёт смещение, а не номер страницы. Для следующего запроса берите next из ответа конкретного метода, когда он есть. Не прибавляйте 50 без проверки контракта API.

Изменение данных между запросами может дать пропуски или повторы. Для подходящих методов применяют стабильную сортировку и фильтр по последнему ID, но это отдельная стратегия, а не замена любой пагинации.

Как разбирать ошибку

В BX24.js сначала проверяют result.error(), затем читают result.data(). У серверного клиента отдельно проверяются транспорт, HTTP-статус, JSON и ключ ошибки. При METHOD_NOT_FOUND сначала проверьте точное имя, маршрут API и доступный скоуп; это не всегда признак удаления метода.

Обработка ответа серверного вебхука

Источники