【问题标题】:How get order status in observer?如何在观察者中获取订单状态?
【发布时间】:2012-09-05 04:37:45
【问题描述】:

sales_order_save_after事件下,我在观察者中有一些代码可以获取订单状态。

public function saveBookingInfoFromOrder(Varien_Event_Observer $observer){                
        $order = $observer->getEvent()->getOrder();

        //$last_orderid = $order->getIncrementId();

        $last_orderid = $order->getId();
        $order_status = $order->getStatus();
}

但是,订单状态尚未到来。为什么?

【问题讨论】:

    标签: magento events orders observers


    【解决方案1】:

    事件sales_order_save_after 有点棘手。第一次触发时 Order 尚未提交给 DB,更重要的是 - 它实际上还没有设置 State 和 Status。

    如果你想获得Status,还有其他更适合你的活动:

    1. sales_order_payment_place_end - 这是在Mage_Sales_Model_Order_Payment::place 方法中在$order->setState 完成后立即触发的。 place函数本身就是一个afterCommit回调,用于订单保存交易过程。

    2. sales_order_save_commit_after - 在处理完所有 afterCommit 后触发

    3. sales_model_service_quote_submit_success - 这是Mage_Sales_Model_Service_Quote::submitOrder 方法中的最后一个事件 - 在它被调度的那一刻,订单肯定会拥有所有数据,并且您可以确定在订单创建过程中没有错误。

    【讨论】:

    • 1 - 我不能使用这个:sales_order_payment_place_end 因为它只包含付款信息,我试过了
    • 2-sales_model_service_quote_submit_success 这个事件给我带来了成功,你说得对,我提到的事件没有获得订单状态,因为它当时不在数据库中。所以我改变了这个事件并且它起作用了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多