在通过在ATG中调用'moveToPurchaseInfo'进行结账后调用CartModifierFormHandler的'RemoveItemFromOrder'

时间:2013-12-21 20:16:13

标签: checkout atg

上下文 在ATG Commerce中 - 要进入结账,需要调用执行moveToPurchaseInfo管道链的CartModifierFormHandler的{​​{1}}方法并检查订单/商业项目并验证它们。然后,如果是,将显示结帐登录页面 用户尚未登录。否则,用户将被定向到发货页面。

要求: 即使在发货后,用户也应该可以删除/更新购物车中的各种商品。

问题: 如果我想在此阶段删除/ updateQuanity,我是否只需要拨打“moveToPurchaseInfo”或者如果我必须在购物车中进行任何修改后再次拨打“RemoveItemFromOrder”?是否有其他替代方案可满足上述要求?

2 个答案:

答案 0 :(得分:0)

解决CartModifierFormhandler你可以做这样的事情

String[] skuIds = { "sku10011"};
    CartModifierFormHandler cmfh = (CartModifierFormHandler) ServletUtil            .getCurrentRequest().resolveName("/atg/commerce/order/purchase/CartModifierFormHandler");
    cmfh.setCatalogRefIds(skuIds);
    cmfh.setProductId("prod10010");
    cmfh.setQuantity(12);
    cmfh.handleAddItemToOrder(ServletUtil.getCurrentRequest(),
            ServletUtil.getCurrentResponse());
    order = cmfh.getOrder();
DynamoHttpServletRequest request = ServletUtil.getCurrentRequest();

        request.setParameter("sku2", "13");

        // Set the new quantity for the commerce item being updated.
        cmfh.setCheckForChangedQuantity(true);
        DynamoHttpServletResponse response = request.getResponse();
        cmfh.handleSetOrder(request, response);

        List<CommerceItem> commerceItem = order.getCommerceItems();
        double quantity = commerceItem.get(0).getQuantity();

        assertEquals(13, quantity, 0);

@Vihung进行更正

答案 1 :(得分:0)

ATG Commerce Checkout中有一个更新订单管道链。 因此,每当订单发生变化时,在结账时或结账前,都会调用更新订单链。

现在,如果你看到你的行动: 从订单更新订单/删除项目 - 两者都是更新操作。因此,每次执行此类更新时,调用Update Order Pipeline Chain应该足够了。但是,请确保在调用更新订单链之前重新定价订单(repriceOrderChain)。如果继续深入研究addItemToOrder方法,您将知道如何调用两个管道链来更新订单。

因此,您不需要使用 moveToPurchaseInfo ,因为您第一次移动到Checkout时已经在Checkout特定参数上检查了您的订单。现在,您所做的唯一更改是更新数量/删除项目。

PS:如果发现任何不同,请回复。

此致 Gaurav E