Events D7 - uniqcle/Bitrix GitHub Wiki

onBeforeAdd/onAdd/onAfterAdd
onBeforeUpdate/onUpdate/onAfterUpdate
onBeforeDelete/onDelete/onAfterDelete
события

Унифицированные события

onBefore<Action>
можно изменить данные
можно сгенерировать ошибку
<вызов валидаторов>
прерывание операции в случае ошибок

on<Action>
можно сгенерировать ошибку
выполнение SQL запроса

onAfter<Action>

События при добавлении

onBeforeAdd(параметры: fields)
можно изменить данные
можно сгенерировать ошибку
<вызов валидаторов>

onAdd(параметры: fields)
можно сгенерировать ошибку
выполнение SQL запроса

onAfterAdd(параметры: fields, primary)

События при обновлении

onBeforeUpdate(параметры: primary, fields)	
можно изменить данные
можно сгенерировать ошибку

onUpdate(параметры primary, fields)
можно сгенерировать ошибку
выполнение SQL запроса

onAfterUpdate(параметры primary, fields)

События при удалении

onBeforeDelete(параметры primary)	
можно изменить данные
можно сгенерировать ошибку
<вызов валидаторов>
прерывание операции в случае ошибок

onDelete(параметры primary)
можно сгенерировать ошибку
выполнение SQL запроса

onAfterDelete(параметры primary)

onBeforeAdd

//in code
\Bitrix\Main\GroupTable::add(array(
	'NAME' => 'Имя группы',
	'DESCRIPTION' => 'Группа добавлена с помощью API ORM D7'
));
// init.php
use Bitrix\Main\EventManager;

$handler = EventManager::getInstance();
$handler->addEventHandler(
	'main',                             // id модуля
	'\Bitrix\Main\Group::onBeforeAdd', // класс с простран. имен без Table и вызов события как статич. метода
	'onBeforeAddHandler'              // имя метода-обработчика
);

function onBeforeAddHandler(\Bitrix\Main\Entity\Event $event){
	$fields = $event->getParameters("fields");
	debug($fields);
}

onAfterDelete

// в коде
\Bitrix\Main\GroupTable::delete([
    "ID" => 16
]);
// init.php
$handler->addEventHandler(
    'main',
    '\Bitrix\Main\Group::onAfterDelete',
    'onAfterDeleteHandler'
);

function onAfterDeleteHandler(\Bitrix\Main\Entity\Event $event){
    $primary = $event->getParameters("primary"); //primary ключ удаляемого объекта. Только он передается в события D7
    debug($primary);
}

со своим классом в init.php

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'uniqcle.d7',
    '\Uniqcle\D7\Book::onBeforeAdd',
    array('MyClass', 'myOrmEvent') );

class MyClass  // класс обработчика события
{
    static public function myOrmEvent(\Bitrix\Main\Entity\Event $event){
        $fields = $event->getParameter("fields");
       //далее работа с $fields
    }
}

Регистрация обработчика при установке модуля

//local/modules/academy.event/install/index.php
...
    function InstallEvents()
    {
        // Регистрация обработчика на событие добавления книги
        \Bitrix\Main\EventManager::getInstance()->registerEventHandler(
            'uniqcle.d7',                    // id модуля, к кот. относится событие
            '\Uniqcle\D7\Book::OnBeforeAdd', // id события, обработчик кот. мы будем регистрировать
            $this->MODULE_ID,                // id модуля, к которому относится регистрируемый обработчик
            '\Academy\Event\Event',          // класс где лежит обработчик
            'eventHandler'                   // обработчик события
        );
    }

    function UnInstallEvents()
    {
        // Снятия обработчика события
        \Bitrix\Main\EventManager::getInstance()->unRegisterEventHandler(
            'uniqcle.d7',
            '\Uniqcle\D7\Book::OnBeforeAdd',
            $this->MODULE_ID,
            '\Academy\Event\Event',
            'eventHandler');
    }
...
//local/modules/academy.event/lib/event.php
namespace Academy\Event;

class event
{
    static public function eventHandler(\Bitrix\Main\Entity\Event $event)
    {
        $fields = $event->getParameter("fields");
        echo'<pre>';
        echo'Обработчик события из модуля academy.event
        ';
        var_dump($fields);
        echo'</pre>';
    }
}

Регистрация обработчика при создании ORM сущности

//local/modules/uniqcle.d7/lib/book.php
...
public static function onBeforeUpdate(Entity\Event $event)
    {
        $result = new Entity\EventResult;
        $data = $event->getParameter("fields");

        if (isset($data['ISBN'])) {
            $result->addError(new Entity\FieldError(
                $event->getEntity()->getField('ISBN'),
                'Запрещено менять ISBN код у существующих книг'
            ));
        }

        return $result;
    }

DOC

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=4803&LESSON_PATH=3913.3516.5748.4803

https://github.com/SidiGi/bitrix-info/wiki/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-ORM

⚠️ **GitHub.com Fallback** ⚠️