質問

オブザーバーを登録しました sales_order_save_commit_after 新しい注文が入ったときに通知されるイベント。これは正常に機能しますが、イベントは同じ注文で2回連続でトリガーされます。

my 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 代わりに、データベースに注文が保存され、全次オブジェクトを返す直後にトリガーされます

このイベントが2回トリガーされる理由はわかりません。それはトリガーされたイベントです Core/Model/Abstract.php 方法 afterCommitCallback, 、Magentoは、Orderモデルに2つの異なるデータセットを保存 /コミットしているようです。おそらく一度は順序自体で、一度はステータス履歴です。

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

function subtractquoteinventory(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コードは私のために機能しています。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top