События на сохранение заказа
События
Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа save()
. При этом сохраняется не только заказ, но и все связанные с ним сущности (оплаты и отгрузки) именно в том консистентном состоянии, которое было достигнуто путем расчетов объектов:
/** \Bitrix\Sale\Order $order */ $order = \Bitrix\Sale\Order::load(18); $order->setField("USER_DESCRIPTION", "Доставить к подъезду"); $shipmentCollection = $order->getShipmentCollection(); /** \Bitrix\Sale\Shipment $shipment */ foreach ($shipmentCollection as $shipment) { if (!$shipment->isSystem()) $shipment->allowDelivery(); } $order->save();
Вмешаться в процесс сохранения можно с помощью двух событий на сохранение заказа.
Событие | Описание и параметры | ||||||
---|---|---|---|---|---|---|---|
OnSaleOrderBeforeSaved | Происходит в самом начале процесса сохранения.
Параметры
|
||||||
OnSaleOrderSaved | Происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены.
Параметры
|
Примеры
//пример использования события OnSaleOrderSaved use Bitrix\Main; Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderSaved', 'myFunction' ); //в обработчике получаем сумму, с которой планируются некоторые действия в дальнейшем: function myFunction(Main\Event $event) { /** @var Order $order */ $order = $event->getParameter("ENTITY"); $oldValues = $event->getParameter("VALUES"); $isNew = $event->getParameter("IS_NEW"); if ($isNew) { $sum = $order->getPrice(); // . . . } }
Сообщение не промодерировано, возможны ошибки и неточности.
|
в ядре 23.675.0 в корпоративном портале в событии OnSaleOrderBeforeSaved приходит Bitrix\Crm\Order\Order
|
Сообщение не промодерировано, возможны ошибки и неточности.
|
||||
| ||||
Сообщение не промодерировано, возможны ошибки и неточности.
|
Документация по событию OnSaleOrderSaved для версии (по крайней мере) 21.900.0 не корректна.
Теперь в событие приходит не \Bitrix\Main\Event, а непосредственно сам \Bitrix\Sale\Order |
Сообщение не промодерировано, возможны ошибки и неточности.
|
В событии OnSaleOrderBeforeSaved
Как изменить свойство и ВЕРНУТЬ ОШИБКУ, и чтобы свойство было ИЗМЕНЁННЫМ ??????????????????????????????????????? |
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
| ||
Cтанислав Захаров
|
||
P.S. чтобы применить изменения для $order
| ||
Максим Масалов
|
||
Если вам нужно изменить значения определенных свойств в заказе, но при этом в этих значениях участвуют другие свойства, то сделать это можно таким образом.
| ||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.