Как и у многих других сущностей платформы у Лидов есть события, позволяющие узнавать о каких либо событиях и даже влиять на их работу.

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

Событие не всегда содержит полный набор полей, поэтому хорошим тоном является проверять фактическое наличие ключа в массиве параметров и в случае его отсутствия заполнение либо дефолтным значением, либо обращение в базу данных для предотвращения неопределенного поведения.

OnBeforeCrmLeadAdd

Событие вызываемое перед создание элемента методом CCrmLead::Add.

Параметр Значение
&$arFields Поля создаваемого лида

Возвращаемое значение: boolean. true успешное выполнение. false произошла ошибка, обработка других событий не будет продолжена

Пример подписки на события с успешным ответом:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadAdd',
    function( &$arFields )
    {
        // $arFields may change (add fields, modify or unset some parameters)
        return true;
    }
);

Пример возврата ошибки:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadAdd',
    function( &$arFields )
    {
        // $arFields may change (add fields, modify or unset some parameters)
        $arFields['RESULT_MESSAGE'] = 'Запрещено создавать сделки';
        return false;
    }
);

OnAfterCrmLeadAdd

Событие вызываемое после успешного создания элемента методом CCrmLead::Add.

Параметр Значение
&$arFields Поля создаваемого лида

Возвращаемое значение не обрабатывается.

Пример подписки на событие:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnAfterCrmLeadAdd',
    function( &$arFields )
    {
        // Change $arFields doesn't matter for action, but touch other events
    }
);

OnAfterExternalCrmLeadAdd

Данное событие повторяет поведение события OnBeforeCrmLeadAdd с одним условием: оно будет вызвано только в том случае, если у элемента задано значение поля ORIGIN_ID. В противном случае не вызывается.

OnBeforeCrmLeadUpdate

Событие вызываемое перед обновлением элемента методом CCrmLead::Update.

Параметр Значение
&$arFields Поля обновляемого лида

Возвращаемое значение: boolean. true успешное выполнение. false произошла ошибка, обработка других событий не будет продолжена

Пример подписки на события с успешным ответом:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadUpdate',
    function( &$arFields )
    {
        // $arFields may change (add fields, modify or unset some parameters)
        return true;
    }
);

Пример возврата ошибки:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadUpdate',
    function( &$arFields )
    {
        // $arFields may change (add fields, modify or unset some parameters)
        $arFields['RESULT_MESSAGE'] = 'Запрещено создавать сделки';
        return false;
    }
);

OnAfterCrmLeadUpdate

Событие вызываемое после успешного обновления элемента методом CCrmLead::Update.

Параметр Значение
&$arFields Поля обновляемого лида

Возвращаемое значение не обрабатывается.

Пример подписки на событие:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnAfterCrmLeadUpdate',
    function( &$arFields )
    {
        // Change $arFields doesn't matter for action, but touch other events 
    }
);

OnBeforeCrmLeadDelete

Событие вызываемое перед удалением элемента методом CCrmLead::Delete или перемещения в корзину.

Параметр Значение
$id Primary key удаляемой сущности

Возвращаемое значение: boolean. true успешное выполнение. false произошла ошибка, обработка других событий не будет продолжена

Пример подписки на события с успешным ответом:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadDelete',
    function( $id )
    {
        // $arFields may change (add fields, modify or unset some parameters)
        return true;
    }
);

Пример возврата ошибки:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnBeforeCrmLeadDelete',
    function( $id )
    {
        global $APPLICATION;
        $APPLICATION->ThrowException("Some error");
        return false;
    }
);

OnAfterCrmLeadDelete

Событие вызываемое после успешного удаления элемента методом CCrmLead::Delete или перемещения в корзину.

Параметр Значение
$id Primary key удаляемой сущности

Возвращаемое значение не обрабатывается.

Пример подписки на событие:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnAfterCrmLeadUpdate',
    function( $id )
    {
        // Some actions
    }
);

И хотя в событие поступает primary key удаляемой сущности, в момент выполнения события она уже удалена и не может быть получена через списочные методы.

OnAfterCrmLeadProductRowsSave

Событие вызываемое после успешного изменения состава товарных позиций элемента методом CCrmLead::SaveProductRows.

Параметр Значение
$id Primary key сущности
$arRows Набор новых элементо

Возвращаемое значение не обрабатывается.

Пример подписки на событие:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandlerCompatible(
    'crm',
    'OnAfterCrmLeadProductRowsSave',
    function( $id, $arRows )
    {
        // Some actions
    }
);