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

Клиент в CRM

У нескольких типов сущностей CRM существует поле Клиент, позволяющее привязать к элементам данной сущности Контакт и Компанию. В зависимости от реализации, к одному элементу можно привязать от одного до нескольких Контактов и (или) Компаний.

Простой случай - одиночная привязка

В самом простом случае, к одному элементу можно привязать только одну клиентскую сущность. Чаще всего эта реализация применяется к Компании.

Связь обеспечивается посредством записи ID клиентской сущности в колонку CONTACT_ID для Контактов и COMPANY_ID для Компаний.

Пример подобной реализации - привязка Компании к сделке (таблица b_crm_deal).

Сложный случай - множественная привязка

К нескольким типам сущностей (Сделка, Предложение, Лид) можно привязать несколько Контактов. Один из них будет являться основным, остальные - дополнительными.

Со стороны БД

Для этого обеспечивается связь M:N между элементами сущностей и Контактов посредствам специальной таблицы. Для каждой сущности имеется отдельная таблица с названием вида b_crm_entity_type_name_contacts (например, b_crm_deal_contacts, b_crm_quote_contacts). Таблица имеет следующую структуру (на примере b_crm_deal_contacts):

Имя поля Описание Комментарий
DEAL_ID INT(1) UNSIGNED NOT NULL Ссылка на элемент сущности
CONTACT_ID INT(1) UNSIGNED NOT NULL Ссылка на контакт
SORT INT NOT NULL
ROLE_ID TINYINT(1) NOT NULL
IS_PRIMARY CHAR(1) NOT NULL Является ли контакт основным

ID основного контакта (IS_PRIMARY === 'Y') также дополнительно помещается в колонку CONTACT_ID связанной сущности.

У Заказа (order) реализована множественная привязка как Контактов, так и Компаний. Структура таблицы (b_crm_contact_company) и API в случае с данным типом сущности отличается от остального CRM, поэтому здесь он рассмотрен не будет.

Со стороны API

Для работы со связанными сущностями в CRM существует отдельный неймспейс Bitrix\Crm\Binding. Множественная связь с клиентами реализуется здесь же. В неймспейсе находятся таблеты промежуточных таблиц (DealContactTable и др.), и классы, обрабатывающие специальные массивы связи, которые будут рассмотрены ниже - EntityBinding и BindingHelper.

Массивы связи (bindings)

Информация о связях внутри CRM передается в формате массивов специальной структуры - массивов связи (bindings). Они формируются и обрабатываются с помощью методов класса EntityBinding.

Массив имеет следующую структуру:

$bindings = [
	[
		'CONTACT_ID' => 1, // Ссылка на клиентскую сущность. В случае с Компанией используется COMPANY_ID
		'SORT' => 10,
		'ROLE_ID' => 0,
		'IS_PRIMARY' => 'Y',
	], 
	// В массиве как минимум присутствуют поля CONTACT_ID (COMPANY_ID) и SORT
	[
		'CONTACT_ID' => 2,
		'SORT' => 20,
	],
];

Как добавить/удалить клиента

Добавить/удалить клиента можно при создании или обновлении сущности через соответствующий ей класс (CCrmDeal и т.п.). Для этого в параметре $arFields нужно передать соответствующие значения.

$deal = new \CCrmDeal();
$newDealId = $deal->Add([
	'COMPANY_ID' => 1,

	// Для привязки контакта можно передать любой из ключей ниже. Если передана один, другие не нужны
	'CONTACT_ID' => 12, // Привязка одного контакта
	'CONTACT_IDS' => [1, 2, 3], // Привязка нескольких контактов. Первый контакт будет сохранен как основной
	'CONTACT_BINDINGS' => [ // Привязка нескольких контактов. Позволяет в явном виде задать основной контакт, сортировку и др
		'CONTACT_ID' => 1, 
		'SORT' => 10, 
		'ROLE_ID' => 0,
		'IS_PRIMARY' => 'Y',
	],
	[
		'CONTACT_ID' => 2,
		'SORT' => 20,
	],
]);

При обновлении (CCrmDeal::Update) в параметре $arFields можно передать те же ключи, новые значения заменят старые. Если же при обновлении не передавать ничего, связанного с контактами или компанией, текущие значения останутся неизменными.

Так же множественные контакты можно редактировать напрямую через соответствующий таблет-посредник (DealContactTable ), но делать так не рекомендуется, так как не отработает запись изменений в историю, обновление последних выбранных контактов и др.



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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх