IBM® Sterling Order Management (OMS)® 在由客户、供应商和合作伙伴组成的一个动态业务网络中编排跨渠道的销售和订单履行流程。IBM Sterling Order Management 包含以下 4 个组件:
在真实场景中,不同的店面客户拥有不同的需求,根据业务需求,他们可能需要改变 OOB 集成行为。IBM Sterling OMS 为店面应用程序提供了各种自定义选项,使您能够修改现有的行为来满足需求。与 IBM Sterling OMS 的集成提供了以下可扩展性选项:
图 1. IBM Sterling OMS 提供的可扩展性选项
集成是通过对 Sterling Service Definition Framework (SDF) 中的服务的外部访问能力来实现的。以下 SDF Extended API 组件提供了一个可扩展的集成服务的构建基块:
InvokeService扩展 API 是 OOB 服务的入口点。
图 2. SDF 服务中的 InvokeService 组件
这个扩展的服务接受一下参数:
图 3. SDF 服务中的 InvokeService 组件
serviceName 标识该组件所启动的内部服务。
例如,图 4中的 SCWC_SDF_changeOrder 。
图 4. 内部服务 SCWC_SDF_changeOrder
需要使用 extensionClass 来实现接口 SCWCIntegrationServiceAPICallback :
清单 1. 接口 SCWCIntegrationServiceAPICallback
public interface SCWCIntegrationServiceAPICallback { public void beforeServiceCall(YFSEnvironment env, String serviceName, Document input); public void afterServiceCall(YFSEnvironment env, String serviceName, Document output); }
在 InvokeService 组件获得请求输入时,它会检查 extensionClass 参数是否已配置。如果已配置,则会首先启动实现类的 beforeServiceCall 方法。接下来将会启动 serviceName 参数所标识的内部服务。最后,将会调用实现类的 afterServiceCall 方法。这些方法可实现来引入自定义代码,修改向服务的输入或来自服务的输出,无需对服务定义执行任何更改。
图 5. 接口 SCWCIntegrationServiceAPICallback 的方法执行流
图 6中的这个组件用于在 WCS 格式与 OMS 格式之间来回转换请求。
图 6. SDF 服务中的 ValueMapXSLTranslator 组件
ValueMapXSLTranslator组件接受 3 个参数:
图 7. ValueMapXSLTranslator 参数
类似于 ValueMapXSLTranslator Component 组件, ValueMapXSLTranslator 组件也通过 extensionClass 参数所指定的类来支持可扩展性。
该扩展类需要实现清单 2中的以下接口。
清单 2. 接口 SCWCXSLTCallback
public interface SCWCXSLTCallback { public Document beforeXSLTCall(YFSEnvironment env, Document input); public Document afterXSLTCall(YFSEnvironment env, Document output); }
在 ValueMapXSLTranslator 组件获得请求输入时,它会检查 extensionClass 参数是否已配置。如果已配置,则会首先启动实现类的 beforeXSLTCall 方法。接下来,它会使用 xslFileName 参数所标识的 XSL 转换器来执行输入转换。最后,将会启动实现类的 afterXSLTCall 方法。这些方法可实现来引入自定义代码,修改向 XSL 转换的输入或来自 XSL 转换的输出,无需对 XSL 转换器执行任何更改。
图 8. 接口 SCWCXSLTCallback 的方法执行流
回页首
您也可以自定义默认的 XSL 转换器,从请求文档读取新属性或返回一个具有不同 XML 结构的响应文档。自定义的 XSL 文件将由服务通过 xslFile 参数读取。
在这里的清单 3中,我们使用了来自外部系统的输入,创建 OMS changeOrder API 输入的一个部分,以便通过 OrderNo 和 EnterpriseCode 识别 OMS 上的订单。
清单 3. 原始 XSLT 代码
<Order> <xsl:attribute name="OrderNo"> <xsl:value-of select="$order/_ord:OrderIdentifier/_wcf:UniqueID" /> </xsl:attribute> <xsl:attribute name="EnterpriseCode"> <xsl:value-of select$order/_ord:StoreIdentifier/_wcf:UniqueID/text()"/> </xsl:attribute> </Order>
如果外部系统未存储 Order No 或 EnterpriseCode ,只拥有主键 OrderHeaderKey 来识别 OMS 上的订单记录,那么可以修改 XSL 转换器来处理此限制,如清单 4中所示。
清单 4. 对 XSL 转换器的 XSL 修改
<Order> <xsl:attribute name="OrderHeaderKey"> <xsl:value-of select="$order/_ord:OrderIdentifier/_wcf:OrderPrimaryID" /> </xsl:attribute> </Order>
回页首
除了已介绍的扩展的 API 组件之外,还可以扩展 API 行为。API 的行为可通过以下选项来扩展:
图 9. API 可扩展性选项
Sterling API 框架允许您在 API 执行期间启动的 UserExit 实现中引入自定义代码。
UserExit接口信息可从 API Javadoc™ 获取。例如, changeOrder API 允许您实现 UserExit YCMGetItemDetailsUE 。
实现类需要实现 UE 接口: com.yantra.ycm.japi.ue.YCMGetItemDetailsUE
清单 5. 接口 YCMGetItemDetailsUE
public interface YCMGetItemDetailsUE { public Document getItemDetails(YFSEnvironment env, Document inXML) throws YFSUserExitException; }
API 的输出可通过自定义 API 模板来控制,请参见清单 6中的默认的订单模板示例。
清单 6. 订单的示例默认模板
<Order EnterpriseCode="" OrderHeaderKey="" DocumentType="" OrderNo=""/>
例如,如果 API 响应的输出中需要存在新属性 BillToID 或元素 OrderLines ,请参见清单 7中修改后的模板。
清单 7. 修改后的订单的模板模板
<Order EnterpriseCode="" BillToID ="" OrderHeaderKey="" DocumentType="" OrderNo=""> <OrderLines> <OrderLine OrderLineKey=""/> </OrderLines> </Order>
回页首
Sterling OMS 的可扩展性使您能够修改 OMS 的现有行为来满足您的独特需求。这种自定义使您能够创建最适合您客户、供应商和合作伙伴的业务网络需求的解决方案。API、XSL 转换和 SDF 框架带来的可扩展性,使您能够根据集中化的库存、订货承诺和履行中心的 OMS 功能来支持全渠道订单履行。