Проблема в том, что Битрикс24 возвращает по апи только первые 50 элементов. Если нам необходимо для обработки получить массив с полным списком элементов в котором содержится больше элементов чем 50 , то в запросе необходимо передавать параметр start, выполняя несколько запросов.
В данной статье я напишу функцию с помощью которой можно будет получить полный массив со всеми записями и не важно 50 всего у вас записей или больше.
Пример обычного запроса описанного в документации Битрикс24 :
$res = $CB24->method($_REQUEST,'crm.contact.list.json',array(
"select" => array("ID", "LAST_NAME", "NAME"),
"filter" => array("ID" => $arContactsID),
)
);
Данным запросом вы получите массив в котором будут содержаться 50 первых элементов. Данный запрос нас устроит когда у нас всего 50 элементов, а что если у нас больше 50 элементов содержится в битрикс24? Как нам получить все элементы тогда? Тогда нам необходимо делать несколько запросов в котором уже будет добавлен параметр start.
Пример запроса с параметром start:
$res_1 = $CB24->method($_REQUEST,'crm.contact.list.json',array(
"select" => array("ID", "LAST_NAME", "NAME"),
"filter" => array("ID" => $arContactsID),
'start' => 0
)
);
Где значение параметра start = 0 означает что в массиве $res будет содержаться первые 50 элементов. Если мы хотим получить вторые 50 элементов, необходимо отправить другой запрос где мы изменим значение параметра start с 0 на 50.
Параметром start мы указываем какие следующие 50 элементов мы достанем из Битрикс24.
Пример запроса с получением записей начиная с 50-й до 100:
$res_2 = $CB24->method($_REQUEST,'crm.contact.list.json',array(
"select" => array("ID", "LAST_NAME", "NAME"),
"filter" => array("ID" => $arContactsID),
'start' => 50
)
);
И так каждый раз, если мы хотим получить следующие 50 записей от 100 до 150, то нам необходимо добавить к уже имеющему параметру start еще 50, т.е. тогда значение start = 100.
Для того что бы каждый раз вручную не делать запрос есть функция, которая автоматически сделает необходимое количество запросов и соберет их все в один массив.
Пример функции getListMass для сбора всех записей из Битрикс24:
function getListMass(){
//достаем контакты с облака
$res = $CB24->method($_REQUEST,'crm.contact.list.json',array(
"select" => array("ID", "LAST_NAME", "NAME"),
"filter" => array("ID" => $arContactsID),
)
);
$arContacts = $res['result'];
if( $res['total'] > 50 ){
$i = 50;
while( $i < $res['total'] ){
$res_x = $CB24->method($_REQUEST,'crm.contact.list.json',array(
"select" => array("ID", "LAST_NAME", "NAME"),
"filter" => array("ID" => $arContactsID),
'start'=>$i
)
);
$arContacts = array_merge($arContacts,$res_x['result']);
$i = $i + 50;
}
}
}