Как стать автором
Обновить
582.82
OTUS
Цифровые навыки от ведущих экспертов

Быстрый старт работы со Смарт-процессами в коробке Битрикс24 для разработчика. Часть 3. Обработчики события

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров450

Представляю вашему вниманию цикл статей по работе с пока еще малознакомым многим битрикс‑разработчикам инструментом оперирования данными с CRM Битрикс24 через абстрактные фабрики. В первой статье мы рассмотрели базовые операции с элементами сущностей Смарт‑процессов — создание, изменение, удаление. Во второй статье рассмотрели получение данных об элементе смарт‑процесса, его связях с другими элементами.

В данной статье мы рассмотрим обработчики события, к которым можно «подвешивать» свои действия для расширения логики обработки элементов. В парадигме «правил хорошего тона» при разработке Битрикс24 обработчики событий являются одним из основных инструментов реализации нетиповой программной логики, так как в отличие от решений на основе 1С‑Битрикс: Управление сайтом, в рамках коробочной версии Битрикс24 публичная часть тоже обновляется. И бесконтрольный вынос стандартных шаблонов и компонентов в local может привести к мягко говоря неожиданным последствиям при установке обновлений системы.

Сразу главный «дисклеймер» данной статьи: Официально поддерживаемых обработчиков события для BitrixFramework на данный момент нет. Официальная документация указывает, что обработчики события для смарт‑процессов созданы для использования через Rest API. Код, приведенный в статье, является недокументированной адаптацией обработчиков, существующих в ядре, к использованию в рамках PHP логики. Соответственно автор не дает никаких гарантий, что при последующих обновлениях приведенный в статье код не «превратится в тыкву».

Недостатки обработчиков событий на смарт-процессах

Первый недостаток уже был упомянут выше — это отсутствие официальной и документированной поддержки BitrixFramework. Второй недостаток вытекает из первого — в стандартном варианте в системе присутствуют только обработчики After. Обработчиков типа Before, которые срабатывают до события и позволяют влиять на него — в стандартном варианте отсутствуют. Конечно, с другой стороны мы можем использовать сервисный подход и реализовать такие обработчики самим без вмешательств в ядро, но в рамках данного цикла статей мы его рассматривать не будем (возможно, сделаем отдельный цикл статей про него).

Соответственно резюмируем:

  1. Нам доступны в стандартном варианте только обработчики «After».

  2. При обновлениях могут быть изменения логики выполнения и обьектов, поэтому возможно, логику придется переписывать.

Опасность данных рисков каждый определяет для себя и своего проекта индивидуально. Собственно перейдем к разбору обработчиков события для элементов смарт‑процессов.

Основные обработчики событий для смарт-процессов

Если что, основная статья начинается отсюда;)

На момент написания статьи для элементов смарт‑процессов доступны 3 обработчика события onCrmDynamicItemAdd, onCrmDynamicItemUpdate, onCrmDynamicItemDelete.

onCrmDynamicItemAdd

Срабатывает после создания нового элемента любого смарт‑процесса. В метод, прикрепленный к данному обработчику, система при срабатывании вернет объект $data, содержащий ссылку на объект созданного элемента смарт‑процесса а также его идентификатор.

В упрощенном варианте типовой обработчик события onCrmDynamicItemAdd выглядит так:

$eventManager = \Bitrix\Main\EventManager::getInstance();
 
$eventManager->addEventHandler('crm', 'onCrmDynamicItemAdd', ['CRMHandler', 'onCrmDynamicItemAddHandler']);
 
class CRMHandler
{
    function onCrmDynamicItemAddHandler($data){
        $data->getParameters()["item"]->getEntityTypeId(); //ID Смарт процесса. 
        $data->getParameters()["id"];//ID записи
    }
}

В «item» передается ссылка на объект элемента смарт‑процесса, где, как указано в примере выше, можно использовать методы объекта элемента. В частности, можно использовать методы оперирования элементом, описанные в прошлых статьях.

С точки зрения RestAPI все гораздо проще — данный метод полностью документирован, подписаться можно через локальное/опуликованное Rest API приложение, либо исходящий вебхук. Возвращает помимо служебной информации почти такой‑же как и в PHP объект data, содержащий ссылку на объект и набор полей объекта.

Пример вызова обработчика событий через Rest API:

Событие на добавление элемента, принадлежащему смарт‑процессу с entityTypeId = 1220:

{
    "event": "ONCRMDYNAMICITEMADD",
    "event_handler_id": "4",
    "data": {
        "FIELDS": {
            "ID": "22",
            "ENTITY_TYPE_ID": "1220"
        }
    },
    "ts": "1723534033",
    "auth": {
        "access_token": "s6p6eclrvim6da22ft9ch94ekreb52lv",
        "expires_in": "3600",
        "scope": "crm",
        "domain": "some-domain.bitrix24.com",
        "server_endpoint": "https://oauth.bitrix.info/rest/",
        "status": "F",
        "client_endpoint": "https://some-domain.bitrix24.com/rest/",
        "member_id": "a223c6b3710f85df22e9377d6c4f7553",
        "refresh_token": "4s386p3q0tr8dy89xvmt96234v3dljg8",
        "application_token": "51856fefc120afa4b628cc82d3935cce"
    }
}

onCrmDynamicItemUpdate

Срабатывает после обновления любого элемента смарт‑процесса. В простом виде через PHP можно объявить следующим образом:

$eventManager->addEventHandler('crm', 'onCrmDynamicItemUpdate', ['CRMHandler', 'onCrmDynamicItemAddHandler']);
 
class CRMHandler
{
    function onCrmDynamicItemAddHandler($data){
        $data->getParameters()["item"]->getEntityTypeId(); //ID Смарт процесса. 
        $data->getParameters()["id"];//ID записи
    }
}

Как видим структура возвращаемого объекта абсолютно идентична событию создания объекта.

Документация для Rest API также имеется.

Пример вызова обработчика событий через Rest API:

Событие на изменение элемента с id = 24, принадлежащему смарт‑процессу сentityTypeId = 1220:

{
    "event": "ONCRMDYNAMICITEMUPDATE",
    "event_handler_id": "5",
    "data": {
        "FIELDS": {
            "ID": "24",
            "ENTITY_TYPE_ID": "1220"
        }
    },
    "ts": "1723538517",
    "auth": {
        "access_token": "s6p6eclrvim6da22ft9ch94ekreb52lv",
        "expires_in": "3600",
        "scope": "crm",
        "domain": "some-domain.bitrix24.com",
        "server_endpoint": "https://oauth.bitrix.info/rest/",
        "status": "F",
        "client_endpoint": "https://some-domain.bitrix24.com/rest/",
        "member_id": "a223c6b3710f85df22e9377d6c4f7553",
        "refresh_token": "4s386p3q0tr8dy89xvmt96234v3dljg8",
        "application_token": "51856fefc120afa4b628cc82d3935cce"
    }
}

onCrmDynamicItemDelete

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

Документация по использованию в рамках Rest API также имеется.

Пример вызова обработчика событий через Rest API:

Событие на удаление элемента с идентификатором 23, принадлежащего смарт‑процессу с entityTypeId = 1220:

{
    "event": "ONCRMDYNAMICITEMDELETE",
    "event_handler_id": "6",
    "data": {
        "FIELDS": {
            "ID": "23",
            "ENTITY_TYPE_ID": "1220"
        }
    },
    "ts": "1723538149",
    "auth": {
        "access_token": "s6p6eclrvim6da22ft9ch94ekreb52lv",
        "expires_in": "3600",
        "scope": "crm",
        "domain": "some-domain.bitrix24.com",
        "server_endpoint": "https://oauth.bitrix.info/rest/",
        "status": "F",
        "client_endpoint": "https://some-domain.bitrix24.com/rest/",
        "member_id": "a223c6b3710f85df22e9377d6c4f7553",
        "refresh_token": "4s386p3q0tr8dy89xvmt96234v3dljg8",
        "application_token": "51856fefc120afa4b628cc82d3935cce"
    }
}

Новые счета в CRM Битрикс24

Если в системе используются «новые» счета, основанные как раз таки на Смарт‑процессах, традиционные обработчики для счетов CRM, например OnBeforeCRMInvoiceAdd, срабатывать не будут. Для «отлова» событий новых счетов мы можем использовать именно вышеуказанные обработчики событий для смарт‑процессов. Это стоит принимать во внимание при разработке собственных решений для Битрикс24.

Вместо заключения

В рамках цикла статей по работе со Смарт‑процессами через API Битрикс24 коробочной версии мы выпустили статьи:

  1. Базовые операции

  2. Работа со списком элемента Смарт‑процесса и связями между ними

  3. Как реализовать обработчики события для Смарт‑процессов


Напоследок хочу пригласить вас присоединиться к открытым урокам OTUS, где вы получите уникальную возможность разобраться в ключевых аспектах работы с Битрикс24.

Темы предстоящих уроков:

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

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+3
Комментарии0

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS

Истории