2016-09-15 9 views
2

私は注文を自動的にキャンセルするスクリプトを実行しています。 スクリプトは次のようになります。プログラムによる注文キャンセル時にMagentoイベントが発生しない

$order->cancel()->save(); 

これに伴う問題は、それが正しく注文をキャンセルけどorder_cancel_afterイベントを送出していないようだということです。

この問題をどのように解決すればよいですか、このイベントをスクリプトにディスパッチできますか?このキャンセルアクションと、バックエンドの注文ページのキャンセルボタンをクリックしたのと異なる理由は何ですか?

+0

あなたの拡張機能のconfig.xml –

+0

に追加されたイベントハンドルを共有することができますそれは、企業の報酬の拡張機能である、私はこの拡張機能をorder_cancel_afterトリガすることになるでしょう顧客に報酬を返す。 – Jack

+0

@Jack私はMagento 2 EEでまったく同じ問題を実際に処理しています。 Magento_Rewardsのorder_cancel_afterイベントは、バックエンドでのみ起動するように設定されているようです。フロントエンドでイベントオブザーバを登録するモジュールを追加する方法を示す答えを追加します。 – floorz

答えて

0

あなたはこのように、独自のイベントを送出することができます。

Mage::dispatchEvent(
     'order_cancel_after', 
     array('order' => $order, 'quote' => $this->getQuote()) 
    ); 

置き、使用状況にaccrodingこのコード。

1

$order->cancel()が呼び出されたときにフロントエンドでorder_cancel_afterイベントが発生するようになったのはこれです。私は、Magento_Authorizenの問題のためにこれを実装しなければなりませんでした。その問題は、クレジットカードが拒否されたときにそのイベントが解消されなかったためです。

を編集してください:Magento 1 EEに関するご質問がありました。 Magento 2 EEでこの問題が発生した場合に備えて、ここに残しておきます。

、指定されたコンテンツ(ベンダー名で[ベンダー]の交換)で、次のファイルを作成します。

アプリ/コードを/ [ベンダー] /Reward/registration.php

このファイルには責任がありますあなたのモジュールについてMagentoに知らせるためです。この回答のすべてのファイルを追加したら、php bin/magento setup:upgradeを実行する必要があります。

<?php 
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE, 
    '[Vendor]_Reward', 
    __DIR__ 
); 

アプリ/コード/ [ベンダー] /Reward/etc/module.xml

このファイルには、モジュールのセットアップのバージョンと、それは(私たちの場合はMagento_Reward)に依存して任意のモジュールを宣言します。

<?xml version="1.0"?> 

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> 
    <module name="[Vendor]_Reward" setup_version="0.1.0"> 
     <sequence> 
      <module name="Magento_Reward"/> 
     </sequence> 
    </module> 
</config> 

アプリ/コード/ [ベンダー] /Reward/etc/frontend/events.xml

すでにadminhtml(バックエンド)のために定義された株式Magento_Rewardオブザーバを登録しますが、ためにそれを行います。このファイルフロントエンド(なぜなら、それは/ etc フロントエンドに場所年代の):

<?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="order_cancel_after"> 
     <observer name="magento_reward" instance="Magento\Reward\Observer\ReturnRewardPoints" /> 
    </event> 
</config> 
関連する問題