Как и у многих других сущностей платформы у Контактов есть события, позволяющие узнавать о каких либо событиях и даже влиять на их работу.
Table of Contents
Помните, что события не проверяются на цикличный вызов, поэтому если во время создания элемента на событии вы попыпаетесь создать элемент, то вы можете породить бесконечный цикл.
Событие не всегда содержит полный набор полей, поэтому хорошим тоном является проверять фактическое наличие ключа в массиве параметров и в случае его отсутствия заполнение либо дефолтным значением, либо обращение в базу данных для предотвращения неопределенного поведения.
OnBeforeCrmContactAdd
Событие вызываемое перед создание элемента методом CCrmContact::Add
.
Параметр | Значение |
---|---|
&$arFields | Поля создаваемого контакта |
Возвращаемое значение: boolean.
true
успешное выполнение.
false
произошла ошибка, обработка других событий не будет продолжена
Пример подписки на события с успешным ответом:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactAdd',
function( &$arFields )
{
// $arFields may change (add fields, modify or unset some parameters)
return true;
}
);
Пример возврата ошибки:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactAdd',
function( &$arFields )
{
// $arFields may change (add fields, modify or unset some parameters)
$arFields['RESULT_MESSAGE'] = 'Запрещено создавать контакт';
return false;
}
);
OnAfterCrmContactAdd
Событие вызываемое после успешного создания элемента методом CCrmContact::Add
.
Параметр | Значение |
---|---|
&$arFields | Поля создаваемого контакта |
Возвращаемое значение не обрабатывается.
Пример подписки на событие:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnAfterCrmContactAdd',
function( &$arFields )
{
// Change $arFields doesn't matter for action, but touch other events
}
);
OnAfterExternalCrmContactAdd
Данное событие повторяет поведение события OnAfterCrmContactAdd
с одним условием: оно будет вызвано только в том случае, если у элемента задано значение поля ORIGIN_ID
. В противном случае не вызывается.
OnBeforeCrmContactUpdate
Событие вызываемое перед обновлением элемента методом CCrmContact::Update
.
Параметр | Значение |
---|---|
&$arFields | Поля обновляемого элемента |
Возвращаемое значение: boolean.
true
успешное выполнение.
false
произошла ошибка, обработка других событий не будет продолжена
Пример подписки на события с успешным ответом:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactUpdate',
function( &$arFields )
{
// $arFields may change (add fields, modify or unset some parameters)
return true;
}
);
Пример возврата ошибки:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactUpdate',
function( &$arFields )
{
// $arFields may change (add fields, modify or unset some parameters)
$arFields['RESULT_MESSAGE'] = 'Запрещено создавать сделки';
return false;
}
);
OnAfterCrmContactUpdate
Событие вызываемое после успешного обновления элемента методом CCrmContact::Update
.
Параметр | Значение |
---|---|
&$arFields | Поля обновляемого контакта |
Возвращаемое значение не обрабатывается.
Пример подписки на событие:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnAfterCrmContactUpdate',
function( &$arFields )
{
// Change $arFields doesn't matter for action, but touch other events
}
);
OnBeforeCrmContactDelete
Событие вызываемое перед удалением элемента методом CCrmContact::Delete
или перемещения в корзину.
Параметр | Значение |
---|---|
$id | Primary key удаляемой сущности |
Возвращаемое значение: boolean.
true
успешное выполнение.
false
произошла ошибка, обработка других событий не будет продолжена
Пример подписки на события с успешным ответом:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactDelete',
function( $id )
{
// $arFields may change (add fields, modify or unset some parameters)
return true;
}
);
Пример возврата ошибки:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnBeforeCrmContactDelete',
function( $id )
{
global $APPLICATION;
$APPLICATION->ThrowException("Some error");
return false;
}
);
OnAfterCrmContactDelete
Событие вызываемое после успешного удаления элемента методом CCrmContact::Delete
или перемещения в корзину.
Параметр | Значение |
---|---|
$id | Primary key удаляемой сущности |
Возвращаемое значение не обрабатывается.
Пример подписки на событие:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'crm',
'OnAfterCrmContactDelete',
function( $id )
{
// Some actions
}
);
И хотя в событие поступает primary key удаляемой сущности, в момент выполнения события она уже удалена и не может быть получена через списочные методы.