Документация для разработчиков
Темная тема

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);

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Артём Евсюков
Сообщение не промодерировано, возможны ошибки и неточности.
Цитата
пишет:
$store = $documentBroker->getById($storeId);
Ошибка в переменной не
Верно
Код
$store = $documentBroker->getById($myStoreId);
1
Артём Евсюков
Сообщение не промодерировано, возможны ошибки и неточности.
Код
$entityId = 147; // ID - смарт-процесса
$myStoreId = 1;//. ID - элемента смарт-процесса

$myStoreBroker = \Bitrix\Crm\Service\Container::getInstance()->getDynamicBroker();
$myStoreBroker->setEntityTypeId($entityId); // Укажем, что брокер работает с конкретным смарт-процессом

$store = $documentBroker->getById($storeId);
$title = $store->getTitle();

© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх