点击蓝字 关注我们
一
前言
PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO).
作为中间件,PO支持很多与系统交互的方式(RESTful, SOAP ,JDBC, FILE )等等
百度了一下 webService 与SOAP的关系(如图一)
可以看出SOAP只是webService三要素之一, 用来描述传递信息的格式
本文主要介绍webService在PO中的应用及特殊映射方式
图一
二
ABAP与webService
ABAP可以直接引入或发布webService.
详见连接无峰,公众号:ABAP 技巧与实战SAP操作手册之 ABAP调用WEB服务
详见连接无峰,公众号:ABAP 技巧与实战SAP操作手册之 RFC函数发布WEB服务
三
webService的优点
个人认为webService的最大优点就在于包含了WSDL
(WebServicesDescriptionLanguage) . WSDL包含了这个接口的几乎所有信息
数据定义 :接口传递内容的结构定义及类型
调用地址 :服务提供的调用地址
调用点 :服务提供的调用点 SOAP ACTION
并且大部分的软件都支持引入WSDL定义生成调用接口的类,方便应用中直接使用.
比如ABAP引入WSDL产生类.调用类的方法就是调用接口.
四
SOAPUI与WSDL
把WSDL定义引入到SOAPUI(一个应用广泛的接口测试工具)中可以看到接口的这些信息(数据定义,调用地址,调用点)
(当然,也可以用浏览器打开WSDL定义的地址或者文件,只是可读性相对较差)
五
PO引入WSDL
PO不支持直接引入WSDL地址.
但是可以通过IE浏览器(新版的浏览器似乎没有另存为功能)把地址另存为文件.
然后在ESB中创建 External Definition 引入WSDL文件.
创建的External Definition 代替了标准的 data type 和 message type . (图二) .
Service Interface 中可以直接使用引入的External消息(图三)
六
SOAP接收通道
其中 Target URL 就是通过SOAPUI 看到的调用url地址 SOAP action 就是SOAPUI中看到的调用点,接收通道每个接口需要单独定义,因为其中包含了每个接口的特性: 调用地址,调用点
七
SOAP发送通道
发送通道只需要定义一些通用属性 安全层级 同步/异步属性. 在PO中可以共用SOAP发送通道
八
特殊的webService
有些系统为了简化或者统一化接口调用. 会发布一种特殊的webService .
这种webService中只有一个string字段. 如下图所示. 调用方需要在这个字段中填入XML或JSON内容. 接收方需要解析这个字段中的XML或JSON内容. 根据解析的结果再确定后续处理方式.
优点:可以用一个接口实现所有业务信息的传输.
缺点:WSDL定义丢失了业务含义.不便于调用方理解接口需要传输的内容.
不推荐使用这种webService定义方式, 因为他丢失了三要素之一: 数据定义
九
PO与特殊webService
PO可以通过MAPPING 把一个XML结构映射到一个字段中. 过程如下.
该方式的原文链接如下
https://blogs.sap.com/2010/06/17/convert-the-input-xml-to-string-in-pi-71-using-standard-graphical-mapping/
01
源结构
02
目标结构
03
映射
任何一个文本函数(例如trim) . 右键点击源字段,勾选 return as xml
04
源消息
05
目标消息
实际接口处理时,PO为了避免嵌套XML的解析错误, 会使用特殊字符
这种使用转义字符取代 < > 只是为了避免XML的解析错误. 并体现XML的嵌套.不影响系统对XML的解析.
十
局限性
PO对特殊webService的MAPPING 存在局限性.
PO MAPPING可以把一个XML结构MAPPING 到一个字段中. 但是因为一个PO接口只有一次MAPPING. 所以无法同时实现字段映射及XML映射到字段. 如果要实现这种复杂的映射,估计需要使用JAVA开发映射逻辑来实现.
一个变通的方法是把一个接口拆分成两个接口, 让PO本身作为一个中转系统.
比如接口
系统A -> 系统B
可以调整为
系统A->PO虚拟
PO虚拟->系统B
这样就可以通过两次映射:第一次执行字段隐射, 第二次再把XML结构映射到一个字段. 来实现这个功能. 只是PO的配置量增大了一倍.
十一
总结
webService是应用广泛的接口方式,几乎所有软件对webService有良好的支持.
一般项目中,如果外围系统不是现成的接口, 都建议使用webService方式和外部系统交互.
通过webService的WSDL定义可以解决双方系统对传输内容结构及字段定义的分歧.快速完成接口的调用(无论是否使用PO). 当然这要建立在不使用特殊webService的基础上.
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)