Onsaleordersaved is new не работает

События на сохранение заказа

События

Все сущности сохраняются в том состоянии, в котором они есть на текущий момент, т.е. сохранение происходит на уже рассчитанном заказе. Сохранение всегда происходит через метод заказа save() . При этом сохраняется не только заказ, но и все связанные с ним сущности (оплаты и отгрузки) именно в том консистентном состоянии, которое было достигнуто путем расчетов объектов:

Вмешаться в процесс сохранения можно с помощью двух событий на сохранение заказа.

Событие Описание и параметры
OnSaleOrderBeforeSaved Происходит в самом начале процесса сохранения.

Параметры

ENTITY Объект заказа.
VALUES Старые значения полей заказа.
OnSaleOrderSaved Происходит в конце сохранения, когда заказ и все связанные сущности уже сохранены.

Параметры

ENTITY Объект заказа.
VALUES Старые значения полей заказа.
IS_NEW Принимает одно из двух значений: true — если заказ новый, false — если нет. Использование данного флага позволяет избавиться от зацикливаний при вызове сохранения заказа в событии.

Примеры

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Получить измененные данные заказа

Цитата
Егор Лёсин написал:
$event приходит пустым

Андрей Николаев, да, действительно не пустой. Я посмотрел результат var_export().

Мне было необходимо получить PropertyCollection из объекта

Таким образом, в arPropz я получил данные ещё до записи их в базу данных. Это и есть массив с уже измененными свойствами (ещё не решение вопроса)

Для получения старых данных заказа, я сначала получил ID заказа:

Андрей Николаев, в ответе приходит вот это:

<
  • «DATE_STATUS» : < >,
  • «PRICE» : 26.64 ,
  • «VERSION» : «111» ,
  • «DATE_UPDATE» : < >

>

Н е приходит: количество, комментарий покупателя к заказу, контактный адрес, квартира, корпус, дом, улица, населенный пункт, область/район, индекс, телефон, E-Mail, ФИО, пункт самовывоза

Приходит : цена, комментарий менеджера, комментарий покупателя к заказу, статус заказа

Можно ли где-то посмотреть, какие свойства должны приходить?

Вот код:

else < this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); >BX.onCustomEvent(‘BX.Forum.Spoiler:toggle’, []); event.stopPropagation();»>
Цитата
$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

я уже сделал что мне нужно, немного по другому

Источник

Читайте также:  Аутлук 2007 не работает поиск
Оцените статью