События на сохранение заказа
События
Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа save() . При этом сохраняется не только заказ, но и все связанные с ним сущности (оплаты и отгрузки) именно в том консистентном состоянии, которое было достигнуто путем расчетов объектов:
Вмешаться в процесс сохранения можно с помощью двух событий на сохранение заказа.
Событие | Описание и параметры | ||||||
---|---|---|---|---|---|---|---|
OnSaleOrderBeforeSaved | Происходит в самом начале процесса сохранения. Параметры
| ||||||
OnSaleOrderSaved | Происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены. Параметры
|
Примеры
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник
Получить измененные данные заказа
Цитата |
---|
Егор Лёсин написал: $event приходит пустым |
Андрей Николаев, да, действительно не пустой. Я посмотрел результат var_export().
Мне было необходимо получить PropertyCollection из объекта
Таким образом, в arPropz я получил данные ещё до записи их в базу данных. Это и есть массив с уже измененными свойствами (ещё не решение вопроса)
Для получения старых данных заказа, я сначала получил ID заказа:
Андрей Николаев, в ответе приходит вот это:
<
> |
Н е приходит: количество, комментарий покупателя к заказу, контактный адрес, квартира, корпус, дом, улица, населенный пункт, область/район, индекс, телефон, E-Mail, ФИО, пункт самовывоза
Приходит : цена, комментарий менеджера, комментарий покупателя к заказу, статус заказа
Можно ли где-то посмотреть, какие свойства должны приходить?
Вот код:
Цитата |
---|
$eventManager->addEventHandler(«sale», «OnSalePropertyValueEntitySaved», «myOnSalePropertyValueEntitySaved»); function myOnSalePropertyValueEntitySaved(Bitrix\Main\Event $event) < $order = $event->getParameter(«ENTITY»); $oldValues = $event->getParameter(«VALUES»); $arOrderVals = $order->getFields()->getValues(); > |
$oldValues и $arOrderVals у меня содержат по несколько массивов.
$oldValues :
<"VALUE":"1111"><"VALUE":"+375 (11) 111-11-11"><"VALUE":"1213"><"VALUE":""><"VALUE":""><"VALUE":""> <"VALUE":""> Из старых значений приходят : телефон, пункт самовывоза, ФИО, email, телефон, индекс, область/район, населенный пункт, улица, дом, корпус, квартира, контактный адрес: Свойства которые не приходят : статус заказа, Комментарий покупателя к заказу, комментарий менеджера, количество, сумма Как мне получить недостающие свойства? Есть ли описание того, что приходит в VALUES события OnSalePropertyValueEntitySaved ? (Можно сказать, что google по запросу OnSalePropertyValueEntitySaved, выдает только одну страницу документации ) Источник Не работает оформление заказа
У меня аналогичная ситуация. Прелоудер крутится, потом останавливается но страница не перенаправляется на страницу успешного заказа. А по факту заказ оформляется. В консоли ошибок нет. |
Обновился до 17.0.15, та же проблема ошибок нет, колесико крутится, /bitrix/components/bitrix/pull.request/ajax.php?UPDATE_STATE возвращает «<'MESSAGE':[],'ERROR':''>» и все ничего не происходит. Как выявить причину не понятно.
UP!
Обновились до 18.0.6. и тоже самое
методом проб, оказалась ошибка в следующем
и вот в нем я дописываю кое-какие поля в заказ для 1С
и при вызове метода $order -> save(); в обработчике, вылетает.
Даже если просто оставить так:
Вылетает тут /bitrix/modules/sale/lib/order.php метод Order::save():
поэтому и не перенаправляется на нужную страницу.
Убрав $order -> save(); из обработчика, оформление заказа работает норм.
Но мне надо как-то дописывать поля в заказ!
Добрые люди, в том числе и тех поддержка Битрикса, подсказали использовать событие OnSaleOrderBeforeSaved вместо OnSaleOrderSaved.
Что я и сделала и убрала $order -> save(); из обработчика
Все работает! Спасибо!
Здравствуйте, при нажатии на кнопку «Оформить заказ» ничего не происходит, кроме прелоудера. Заказы нигде не пояаляются, редиректа не происходит. Модуль из оформления заказа из коробки, не кастомный.
Ошибок также не наблюдаем.
Что делать?
Источник
steepzero / init.php
function my_OnSaleOrderSaved(Main\Event $event) < |
$order = $event- > getParameter(‘ENTITY’); |
$isNew = $event- > getParameter(‘IS_NEW’); |
$propsCollection = $order- > getPropertyCollection(); |
if($isNew) < |
$out = »; |
$arProps = array(); |
foreach($propsCollection- > getGroupProperties(1) as $prop) < |
$propValue = $prop- > getValue(); |
$p = $prop- > getProperty(); |
$arProps[$p[‘CODE’]] = $propValue; |
> |
$basket = $order- > getBasket()- > getBasketItems(); |
$arItems = array(); |
foreach ($basket as $item) < |
$qtty = $item- > formatQuantity($item- > getQuantity()); |
$price = $item- > getPrice(); |
$name = $item- > getField(‘NAME’); |
$arItems[] = array( |
‘NAME’ = > $name, |
‘QUANTITY’ = > $qtty, |
‘PRICE’ = > CurrencyFormat($price,’RUB’), |
); |
> |
$basket_html = »; |
foreach ($arItems as $arItem) < |
$basket_html .= $arItem[‘NAME’].’ — ‘.$arItem[‘QUANTITY’].’ x ‘.$arItem[‘PRICE’].» br > «; |
> |
$arFields = array( |
‘ORDER_ID’ = > $order- > getId(), |
‘ORDER_DATE’ = > $order- > getDateInsert(), |
‘PRICE’ = > CurrencyFormat($order- > getPrice(),’RUB’), |
‘ORDER_LIST’ = > $basket_html, |
‘DESCRIPTION’ = > $order- > getField(‘USER_DESCRIPTION’), |
); |
$arFields = array_merge($arFields,$arProps); |
\Bitrix\Main\Mail\Event::send(array( |
«EVENT_NAME» = > «SALE_NEW_ORDER_ADMIN», |
«LID» = > «s1», |
«C_FIELDS» = > $arFields |
)); |
> |
> |
This comment has been minimized.
Copy link Quote reply
spaunw1 commented Dec 4, 2017
before 10 better:
foreach ($propsCollection->getGroups() as $group)
<
foreach($propsCollection->getGroupProperties($group[«ID»]) as $prop)<
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Bitrix подмена статуса заказа при изменении заказа?
как подменить приходящий статус в событие и сохранить другой?
- Вопрос задан 12 мая
- 225 просмотров
Сам обработчик. У меня в примере логика на смена статуса заказа для определенных служб. Ее можно переписать на что угодно. Основное это $event->addResult
Пример 100% рабочий. Взят с прода.
PetrPo, вот полная версия
Yuriy, вопрос как звучит? как подменить приходящий статус в событие и сохранить другой?
Я тебе написал как это сделать, повторю еще раз. Оставь только эти строки в событии:
Измени статус и увидишь что все работает. Если это так, то проблема в остальной твоей писанине, я в нее не вникал и дал ответ на поставленный вопрос.
PetrPo, ты понимаешь что такое зависание?? какой может быть ответ если всё висит. срабатывает timeout 504 getway.. в логе тоже нет ошибок ни в битриксе ни в nginx
я уже сделал что мне нужно, немного по другому
Источник