sales_order_save_commit_after事件触发了两次?
-
16-10-2019 - |
题
我注册了一个观察者 sales_order_save_commit_after
新订单进来时要通知的事件。这可以正常工作,但是该事件通过相同的顺序连续两次触发。
我的config.xml
<sales_order_save_commit_after>
<observers>
<unique_sales_order_save_commit_after>
<type>singleton</type>
<class>mymodule/observer</class>
<method>export</method>
</unique_sales_order_save_commit_after>
</observers>
</sales_order_save_commit_after>
如何检查是第一次还是其他事件会更好?
更新
我也尝试了 sales_order_invoice_pay
事件(发现 所以)但这并不是我触发的。
解决方案
尝试使用 sales_order_save_after
相反,它在将订单保存在数据库中并返回完整订单对象后立即触发。
我不确定为什么要触发这一事件两次。这是从 Core/Model/Abstract.php
方法 afterCommitCallback
, ,似乎Magento在订单模型上保存 /投入2个不同的数据集。也许曾经是订单本身,并且曾经是状态历史记录。
在两个事件上解析的数据之间是否有任何区别,这可能给出了何处的线索?
其他提示
如果有人仍然对此有问题,我发现Magento如何处理。
在调用方法中,您可以采取订单并在其上设置标志。
前任:
public function export(Varien_Event_Observer $observer) {
$order = $observer->getEvent()->getOrder();
if($order->getExportProcessed()){ //check if flag is already set.
return;
}
// your part of code
//"setExportProcessed" can be called anything you want as it's getting set magically by magento on our $order object.
$order->setExportProcessed(true);
}
在App/Code/Core/Mage/cataloginventory/model/observer.php中
函数suptractQuoteInventory(varien_event_observer $ observer)
是Magento如何处理此事的一个例子。
我将活动更改为 sales_order_place_after
. 。这很好。
public function sendEmail(Varien_Event_Observer $observer) {
if(!Mage::registry('varien_event')){
//your code here...
Mage::register('varien_event',true);
}
}
BOVE代码对我有用。