Broker
Методы
При отрисовке сложных интерфейсов часто бывает, что в разных местах происходит загрузка связанных данных из одной и той же таблицы.
Например, получение имен, привязанных к элементам CRM пользователей.
Чтобы не делать повторных запросов был разработан абстрактный класс Service\Broker.
Его основная задача - лёгкий доступ к связаным данным с кешированием.
Не стоит делать запросы в цикле вида
while($item = $list->fetch())
{
$data = $broker->getById($item['USER_ID']);
}
Класс является абстрактным. Способ и формат получаемых данных определены в Наследниках.
Инстанс брокера следует получать через контейнер.
| Метод | Описание | С версии |
|---|---|---|
public function getById(int $id) |
Вернет данные по идентификатору $id. Если данные были загружены ранее, они будут взяты из кеша. | |
public function getBunchByIds(array $ids): array |
Вернет данные по массиву идентификаторов $ids, где ключ - идентификатор, а значение - данные по нему.
Если данные были загружены ранее, они будут взяты из кеша. На получение отсутствующих данных в кеше будет произведен отдельный запрос. |
Наследники
Service\Broker\User
Предоставляет данные о пользователях.
Каждая запись о пользователе является массивом следующей структуры:
ID- идентификатор;NAME- имя;SECOND_NAME- отчество;LAST_NAME- фамилия;TITLE- обращение;WORK_POSITION- должность;FORMATTED_NAME- полное имя;SHOW_URL- ссылка на профиль;PERSONAL_PHOTO- идентификатор файла аватара;PHOTO_URL- ссылка на аватар.
Этот класс имеет дополнительный метод:
| Метод | Описание | С версии |
|---|---|---|
public function getName(int $id): ?string |
Вернет полное имя пользователя по его идентификатору. |
Service\Broker\Contact
Предоставляет данные о контактах CRM.
Каждая запись о контакте является ORM-объектом таблета Bitrix\Crm\ContactTable.
Service\Broker\Company
Предоставляет данные о компаниях CRM.
Каждая запись о компании является ORM-объектом таблета Bitrix\Crm\CompanyTable.
Service\Broker\TypePreset
Отдельно стоит упомянуть брокер пресетов для настроек смарт-процессов.
Он не является наследником класса Service\Broker, но работает по схожим принципам.
Класс будет подвергнут рефакторингу, не рекомендуется использовать его напрямую, только через событие.
Имеет следующие публичные методы:
| Метод | Описание | С версии |
|---|---|---|
public function getList(): array |
Вернет список пресетов. | |
public function getPredefinedPresets(): array |
Вернет список предустановленных пресетов. | |
public function collectPresetsByEvent(): array |
Бросает событие onCollectTypePresets модуля CRM. В результате выполнения обработчика события по ключу presets должен попасть массив пресетов соответствующей структуры.
Вернет массив полученных из обработчиков пресетов. | |
public function getCategories(): array |
Вернет массив разделов для пресетов. |
Примеры
use Bitrix\Crm\Service; $contactBroker = \Bitrix\Crm\Service\Container::getInstance()->getCompanyBroker(); // here the contact will be queried $contact = $contactBroker->getById(1); echo $contact->getName(); // here data will be retrieved from cache $contact = $contactBroker->getById(1);