Как выбрать данные из Rest с паджинацией?

+2 голосов
DenisSmirnov в категории Интеграция

Например, Битрикс24 отдает по 50 записей (при этом нельзя превышать ограничение в Два запроса в секунду

Поэтому надо перебирать страницы (пока есть данные):

https://Портал.bitrix24.ru/rest/7/Ключ/crm.company.list?start=0
https://Портал.bitrix24.ru/rest/7/Ключ/crm.company.list?start=1
https://Портал.bitrix24.ru/rest/7/Ключ/crm.company.list?start=2

и т.д.

Как это реализовать в Loginom?

Ответ: 1 шт.

0 голосов
DenisSmirnov
и в дополнение - как потом распарсить Json?
alexey.arustamov
DenisSmirnov
Спасибо

Но более животрепещущий вопрос - это как выбрать постранично get-запросом данные?
Виталий Ким

Здравствуйте. Выбрать данные постранично можно так:

  1. Создать REST-подключение к нужному веб-сервису (https://Портал.bitrix24.ru/rest/7/Ключ/crm.company.list). Задать параметр GET запроса "start".
  2. Создать REST-запрос к созданному подключению. 
  3. Создать переменную, которая будет передавать параметр запроса "start" (0,1,2,3...). Соединить с REST запросом (Порт "Источник данных запроса")

Таким образом, Loginom будет передавать запросы с параметром ?start=0, ?start=1, и т.д. Для преобразования json нужно настроить компонент JavaScript по ссылке выше. Задержку между запросами можно создать компонентом Выполнение программы, с текстом команды "cmd /c ping -n 1 -w 500 localhost > nul", где -n это 1 запрос, -w время в 500 мс.

В случае, когда количество запросов превышают разумные пределы, можно настроить Цикл для нужного количества. При этом все узлы, которые извлекают информацию, необходимо свернуть в Подмодель, которая и будет запускаться Циклом.

alexey.arustamov
Для формирования задержки нет необходимости вызывать внешнюю программу. Есть функция Sleep.

Sleep(длительность). Возвращает строковое представление отправленного числа, не ранее чем через указанный интервал времени.

Параметры: Длительность - время ожидания в мс, (целое)
[email protected]
Алексей, подскажите, пожалуйста, как воспользоваться указанной функцией sleep? Она есть в 7-й версии?
alexey.arustamov
Она есть в JS, а JS поддерживается в калькуляторе и специальном узле JavaScript.
[email protected]

Спасибо! А можно пример с калькулятором - для чайников? Самостоятельно вызвать функцию ни в узле JS, ни в калькуляторе не получилось. В ноосфере отыскал лишь как сделать эту функцию кодом, и в узле JS он работает:

function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }

...

sleep(500).then(...

...