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

Событие перед изменением элемента инфоблока

[OnBeforeUpdateItem] Событие перед изменением элемента инфоблока

Событие OnBeforeUpdateItem вызывается перед обновлением конкретного элемента инфоблока через CIblockElement::Update(). Позволяет модифицировать данные, которые будут записаны в элемент.

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

ПараметрТипОписание
entitystringСущность в МойСклад: product, variant, bundle, service
currentItemarrayДанные о текущем элементе (содержит BX и MS)
arUpdateItemFieldsarrayМассив данных для передачи в CIblockElement::Update()

Структура currentItem

[
'BX' => [ // элемент инфоблока Битрикс
'ID' => 1234,
'IBLOCK_ID' => 5,
'NAME' => 'Название товара',
'XML_ID' => 'abc123externalcode',
'ACTIVE' => 'Y',
'CODE' => 'nazvanie-tovara',
'SORT' => 500,
'PREVIEW_TEXT' => 'Краткое описание',
'DETAIL_TEXT' => 'Подробное описание',
'PREVIEW_PICTURE' => 100,
'DETAIL_PICTURE' => 101,
'IBLOCK_SECTION_ID' => 10,
// ... другие поля элемента инфоблока
],
'MS' => $itemMs // объект из МойСклад, доступ к полям через свойства
]

Структура ms-объекта (currentItem['MS'])

$item = $currentItem['MS'];
$item->name // 'Название товара'
$item->externalCode // 'abc123externalcode'
$item->archived // false
$item->description // 'Описание товара'
$item->weight // 0.5
$item->article // 'ART-001'
$item->variantsCount // 3 (для product)
$item->attributes // массив доп. атрибутов МС
$item->images // массив изображений
$item->productFolder // объект с meta->href группы товаров

Структура arUpdateItemFields

Содержит только те поля, которые реально изменились:

[
'NAME' => 'Новое название', // если изменилось имя
'ACTIVE' => 'N', // если товар стал архивным
'IBLOCK_SECTION_ID' => 15, // если изменилась группа
'PREVIEW_TEXT' => 'Новое описание', // если изменилось описание
'DETAIL_TEXT' => 'Новое полное описание', // если изменилось полное описание
'CODE' => 'novoe-nazvanie', // если включена транслитерация
'SORT' => 100, // если настроена сортировка
'PREVIEW_PICTURE' => [...], // массив для CFile
'DETAIL_PICTURE' => [...], // массив для CFile
'MODIFIED_BY' => 1, // ID пользователя
]

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

Верните EventResult::SUCCESS с модифицированным массивом $arUpdateItemFields. Этот массив будет передан в CIblockElement::Update().

return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $arUpdateItemFields);