写点什么

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法

作者:Jerry Wang
  • 2022 年 6 月 20 日
  • 本文字数:2047 字

    阅读完需:约 7 分钟

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法

最近笔者由于项目需要,又得学习一个新工具:SAP Cloud Platform Integration,简称 CPI,以前又叫做 HCI - HANA Cloud Platform Integration Service.



笔者想通过本文,把使用这个工具的第一手体会,分享给曾经用过 SAP CRM 中间件,但尚未有机会接触到 CPI 的朋友们。


之所以本文标题里把 SAP CRM 中间件和 SAP CPI 关联在一起,是因为二者同广义上说,扮演的都是系统集成里中间件的角色。


SAP ERP 和 CRM 通过 qRFC 进行业务数据同步,而中间件能够提供队列机制,错误处理,重试,传输监控等功能。



而 SAP CPI 顾名思义,则是云时代下 SAP 推荐的 SAP 产品同第三方云产品进行集成的云端中间件解决方案。



SAP CPI(Cloud Platform Integration)是一种通过云端集成不同系统的解决方案。它是 SAP Cloud Platform Integration Suite 的一部分。 CPI 能够连接系统、服务、人员、数据、人工智能、物联网。


尽管云应用在很长一段时间内被业界广泛讨论,但在企业管理软件领域,不少公司仍然更愿意使用本地解决方案,或者至少是混合解决方案(Hybrid Solutions)。 近些年来 SAP 在公有云和私有云解决方案上做出了巨大的投资,发布 S/4 HANA 的云版本以及后续活动则充分证明了 SAP 向云端转型的决心。


而 SAP CPI 则是 SAP 本地解决方案,SAP 云端解决方案和第三方系统之间互联的重要工具和手段之一,旨在完成关于数据的协议、结构、类型和格式的转换。其用于建模 IFlow 的技术是 Java、JavaScript 或 Groovy Script.


作为学习笔记,Jerry 这里把我学习 SAP CPI 时做的一个 Hello World 级别的练习步骤记录下来。


这个练习的场景是,假设有一个部署在第三方云平台上的 OData 服务,提供了产品主数据查询的功能。我们需要在 SAP 系统里消费这个 OData 服务。SAP 开发人员不希望直接去消费第三方云平台上的 OData 服务,而是期望 SAP CPI 能暴露一个更加容易访问的 API endpoint 出来,例如通过 postman 传一个 Product ID 给 CPI,CPI 拿到这个 ID 后,由 CPI 向第三方云平台发起 OData 请求,拿到请求响应后,CPI 把结果返回给位于 SAP 产品的消费端。



用于这个场景的 OData 服务地址:https://espmrefapps.hana.ondemand.com/espm-cloud-web/espm.svc/$metadata



SAP CPI 是一个 SaaS 应用,在 SAP 云平台控制台的 Subscriptions 面板里订阅和访问。点击 Go to Applications 进入主操作页面。



我们为了实现这个集成场景需要在 CPI 里开发一个集成流 - integration flow(下文简写为 iFlow), 用于定义当其收到消费者传入的 product ID 后,应该进行何种处理。和 ABAP 里的程序需要存储在一个开发包里一样,iFlow 也需要存储在一个包里,称为 Content package.


进入 CPI 后在此处创建一个 Content package:




然后点击上图的 Artifacts 进入 iFlow 创建界面:



取名 Jerry first integration flow, 再点击就能进入 iFlow 的图形化编辑界面了。



一个新的 iFlow 创建之后的默认界面如下:



点击上图最左边的 Sender 图标,将其拖拽到上图中间 integration process 矩形框内的 Start 图标内,这个动作会帮助我们创建一个 inbound adapter,类型我们选择 HTTPS,意思是这个 iFlow 期望其被消费的方式是 HTTPS.



在 Adapter 的 Address 里维护一个 url 片段/CloudIntegrationTrials, 等到最后该 iFlow 正式部署后,生成的 endpoint 就是以该片段结尾,届时我们可以在 postman 等工具里使用该 endpoint 消费这个 iFlow.



考虑到现在流行的 Restful API 实现都期望其消费者以 JSON 格式传输请求内容,我们也沿用这个最佳实践,因此首先拖拽一个 JSON to XML Converter 到 iFlow integration process 建模区域的矩形框里,将 JSON 格式的用户输入转换成 XML 格式:



然后再使用 Content Modifier,将 XML 格式里的 product ID 的值提取出来。



下图展示了 Content Modifier 通过 XPath 将 XML 格式的输入里的 productIdentifier 这个字段的值提取出来。



有了 product ID,可以进行 OData 调用了。从 iFlow 建模的工具箱里拖拽一个 External Call 出来:



类型选择成 OData V2:



指定前面提过的 OData 服务的 url:



选择该 OData 服务的 Products 节点作为消费的对象:



将 OData Product 节点的 ProductId 字段绑定到前一步骤通过 Content Modifier 解析出来的包含了用户输入的 productIdentifier 字段。



就像小朋友们搭积木一样,我们把 iFlow 工具箱里提供的元素,通过拖拽的方式组合成了一个图形化的流程。点击 Deploy 进行部署:



部署成功之后,抄下这个生成的 endpoint:



在 Postman 里向这个 endpoint 发送一个 GET 请求:



部署在 SAP Cloud Platform 上的 CPI iFlow 接收到了请求后,就会按照我们维护好的逻辑,解析出 Product ID,调用 OData 服务,将该 ID 对应的 Product 明细数据作为结果返回给消费端。



和 SAP CRM 中间件有各种通过事务码比如 SMW01 访问的监控应用一样,SAP CPI 也有类似的监控程序:




希望这个最简单的例子能让还没有接触过 SAP CPI 的朋友对其作用有个最直观的了解,感谢阅读。

总结

本文首先将 SAP Cloud Platform Integration 同 SAP On-Premises 解决方案下的 CRM 中间件进行了对比,接着阐述了 SAP CPI 在 SAP 向云端转型过程中扮演的重要角色,最后通过一个具体的 iFlow 开发例子,力求给没有使用过 CPI 的开发者一个最直观的印象。

发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法_Cloud_Jerry Wang_InfoQ写作社区