События на изменение полей заказа, отгрузки и др.

Модуль расширенного управления меню для битрикс

Февраль 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"))
            );
        }
    }
}

См. также:

← Переход к списку