CRM
Связи между сущностями
Рабочая справка по связям CRM-сущностей в коробочном Bitrix24: сделки, контакты, компании, смарт-процессы и привязки дел.
Связи CRM не всегда лежат в одном поле карточки. Часть связей хранится в полях вроде
COMPANY_ID, часть — в отдельных таблицах связей, а у смарт-процессов часто
используются поля вида PARENT_ID_*.
Основные связи
Самые частые связи: сделка с компанией, сделка с контактами, контакт с компаниями.
Сделка — компания
Основная компания сделки хранится в поле COMPANY_ID.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Service;
const CRM_DEAL_TYPE_ID = \CCrmOwnerType::Deal;
Loader::includeModule('crm');
/**
* Получает ID компании сделки.
*/
function fetchDealCompanyId(int $deal_id): int
{
$factory = Service\Container::getInstance()->getFactory(CRM_DEAL_TYPE_ID);
if ($factory === null) {
return 0;
}
$deal_item = $factory->getItem($deal_id);
if ($deal_item === null) {
return 0;
}
return (int) $deal_item->get('COMPANY_ID');
}
$company_id = fetchDealCompanyId($deal_id);
echo $company_id; Сделка — контакты
У сделки может быть несколько контактов. Для связи сделки с контактами используется
DealContactTable.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Binding\DealContactTable;
Loader::includeModule('crm');
/**
* Получает ID контактов сделки.
*/
function fetchDealContactIds(int $deal_id): array
{
return DealContactTable::getDealContactIDs($deal_id);
}
/**
* Привязывает контакты к сделке.
*/
function bindDealContacts(int $deal_id, array $contact_ids): void
{
DealContactTable::bindContactIDs($deal_id, $contact_ids);
}
$contact_ids = fetchDealContactIds($deal_id);
print_r($contact_ids);
Поле CONTACT_ID может быть удобно для основного контакта, но для всех
контактов сделки лучше использовать таблицу связи.
Контакт — компании
Контакт может быть связан с несколькими компаниями. Для этого используется
ContactCompanyTable.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Binding\ContactCompanyTable;
Loader::includeModule('crm');
/**
* Получает ID компаний контакта.
*/
function fetchContactCompanyIds(int $contact_id): array
{
return ContactCompanyTable::getContactCompanyIDs($contact_id);
}
/**
* Привязывает контакт к компаниям.
*/
function bindContactCompanies(int $contact_id, array $company_ids): void
{
ContactCompanyTable::bindCompanyIDs($contact_id, $company_ids);
}
$company_ids = fetchContactCompanyIds($contact_id);
print_r($company_ids); Связи смарт-процессов
У смарт-процессов связи с CRM-сущностями часто представлены как поля.
PARENT_ID_*
В смарт-процессах часто встречаются поля вида PARENT_ID_2, где число —
entityTypeId родительской CRM-сущности. Например, 2 — сделка.
/**
* Получает код поля родительской связи.
*/
function buildParentFieldId(int $parent_entity_type_id): string
{
return 'PARENT_ID_' . $parent_entity_type_id;
}
$deal_parent_field_id = buildParentFieldId(\CCrmOwnerType::Deal);
echo $deal_parent_field_id; Получить поля связи
Самый безопасный способ — вывести описание полей через фабрику и посмотреть реальные коды связей на своём портале.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\Service;
const SMART_PROCESS_ENTITY_TYPE_ID = 1044;
Loader::includeModule('crm');
/**
* Получает поля смарт-процесса.
*/
function fetchSmartProcessFields(int $entity_type_id): array
{
$factory = Service\Container::getInstance()->getFactory($entity_type_id);
if ($factory === null) {
return [];
}
return $factory->getFieldsInfo();
}
$fields = fetchSmartProcessFields(SMART_PROCESS_ENTITY_TYPE_ID);
print_r($fields); Связи дел и таймлайна
Дела CRM могут быть привязаны к нескольким сущностям.
Привязки дел
У дел есть отдельные привязки к CRM-сущностям. Это не то же самое, что связь сделки с контактами.
<?php
use Bitrix\Main\Loader;
Loader::includeModule('crm');
/**
* Получает привязки дела CRM.
*/
function fetchActivityBindings(int $activity_id): array
{
$bindings = [];
$binding_result = \CCrmActivity::GetBindings($activity_id);
foreach ($binding_result as $binding) {
$bindings[] = $binding;
}
return $bindings;
}
$activity_bindings = fetchActivityBindings($activity_id);
print_r($activity_bindings);