Ожидание событий

Добавление собственных событий

Добавить можно

  • вручную через админку
  • используя классы и методы модуля

Ниже представлен вариант программного добавления, например как это делаем мы и добавляем в модули.

Создание класса с константами и установкой

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

<?
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);


/**
 * Класс для работы с модулем ожидания событий, для атвоматического добавления своих событий  для отслеживания
 */
class WaitEvent
{

    /**
     * При выполнении запросов к приложению в Б24
     */
    const B24_SYNC = 'MY_MODULE_B24_SYNC';

   //...
   

    public static function getTypes()
    {
        $arReturn = [];

        $arReturn[] = [
            'CODE' => self::B24_SYNC,
            'NAME' => Loc::getMessage('MESSAGE.B24_SYNC'),
        ];

        //...

        return $arReturn;
    }


    public static function reinstall()
    {
        self::uninstall();
        self::install();

        return true;
    }

    public static function install()
    {
        if (!\Bitrix\Main\Loader::includeModule('bxmaker.waitevent')) {
            return false;
        }

        $arTypes =  self::getTypes();
        foreach ($arTypes as $type) {
            $ar = \BXmaker\WaitEvent\EventTable::getList([
                'filter' => [
                    'CODE' => $type['CODE']
                ],
                'limit' => 1
            ])->fetch();

            // если уже есть, пропускаем
            if ($ar) {
                continue;
            }

            $result = \BXmaker\WaitEvent\EventTable::add([
                'CODE' => $type['CODE'],
                'NAME' => $type['NAME']
            ]);
            if (!$result) {
                //..
            }
        }

        return true;
    }

    public static function uninstall()
    {
        if (!\Bitrix\Main\Loader::includeModule('bxmaker.waitevent')) {
            return false;
        }

        $arTypes = self::getTypes();
        $arCodes = array_column($arTypes, 'CODE');
        if (empty($arCodes)) {
            return false;
        }

        $dbr = \BXmaker\WaitEvent\EventTable::getList([
            'filter' => [
                'CODE' => $arCodes
            ],
        ]);
        while ($ar = $dbr->fetch()) {
            $result = \BXmaker\WaitEvent\EventTable::delete($ar['ID']);
            if (!$result) {
                //..
            }
        }

        return true;
    }


}

Синхронизация типов

Теперь выполним переустановку собственных типов, чтобы они появились в списке собственных событий. Выполним в админке в комнадной php строке сдледующий код

WaitEvent::reinstall();

Пример результат после длобавления собственных событий, в нашем случае. Тексты и коды размыты.

2025-04-29_17-37.jpg

Добавление записи о событии в журнал

Теперь в своем модуле, каком-то обработчике или гдето еще можно в журнал добавить событие со своим типом

\CEventLog::Log(
    \CEventLog::SEVERITY_ERROR,
    WaitEvent::B24_APP,
    'main', // измените на свой модуль
    '',
);


Теперь при добавлении события которое необходимо отследить, в списке типов вы сможете легко найти нужное и включить уведомление для отслеживания. Также можно отслеживать все уведомления любого модуля, условия очнеье гибкие.