跳转到内容
技术文章
作者简介照片Ing万博新体育手机客户端o Woesner

在低于2105的SAP商业云版本中使用斯巴达克斯UI框架运行OAA -操作指南

亲爱的零售社区:

许多零售商都在实施SAP商业云,同时还采用了新的Spartacus UX基于java脚本的框架,这比以前基于模板的B2C加速器提供了巨大的优势。

SAP商业云,集成扩展包2108以及更高的支持SAP Retail的集成全渠道文章可用性和来源(又名OAA)与斯巴达克斯店面。

然而,在2108年之前,OAA只有B2C加速器支持,而不是斯巴达克斯用户界面。

请注意:

SAP商业云,集成扩展包拥有自己的发行号。集成扩展包支持专用的商业核心释放它也有自己的发行号。

但是,对于使用Commerce Core发行版的项目低于释放2105有一个简单的方法让OAA和斯巴达克斯一起运作以项目为基础

这个开发人员指南是最近从一个客户项目中创建的。请注意,SAP不能为此过程提供任何形式的支持。

最好的问候,

Ingo Woesner博士
产品经理
SAP客户体验
SAP SE

****************************

问题描述

我们已经注意到零售集成中的OAA(全渠道文章可用性)部分在Spartacus / OCC设置中与低于2108的集成扩展包不工作。

从前端的角度来看,一切工作都没有注意到没有执行OAA调用,但是,一旦下了订单,触发的业务流程就会由于与缺失字段相关的错误而失败。

这是您将得到的异常。

美国广播公司

此时,您可能认为问题出在订单过程中,但事实并非如此。订单流程正在正确地尝试检索sapSource模型。出现这个问题是因为在前面的签出过程中,这个字段没有正确设置,但是为什么呢?为什么不持久化源结果?继续阅读,了解原因。

深入研究代码,您将注意到在签出过程中多次执行持久化源结果。负责的方法是doSourcingForSessionCart

对这个方法的调用在不同的步骤中执行,都使用一些验证器:

类中定义了这些验证器sapoaaaddon扩展,这个插件当然是扩展集的一部分。

但是,这里是关键部分,当您使用Spartacus / OCC设置时,永远不会使用这些验证器。

为什么?

如果查看spring文件和java代码,就会发现façade扩展使用了这些验证器defaultAcceleratorCheckoutFacade

但是当使用OCC层时,acceleratorCheckoutFacade不被使用。这个façade仅为传统加速器设计。

因此,基本上,这里发生的情况是在签出过程中没有执行OAA调用,因为不存在对OAA后端执行同步调用的代码注入。显然,如果没有调用被触发,没有结果被持久化。

解决方案

解决办法很简单。可以想象,解决这个问题的方法是在不同的OCC调用中找到正确的位置,将这些调用注入到OAA后端。

最简单的方法(您可以找到更好的方法)是自定义两个控制器和其中的一些方法,以执行与在sapoaaadon验证器中完成的相同调用。请注意,根据您自己的扩展和自定义,执行这些更改的位置可能会有所不同。

例如,我们希望在设置支付细节时调用OAA后端。为此,我们应该自定义basecommerceccontroller。setPaymentDetailsInternal:

我们已经确定了4个不同的方法,需要做这个改变(都在BaseCommerceController类中):

  • setPaymentDetailsInternal
  • setCartDeliveryAddressInternal
  • setCartDeliveryModeInternal
  • addPaymentDetailsInternal

如前所述,请注意,根据您的实现和OCC调用,这可能会有所不同,但解决它的方法将与上面解释的相同。

一旦部署了这些更改,就会以与加速器façade相同的方式执行OAA调用,结果将被持久化,因此订单流程将继续进行,不会出现错误。

指定的标签

      3评论
      你一定是登录评论:评论或回复一篇文章
      作者头像斯蒂芬·哈万博新体育手机客户端利南
      Stephen并不遥远

      不修改代码怎么可能呢?

      作者简介照片Ing万博新体育手机客户端o Woesner
      Ingo Woesner
      博客作者

      你好斯蒂芬,

      这是目前唯一的办法。我相信OAA支持有望在即将发布的版本中提供。

      Ingo

      作者的资料照片马库万博新体育手机客户端斯Perndorfer
      马库斯Perndorfer

      不要修补或修改任何平台代码,包括commercewebservices

      修改平台代码被普遍认为是不好的做法,从中长期来看会损害项目。

      实现相同结果的简单方法是注入自定义签出facade,该facade在常规处理之前调用相关方法。

      如果你跟上了Composition-over-Inheritance(你应该这样做!),它看起来会像这样:

      SourcingCheckoutFacade.java

      公共类SourcingCheckoutFacade实现CheckoutFacade{私有最终CheckoutFacade标准化实现…public boolean setPaymentDetails(final String paymentInfoId) {if (dosourcingforessioncart()){返回normalization .setPaymentDetails(paymentInfoId)}否则{抛出新的NoCheckoutCartException("sourcing不成功")}}..}

      sourcingextension-spring.xml

          .