Событие перед чтением значений свойств
[OnBeforeGetPropsValues] Замена списка сопоставления свойств
Событие OnBeforeGetPropsValues вызывается только на этапе обновления существующих элементов — один раз на порцию, до цикла по элементам. Оно позволяет заменить список сопоставления «свойство Битрикс ⇄ поле МойСклад», с которым модуль будет работать на этом шаге.
Событие вызывается, если одновременно:
- включена опция обновления свойств или загрузка картинок в свойство;
- в порции есть элементы на обновление;
- список сопоставления непуст.
Итоговый список модуль использует дважды:
- чтобы прочитать текущие значения свойств всех элементов порции (они придут в
arAllPropsValuesсобытияOnSetPropsForItem); - чтобы собрать и записать новые значения свойств каждого элемента — этот же список придёт в
propListсобытияOnSetPropsForItem.
На этапе создания новых элементов событие не вызывается: там модуль берёт список из настроек как есть.
- Исключение из обработчика модуль не перехватывает — оно обрывает шаг импорта. Оборачивайте код в
try/catch. - Параметры последнего обработчика, вернувшего
EventResult::SUCCESS, целиком заменяютpropList. Возвращается сам массив сопоставления, без обёртки['propList' => ...]. - Ответы не сливаются: каждый обработчик получает исходный список модуля.
EventResult::ERRORигнорируется.SUCCESSбез параметров даётnull, который модуль передаёт вcount()— на PHP 8 этоTypeError. Всегда возвращайте полный массив, а если менять нечего — не возвращайте ничего.
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
entity | string | Сущность: product, variant, bundle, service |
propList | array | Список сопоставления: ID свойства Битрикс => доп. поле или стандартное поле МойСклад |
Структура propList
[
123 => 'msAttrUUID1', // ID свойства Битрикс => UUID доп. поля МойСклад
456 => 'msAttrUUID2',
789 => 'field_article', // стандартное поле МойСклад: префикс field_ + имя поля
321 => '', // свойство для дополнительных картинок — есть, если включена загрузка картинок в свойство
]
Возвращаемое значение
Верните EventResult::SUCCESS с полным новым списком сопоставления:
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $propList);
Запись ID => '' для свойства дополнительных картинок оставляйте в списке: по ней модуль читает текущие файлы свойства. Картинки загружаются отдельно, но их обновление опирается на эти значения.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnBeforeGetPropsValues',
'OnBeforeGetPropsValuesHandler'
);
function OnBeforeGetPropsValuesHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$entity = $eventParams['entity']; // product / variant / bundle / service
$propList = $eventParams['propList']; // ID свойства Битрикс => поле МойСклад
#WORK_AREA#
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $propList);
}
Не обновлять свойство, которое контент-менеджер правит вручную
function OnBeforeGetPropsValuesHandler(\Bitrix\Main\Event $event)
{
$propList = $event->getParameter('propList');
$manualPropId = 123; // ID свойства, которое не должен перезаписывать импорт
if (!isset($propList[$manualPropId])) {
return;
}
unset($propList[$manualPropId]);
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $propList);
}