Расскажу почему может возвращаться пустой список после применения метода GetListEx к "объекту" битрикса. Я называю их объектами, а не классами, ибо по-началу когда знакомился с битриксом классом их не назовешь, написаны были не очень, но сейчас вроде как код приводится в порядок с обновами, но так в душу и запало неведомый "объект" ^_^. Продолжим.
Часто можно встретить такую ситуацию, когда вызываешь свой скрипт в отдельном от битрикса файле, даже если подключил интерпретатор, убрал стату и написан пролог. Т.е. другими словами, при запуске скрипта из браузера, то все работает, а если его запускать с сервака(с агента, с крона), то в том месте, где мы вызываем GetListEx(), у нас пустой массив, это при условии, что он в общем то не должен быть пустым. Вернее не так, он то на самом деле сам не пустой, в нем просто нет наших элементов, ибо, проблема кроется за малым.
Хочу пробежаться по всем компаниям в отдельном php скрипте вне Битрикса, но используя API Битрикса. Даю пример:
#!/usr/bin/php
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
set_time_limit(0);
CModule::IncludeModule('crm');
//Хочу занести в $obResCompany все компании из CRM
$obResCompany = CCrmCompany::GetListEx(false,false,false,false,false);
//Но получаю пустой массив
while ($arResCompany = $obResCompany->Fetch())
{
//И сюда, я получается не захожу :(
echo '<pre>';
print_r($arResCompany);
echo '</pre>';
}
?>
Решение проблемы оказалось как всегда пятиминутным и простым, но для него мне пришлось потратить пару часов своего времени. Все что нужно сделать - вспомнить про фильтр в функции GetListEx (второй параметр), и еще знать, что при запросе данных через эту функцию идет проверка прав.
Поэтому, если нужен полный доступ, то нужно его прописать в фильтре: "CHECK_PERMISSIONS" => "N". Должно получиться так:
#!/usr/bin/php
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
set_time_limit(0);
CModule::IncludeModule('crm');
//Пишем, что не хотим проверять права
$arFilter = array(
"CHECK_PERMISSIONS" => "N"
);
//Хочу занести в $obResCompany все компании из CRM
$obResCompany = CCrmCompany::GetListEx(false,$arFilter,false,false,false);
//Получаю все компании
while ($arResCompany = $obResCompany->Fetch())
{
//И сюда, я попадаю :)
echo '<pre>';
print_r($arResCompany);
echo '</pre>';
}
?>
Привет из прошлого, тому настоящему, что это читает, а также удачи! :)