Перейти к основному содержимому

Событие регистрации внешних агентов

[OnBuildAgentList] Свой агент в настройках модуля​

Доступно с версии 3.9.0

На более ранних версиях событие не вызывается: внешний агент приходилось ставить своим CAgent::AddAgent() и рисовать для него блок состояния самостоятельно.

Событие позволяет добавить в модуль собственный агент — например импорт партий или любой другой периодический обмен с МойСклад, написанный в вашем модуле. Зарегистрированный агент модуль обслуживает так же, как свои:

  • на странице настроек у него появляется блок агента — такой же, как у штатных: переключатель «включён», интервал, вкладки «Параметры» и «Информация», ID агента, время последнего и следующего запуска, кнопка сохранения параметров без общего «Сохранить»;
  • в блок можно вывести свои параметры агента;
  • модуль сам ставит и снимает агента в планировщике Битрикс при включении и выключении в блоке;
  • галка «запускать по cron» уводит агента в общий cron-скрипт модуля (cron/run_all.php);
  • состояние агента и его собственные опции не стираются при сохранении настроек модуля.

Модуль не решает, где показать блок: его выводит ваш код на своей вкладке, добавленной через OnBeforeAllOptionsBuild, вызовом OptionUtils::buildAgentOptionArray() (см. вкладку «Блок агента на вкладке»).

Обработчик должен быть дешёвым

Событие вызывается на странице настроек и в каждом cron-хите модуля — один раз за хит, дальше модуль берёт результат из своего кеша. Обработчик должен только вернуть описание: без запросов к API МойСклад и тяжёлых выборок.

Параметры события

Событие не передаёт параметров.

Возвращаемое значение

EventResult::SUCCESS с ключом agents — списком описаний агентов:

return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, [
'agents' => [
[
'id' => 'my_consignment',
'name' => 'Импорт партий',
'callable' => '\My\Module\ConsignmentImport::agent',
'ready' => true,
'ready_message' => 'Импорт партий выключен на вкладке «Партии»',
'options' => ['ag_my_consignment_pages', 'my_consignment_last_sync'],
],
],
]);

Поля описания агента

ПолеОбязательноеТипОписание
idдаstringИдентификатор агента: латиница, цифры, _. От него строятся имена опций агента ag_{id}_*
nameдаstringПодпись блока агента на странице настроек
callableдаstringСтатический метод агента в виде \Класс::метод — без скобок и аргументов
readyнетbool | callableГотов ли агент к работе. false — в блоке выводится предупреждение. Можно передать функцию, возвращающую bool; исключение из неё считается «не готов». По умолчанию true
ready_messageнетstringТекст предупреждения, когда агент не готов
optionsнетstring[]Полные имена собственных опций агента: латиница, цифры, _

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

Проверка описаний

  • Описание, в котором не прошло проверку любое из полей id, name, callable, ready, options, отбрасывается молча — остальные агенты при этом регистрируются.
  • id, совпадающий со штатным агентом модуля (product, stocks, discount и т. д.), отбрасывается: штатный агент приоритетнее.
  • При повторе id у двух описаний учитывается первое.
  • Учитываются только ответы с типом EventResult::SUCCESS.
  • Исключение из обработчика модуль перехватывает: описания обработчиков, зарегистрированных до него, читаются как обычно, обработчики после него не вызываются.