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 ID而不是Order 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 回答