Февраль 16, 2021
Теги: Магазин
Обработчики событий на изменение полей сущности магазина: "OnBefore<Entity>SetField", "On<Entity>SetField".
В качестве <Entity> могут выступать:
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnBeforeSaleOrderSetField',
'\Partner\MyClass::onBeforeSaleOrderSetField'
);
class MyClass
{
function onBeforeSaleOrderSetField(\Bitrix\Main\Event $event)
{
foreach($event->getResults() as $previousResult)
if($previousResult->getType()!=\Bitrix\Main\EventResult::SUCCESS)
return;
$order = $event->getParameter("ENTITY");
$fieldName = $event->getParameter("NAME");
$fieldValue = $event->getParameter("VALUE");
if(!$order->getId())
return;
if(
($fieldName == 'STATUS_ID')
&& $order->getField($fieldName)!='F'
&& $fieldValue=='F'
&& здесь дополнительное условие
)
{
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
\Bitrix\Sale\ResultError::create(new \Bitrix\Main\Error("Нельзя перевести заказ в финальный статус", "MY_ERROR_CODE"))
);
}
}
}
Вывод сообщения об ошибке при попытке завершения отгрузки:
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnBeforeSaleShipmentSetField',
'\Partner\MyClass::onBeforeSaleShipmentSetField'
);
class MyClass
{
function onBeforeSaleShipmentSetField(\Bitrix\Main\Event $event)
{
foreach($event->getResults() as $previousResult)
if($previousResult->getType()!=\Bitrix\Main\EventResult::SUCCESS)
return;
$shipment = $event->getParameter("ENTITY");
$fieldName = $event->getParameter("NAME");
$fieldValue = $event->getParameter("VALUE");
if(!$order->getId())
return;
if(
($fieldName == 'ALLOW_DELIVERY' || $fieldName == 'DEDUCTED')
&& $shipment->getField($fieldName)=='N'
&& $fieldValue=='Y'
&& здесь дополнительное условие
)
{
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
\Bitrix\Sale\ResultError::create(new \Bitrix\Main\Error("Нельзя выполнить отгрузку", "MY_ERROR_CODE"))
);
}
}
}