0

次のオブザーバーコードで試しました。

...
    public function automaticallyInvoiceShipCompleteOrder($observer)
    {
        $order = $observer->getEvent()->getOrder();

        $orders = Mage::getModel('sales/order_invoice')->getCollection()
                        ->addAttributeToFilter('order_id', array('eq'=>$order->getId()));
        $orders->getSelect()->limit(1);
        if ((int)$orders->count() !== 0) {
            return $this;
        }
        try {
               if($order->canShip())
                {
                $itemQty =  $order->getItemsCollection()->count();
                $items[] = $itemQty;
                // This first definition and 2nd look overlapping, our one is obsolete?
                $shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
                $ship = new Mage_Sales_Model_Order_Shipment_Api();
                $shipmentId = $ship->create($order->getId(), $items, 'Shipment created through ShipMailInvoice', true, true); 
//getting Error here

                }
              }
} catch (Exception $e) {
                $order->addStatusHistoryComment(' Exception occurred during automaticallyInvoiceShipCompleteOrder action. Exception message: '.$e->getMessage(), false);
                $order->save();
            }
return $this;
    }
.....

注文すると、オブザーバーを使用して注文成功イベントをキャプチャできます。最後Fatal error: Maximum function nesting level of '100' reached, aborting!に ajax 呼び出し自体で " " を取得します。

解決策が見つかりませんでした。これについて何かアドバイスをお願いします

4

2 に答える 2

2

注文が保存されるたびに、このオブザーバー メソッドが呼び出され、try ブロックでエラーが発生したため、注文が再度保存されます。それが無限に実行され、100回後に致命的なエラーがスローされると私が思う理由です。

try ブロックのでは、 ではなく$ship->create()を渡す必要があります。Order Increment IDOrder Entity ID

于 2013-02-20T15:36:59.087 に答える
0

以下のコードで試してみました、

   public function automaticallyInvoiceShipCompleteOrder($observer)
{
    //$order = $observer->getEvent()->getOrder();
    $incrementid = $observer->getEvent()->getOrder()->getIncrementId();      
    $order = Mage::getModel('sales/order')->loadByIncrementId($incrementid);
        try {
            // Is the order shipable?
            if($order->canShip())
            {
             $shipmentid = Mage::getModel('sales/order_shipment_api')->create($order->getIncrementId(), array());
            }
            //END Handle Shipment
        } catch (Exception $e) {
            $order->addStatusHistoryComment(' Exception occurred during automaticallyInvoiceShipCompleteOrder action. Exception message: '.$e->getMessage(), false);
        }
        return $this;
}  

出荷が作成されました...

于 2013-02-21T06:19:04.303 に答える