События массовой обработки очередного шага импорта
События вызываются после того, как модуль провел очередной шаг массового импорта товаров (модификаций, услуг и комплектов).
[OnAfterImportItems] - вызывается после массового импорта новых сущностей
[OnAfterUpdateItems] - вызывается после массового импорта существующих сущностей (после их обновления)
[OnAfterImportItems] Событие после импорта новых элементов
Срабатывает после создания порции новых элементов. Поиск созданного элемента можно осуществить с помощью внешнего кода, который доступен в массиве обрабатываемых объектов из МС.
Событие не требует возврата значения. Используется для выполнения действий после создания элементов (уведомления, дополнительная обработка и т.д.).
- Описание события
- Пример кода
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
entity | string | Сущность: product, variant, bundle, service |
items | array | Массив созданных объектов МС (ключ — внешний код) |
Структура items
[
'externalCode1' => $itemMs, // объект МойСклад
'externalCode2' => $itemMs,
// ...
]
// Для модификаций внешний код будет без символа #
// Доступ к полям объекта МС:
$itemMs->name // 'Название товара'
$itemMs->externalCode // 'externalCode1'
$itemMs->archived // false
$itemMs->description // 'Описание'
$itemMs->article // 'ART-001'
$itemMs->meta->type // 'product' | 'variant' | 'bundle' | 'service'
$itemMs->meta->href // 'https://api.moysklad.ru/api/remap/1.2/entity/product/...'
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnAfterImportItems',
'OnAfterImportItemsHandler'
);
function OnAfterImportItemsHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$entity = $eventParams['entity']; //сущность в МойСклад, которая обрабатывается (четыре варианта значения: product / variant / bundle / service)
$items = $eventParams['items']; //массив обрабатываемых объектов (ниже пример их обработки)
foreach ($items as $xmlId => $itemMs) {
// $xmlId -- внешний код элемента, для модификаций это значение будет без решетки # во внешнем коде
// $itemMs -- сущность в МС, доступ к полям идет через свойства объекта
}
}
[OnAfterUpdateItems] Событие после импорта существующих элементов
Срабатывает после обновления порции существующих элементов на очередном шаге импорта. Передаёт данные как из Битрикс, так и из МойСклад для каждого обработанного элемента.
Событие не требует возврата значения. Считается устаревшим — предпочтительнее использовать события на уровне отдельных элементов (OnBeforeUpdateItem, OnBeforeUpdateItemProduct и т.д.).
- Описание события
- Пример кода
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
entity | string | Сущность: product, variant, bundle, service |
items | array | Массив обработанных элементов (ключ — внешний код) |
products | array | Массив данных товаров торгового каталога (ключ — ID элемента) |
Структура items
[
'externalCode1' => [
'BX' => [ // элемент инфоблока Битрикс
'ID' => 1234,
'IBLOCK_ID' => 5,
'NAME' => 'Название товара',
'XML_ID' => 'externalCode1',
'ACTIVE' => 'Y',
// ... другие поля элемента инфоблока
],
'MS' => $itemMs // объект из МойСклад
],
'externalCode2' => [
'BX' => [...],
'MS' => $itemMs
],
// ...
]
Структура products
[
1234 => [ // ID элемента Битрикс
'ID' => 1234,
'TYPE' => 1,
'QUANTITY' => 10.0,
'WEIGHT' => 500.0,
'WIDTH' => 0.0,
'LENGTH' => 0.0,
'HEIGHT' => 0.0,
'MEASURE' => 5,
'VAT_ID' => 1,
'VAT_INCLUDED' => 'Y',
'UF_PRODUCT_GROUP' => 0,
'BARCODE_LIST' => [...], // если загружены штрихкоды
],
// ... другие товары
]
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnAfterUpdateItems',
'OnAfterUpdateItemsHandler'
);
function OnAfterUpdateItemsHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$entity = $eventParams['entity']; //сущность в МойСклад, которая обрабатывается (четыре варианта значения: product / variant / bundle / service)
$items = $eventParams['items']; //массив обрабатываемых объектов (ниже пример их обработки)
$productsBxArray = $eventParams['products']; //массив полей товара
foreach ($items as $xmlId => $currentItem) {
// $xmlId -- внешний код элемента, для модификаций это значение будет без решетки # во внешнем коде
$itemBx = $currentItem['BX']; //сущность в битриксе, доступ к полям идет через ассоциативный массив
$item = $currentItem['MS']; //сущность в МС, доступ к полям идет через свойства объекта
//поля товара в торговом каталоге
$productBxArray = isset($productsBxArray[$itemBx['ID']]) ? $productsBxArray[$itemBx['ID']] : [];
}
}