1

次のような注文があります。 仮注文

この注文で次のものの出荷を作成したい (すべてではありません):

2×VCF001

1×SBA364

これを達成するために、出荷 API に関する次の情報を見つけました: http://bit.ly/17rpuwj

API のこのドキュメントに基づいて、次のコードを思いつきました。実行しようとすると、次のエラーCannot create an empty shipping が表示されました。

$order_number = '300000002';
$order = Mage::getModel('sales/order')->loadByIncrementId($order_number);
$allocations = array(
    array('sku' => 'VCF001', 'allocated_qty' => 2),
    array('sku' => 'SBA364', 'allocated_qty' => 1)
);

function GetOrderItemId($order_items, $sku) {
    foreach ($order_items as $order_item) {
        if ($order_item->getSku() == $sku) {
            return $order_item->getItemId();
        }
    }
    return 0;
}

function CreateShipment($order, $allocations)
{
    // Get Order Items
    $order_items = $order->getItemsCollection();

    // Parepare Item Qtys For Shipment
    $item_qtys = array();
    foreach ($allocations as $allocation) {
        $item_qtys[] = array(GetOrderItemId($order_items,
            $allocation['sku']) => $allocation['allocated_qty']);
    }

    // Anticipate Errors
    try
    {
        // Create Shipment
        $shipment = new Mage_Sales_Model_Order_Shipment_Api();
        $shipmentId = $shipment->create($order->getIncrementId(),
            $item_qtys, 'Pick #123 Sent to Warehouse');

        // Done
        echo 'Shipment Created - ID #'. $shipmentId;
    }
    catch (Exception $e)
    {
        print_r($e);
    }
}

CreateShipment($order, $allocations);

これが意図したとおりに機能しない理由は何ですか? ここで完全な例外ログを参照してください: http://pastebin.com/raw.php?i=GMN4WCAE

4

1 に答える 1

4

代わりに次のようにしてみてください:

    protected function _createShipment($order, $qtysForProducts)
    {
        $shipment = $order->prepareShipment($qtysForProducts);
        if ($shipment) {
            $shipment->register();

            $shipment->sendEmail(true)
            ->setEmailSent(true)
            ->save();

            $order->setIsInProcess(true);

            $transactionSave = Mage::getModel('core/resource_transaction')
                ->addObject($shipment)
                ->addObject($shipment->getOrder())
                ->save();
        }

        return $shipment;
    }
于 2013-05-29T11:48:18.070 に答える