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

Событие перед удалением по веб-хуку

[OnBeforeDeleteItem] Удаление сущности в МойСклад​

Событие OnBeforeDeleteItem вызывается, когда из МойСклад пришёл веб-хук с действием DELETE. Срабатывает в самом начале обработки: до того, как модуль удалит запись из своего HL-кеша и до того, как начнёт искать элемент в инфоблоке.

Главное отличие от остальных событий модуля: событие приходит даже если элемента в каталоге Битрикс нет вообще. Сущность могла никогда не импортироваться, попадать под фильтр по группе или быть архивной — веб-хук об удалении всё равно придёт, и кастомный код получит о нём сигнал.

к сведению

Обработчик может отменить штатную обработку, вернув EventResult::ERROR. Тогда модуль выйдет, не тронув ни HL-кеш, ни элемент инфоблока.

Для каких сущностей срабатывает​

СущностьЧто делает модуль после события
product, variant, bundle, serviceУдаляет или деактивирует элемент инфоблока — в зависимости от настройки «Удалять элемент при удалении в МойСклад»
productfolderУдаляет запись из HL-кеша разделов и удаляет/деактивирует раздел инфоблока

Событие вызывается только для действия DELETE. Веб-хуки CREATE и UPDATE до него не доходят.

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

ПараметрТипОписание
hookobjectОбъект веб-хука от МойСклад целиком
entitystringСущность: product, variant, bundle, service, productfolder
hrefstringСсылка на удалённую сущность в API МойСклад
xmlIdstringВнешний код (XML_ID) элемента в Битрикс, если модулю удалось его разрешить
предупреждение

xmlId может прийти пустой строкой — это нормальная ситуация. Так бывает, когда режим внешних кодов использует HL-кеш ExtCodes/PFolder, а записи для этого href в нём нет: сущность не импортировалась. Проверяйте значение перед использованием.

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

Возвращать ничего не обязательно — событие можно использовать как информационное.

Чтобы отменить штатное удаление или деактивацию:

return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR);

Отмена работает целиком: запись HL-кеша остаётся на месте, элемент инфоблока не трогается. Если обработчиков несколько, достаточно ERROR от любого из них.