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

尽管距离Jerry开始接触CPI还不到48小时,我仍然想把我刚使用这个工具的第一手体会分享给曾经用过SAP CRM中间件,但尚未有机会接触到CPI的朋友们。

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

SAP ERP和CRM通过qRFC进行业务数据同步,而中间件能够提供队列机制,错误处理,重试,传输监控等功能。关于Jerry在SAP CRM中间件上的工作经验分享,请参考我的文章 Jerry的CRM Middleware(中间件)文章合集。

而SAP CPI顾名思义,则是云时代下SAP推荐的SAP产品同第三方云产品进行集成的云端中间件解决方案。Jerry的S4CRM同事童丹之前文章 S/4HANA Service Management和SAP Field Service Management的集成 里提到的场景就是SAP CPI的一个典型集成应用。

作为学习笔记,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的朋友对其作用有个最直观的了解,感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

给用过SAP CRM中间件的老哥老姐们讲讲SAP CPI的更多相关文章

  1. SAP CRM中间件下载equipment时遇到的一个错误

    在CRM开发系统上进行equipment下载,发现不工作.调试发现错误信息在下图定96行的WHEN default分支抛出的: MESSAGE ID 'AZ' ... 通过阅读源代码发现,ERP端支持 ...

  2. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单

    tcode WE19, choose an existing IDOC in the system: Just change the existing IDOC Service Order ID to ...

  3. SAP CRM系统订单模型的设计与实现

    SAP成都研究院的一个部门领导让我给他的团队做一个SAP CRM One Order框架的培训,这是我准备的培训内容. 在Jerry之前的文章 基于SAP Kyma的订单编排增强介绍,我表达了自己对S ...

  4. SAP CRM 项目笔记(一) SOW(工作说明书)讨论

    前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...

  5. SAP CRM 开发学习资料和教程整理【不定时更新】

    本文链接:http://www.cnblogs.com/hhelibeb/p/6276929.html 首先是SAP网站上面的相关内容 SAP Customer Relationship Manage ...

  6. SAP CRM 性能小技巧

    导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...

  7. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  8. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  9. SAP CRM 客户控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入客户控制器(Custom Controller)(译者注:SAP CRM客户端中,不同地方的Custom Controller会翻译为“客 ...

随机推荐

  1. x3d

    目录 3d format introduction x3d resources open source C++ implementations file formats 1. Feature matr ...

  2. C# .net 高清压缩图片 合并图片方法

    /// <summary> /// 合并宽度一样的图片 /// </summary> /// <param name="imgUrls">多张图 ...

  3. [转]manjaro安装vmware虚拟机

    全球领先的信息与通信解决方案供应商华为,近日面向全球ICT从业者,以及有兴趣掌握ICT相关知识的人士,免费推出其图形化网络仿真工具平台—eNSP.该平台通过对真实的网络设备的仿真模拟,帮助广大ICT从 ...

  4. Nodejs 包与 npm第三方模块安装和 package.json 以及 cnpm

    包与 NPM 1. 包 Nodejs 中除了它自己提供的核心模块外,可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依 赖关系的模块进行统一管理. ...

  5. postman 用环境变量Environment实现多服务器版本

    现存问题 在测试API期间,往往存在多种环境,对应IP地址(或域名也不同) 比如: Prod: http://116.62.25.57/ucows 用于开发完成发布到生产环境 Dev: http:// ...

  6. Spring Boot入门学习,解决复杂的spring配置文件及jar包

    转载:https://www.cnblogs.com/wmyskxz/p/9010832.html 总结 为何出了这样的框架? Spring Boot 是所有基于 Spring 开发的项目的起点.Sp ...

  7. 在日志中记录Java异常信息的正确姿势

    遇到的问题 今天遇到一个线上的BUG,在执行表单提交时失败,但是从程序日志中看不到任何异常信息. 在Review源代码时发现,当catch到异常时只是输出了e.getMessage(),如下所示: l ...

  8. Leetcode problems classified by company 题目按公司分类(Last updated: October 2, 2017)

    All LeetCode Questions List 题目汇总 Sorted by frequency of problems that appear in real interviews. Las ...

  9. win7安装 truffle

    1. 最近有个项目需要用到区块链,第一次玩不太熟悉.现在电脑上安装个  truffle,作为一个区块链节点 2. 安装 truffle ,之前需要安装其他几个软件 truffle的安装需要首先装有:n ...

  10. Vmware解决虚拟机不能联网的问题

    1. 设置为NAT模式 2. 启动win7的服务,命令窗口输入services.msc 回车 3. 修改Vmware的设置