1

I am not able to get order details in observer using sales_order_save_before event:-

Path: - /app/code/Company/Mymodule/etc/events.xml

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_category_delete_after"> <observer name="Mymodule" instance="Company\Mymodule\Observer\Onafterdelete"/> </event> <event name="sales_order_save_before"> <observer name="Mymodule" instance="Company\Mymodule\Observer\Onbeforesaveorder"/> </event> </config> 

Path:- /app/code/Company/Mymodule/Observer/Onbeforesaveorder.php

class Onbeforesaveorder implements \Magento\Framework\Event\ObserverInterface { protected $_resource; /** * @var \Psr\Log\LoggerInterface */ protected $_logger; public function __construct( \Psr\Log\LoggerInterface $logger, \Magento\Framework\App\ResourceConnection $resource ) { $this->_logger = $logger; $this->_resource = $resource; } public function execute(\Magento\Framework\Event\Observer $observer) { $orderObj = $observer->getOrder(); $order = $observer->getEvent()->getOrder(); if($order->getId()){ $this->_logger->debug($order->getEntityId()." observer1111"); } if ($orderObj->getId()){ $this->_logger->debug($orderObj->getEntityId()." observer22222"); } $this->_logger->debug("observer3333");// event is fired because I am getting this message in my log file. return $this; } } 

I am trying two way to get order ID in my code but both way is not working.

Please let me know if I am missing any thing or doing wrong as event is fired but not able to get order details in observer.

5 Answers 5

0

You should use the checkout_submit_all_after event. The event which you are using will not have order data as order will not be created by then.

0

Company\Mymodule\etc\events.xml

<event name="sales_model_service_quote_submit_before"> <observer name="getorderinfo" instance="Company\Mymodule\Observer\Onbeforesaveorder"/> </event> 

In observer file,

use Magento\Framework\Event\Observer; use Company\Mymodule\Model\Transaction; class Onbeforesaveorder extends AbstractObserver { public function execute(Observer $observer) { /** @var \Magento\Sales\Model\Order $order */ $order = $observer->getEvent()->getOrder(); $address = $observer->getEvent()->getAddress(); } } 
0

Write a below code to Company\Mymodule\etc\events.xml

sales_model_service_quote_submit_before 

You can get order id by below code

echo "<pre>"; print_r($observer->getOrder()->getIncrementId()); exit; 
9
  • Thanks for your reply but Not working Commented Feb 8, 2018 at 11:18
  • Check my updated answer Commented Feb 8, 2018 at 11:24
  • I have did the same Commented Feb 8, 2018 at 11:30
  • Check my updated answer, you will get order id. Commented Feb 8, 2018 at 11:33
  • I am able to get Increment Id but not order id, How to get order is here? Commented Feb 8, 2018 at 11:47
0

Try this code

<?php namespace modulename\frontname\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\App\Request\DataPersistorInterface; use Magento\Framework\App\ObjectManager; class OrderPlace implements ObserverInterface { public function __construct( \Magento\Sales\Api\Data\OrderInterface $order ) { $this->order = $order; } public function execute(\Magento\Framework\Event\Observer $observer) { $orderids = $observer->getEvent()->getOrderIds(); foreach ($orderids as $orderid) { $order = $this->order->load($orderid); } $storeId = $order->getStoreId(); $oldStatus = $order->getOrigData('status'); $newStatus = $order->getData('status');\ } } 
0
class CompanySaveCommitAfter implements ObserverInterface { public function execute(Observer $observer) { try { $company = $observer->getEvent()->getObject(); } catch (\Exception $exception) { return $exception->getMessage(); } return $this; } } 

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.