是否可以自定义店面以将购物车拆分为不同的订单?

2020-09-14 09:29发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Hybris 6.3,我们为B2B实施生成了一个模块,我需要根据购物车中的产品,账单地址,付款,交货等将购物车内容分为不同的订单 共享相同的参数。

根据我们从客户那里收集到的要求,我们得出结论,在这里我们不需要采用寄售策略,因为该策略可以处理一个订单并将其拆分为运输和交付目的,相反,我们客户的需求是不同的产品 在购物车中按一组共享属性进行分组,并为每组产品生成订单。

到目前为止,我已经确定了负责下订单的类 DefaultCheckoutFacade ,该类包含以下方法:

  @Override
  公共OrderData placeOrder()引发InvalidCartException
  {
      final CartModel cartModel = getCart();
      如果(cartModel!= null)
      {
          如果(cartModel.getUser()。equals(getCurrentUserForCheckout())|| getCheckoutCustomerStrategy()。isAnonymousCheckout())
          {
              beforePlaceOrder(cartModel);
              最后的OrderModel orderModel = placeOrder(cartModel);
              afterPlaceOrder(cartModel,orderModel);
              如果(orderModel!= null)
              {
                  返回getOrderConverter()。convert(orderModel);
              }
          }
      }
      返回null;
  }

  

据我了解,我应该重写此方法,以根据需求中设置的标准生成不同的 CartModel ,并为每个 CartModel 下订单。 我修改了 CartModel 类,它是超类 AbstractOrderModel ,我猜想在上述方法中的 getCart()调用之后,我只需要 修改 CartModel 中的条目,并为我需要下达的每个订单调用方法 placeOrder(),但允许处理 CartModel 这样的对象?

或者,如果我需要将购物车分成不同的订单,是否应该以其他方式处理? 是否需要多个推车,但将其显示为一个应该做的事情? 是否应在OOTB Commercefacades扩展上进行这种修改? 有没有办法将其扩展到我们模块中的某个地方?

编辑

我开始阅读有关多个购物车的信息, 我需要什么,但是我还没有找到如何将条目保存到保存的购物车中的方法。 在此链接中,我可以看到如何保存购物车,方法saveCart 返回CommerceSaveCartResultData对象,方法saveCnd的getCartForCodeAndCurrentUser方法都收到一个CommerceSaveCartParameter,其中必须包含CartModel,如何生成此对象的实例以在CommerceSaveCartParameter中设置?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Hybris 6.3,我们为B2B实施生成了一个模块,我需要根据购物车中的产品,账单地址,付款,交货等将购物车内容分为不同的订单 共享相同的参数。

根据我们从客户那里收集到的要求,我们得出结论,在这里我们不需要采用寄售策略,因为该策略可以处理一个订单并将其拆分为运输和交付目的,相反,我们客户的需求是不同的产品 在购物车中按一组共享属性进行分组,并为每组产品生成订单。

到目前为止,我已经确定了负责下订单的类 DefaultCheckoutFacade ,该类包含以下方法:

  @Override
  公共OrderData placeOrder()引发InvalidCartException
  {
      final CartModel cartModel = getCart();
      如果(cartModel!= null)
      {
          如果(cartModel.getUser()。equals(getCurrentUserForCheckout())|| getCheckoutCustomerStrategy()。isAnonymousCheckout())
          {
              beforePlaceOrder(cartModel);
              最后的OrderModel orderModel = placeOrder(cartModel);
              afterPlaceOrder(cartModel,orderModel);
              如果(orderModel!= null)
              {
                  返回getOrderConverter()。convert(orderModel);
              }
          }
      }
      返回null;
  }

  

据我了解,我应该重写此方法,以根据需求中设置的标准生成不同的 CartModel ,并为每个 CartModel 下订单。 我修改了 CartModel 类,它是超类 AbstractOrderModel ,我猜想在上述方法中的 getCart()调用之后,我只需要 修改 CartModel 中的条目,并为我需要下达的每个订单调用方法 placeOrder(),但允许处理 CartModel 这样的对象?

或者,如果我需要将购物车分成不同的订单,是否应该以其他方式处理? 是否需要多个推车,但将其显示为一个应该做的事情? 是否应在OOTB Commercefacades扩展上进行这种修改? 有没有办法将其扩展到我们模块中的某个地方?

编辑

我开始阅读有关多个购物车的信息, 我需要什么,但是我还没有找到如何将条目保存到保存的购物车中的方法。 在此链接中,我可以看到如何保存购物车,方法saveCart 返回CommerceSaveCartResultData对象,方法saveCnd的getCartForCodeAndCurrentUser方法都收到一个CommerceSaveCartParameter,其中必须包含CartModel,如何生成此对象的实例以在CommerceSaveCartParameter中设置?

付费偷看设置
发送
8条回答
N-Moskvin
1楼-- · 2020-09-14 09:56

根据我收集的要求,建议您使用一个父订单模型和多个子订单模型。 父订单模型可以是购物车模型的直接转换,而子订单模型则取决于您的产品需求。 您可以在afterPlaceOrder()方法的自定义Hook类中为子订单进行自定义。 子订单可以一对多关系链接到父订单。 另外,在根据产品的某些标准进行拆分时,您必须特别注意基于当前商品的促销计算和税金计算。

将一个购物车拆分为多个购物车有很多问题,例如1.促销计算可能会完全更改,2.如果购物车中使用会话购物车进行订单转换,那么该代码块也需要 覆盖,依此类推。 如果您遵循上述方法,那么至少您将拥有一个基本订单,其中将包含所有内容的正确详细信息,因此,如果子订单中有任何差异,您可以参考主订单。

SAP小黑
2楼-- · 2020-09-14 09:51

对不起,我以为早点发表了评论,但似乎没有通过。

促销计算对我而言不是问题,因为这些不是以OOTB方式处理的。

那么我应该定义一个与订单相关的新项目ChildOrder吗? 您提到的第二个问题听起来很麻烦,因为会话购物车通过Hybris的许多扩展在许多地方使用。

您知道我是否可以在下订单,设置一组条目,下订单并重复同一购物车直到我设置所有组条目之前修改购物车中的内容?

路亽曱_Ryan
3楼-- · 2020-09-14 09:37

您为什么需要单独的订单,而不仅仅是订单中的托运货物?

Hybris每个订单已支持多批托运,并且具有 OrderSplittingService SplittingStrategy

的各种示例实现

https://help.hybris.com/6.5.0/hcd/8c21e59786691014bb0add90a5a3d52b.html

悠然的二货
4楼-- · 2020-09-14 09:31

此外,产品已经在价格上应用了折扣,仅检查了模型,然后寄售的商品与订单的属性不同,因此对我们的要求不利。

半个程序猿
5楼-- · 2020-09-14 09:47

对于其中一位客户,他们有类似的要求。 我们选择根据产品类型将订单分解为不同的托运(Hybris如上所述已经支持多个托运)。 原因是他们的企业软件只能创建基于特定产品类型的订单,而不能混合使用产品类型。 因此,当我们确实将提取的订单发送到企业软件时,我们就发送了每笔订单的货物。 他们为每一批货物创建了一个订单。 因此,我们可以在企业端使用一个混合订单来包含许多订单(基于托运的数量)。

Aaron 3364
6楼-- · 2020-09-14 09:36

但是,为什么不写出托运的订单单据呢? 我不确定将订单转换为idocs的过程,因为我不与直接与sap交互的任何客户端一起工作,但是肯定有像转换器这样的东西,您可以重写并根据需要进行自定义吗?

您已经说过,托运货物与订单的结构/属性不同,但是它们属于订单的 部分,因此可以从订单中获取所需的任何属性。 它们只是订单中OrderEntries的集合。

一周热门 更多>