前言

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的基础上.
————————————————
版权声明:本文为CSDN博主「syjf1976_ABAP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/syjf1976/article/details/119687421

PO系列之 PO中使用webService相关推荐

  1. PO系列之 PO接口在ECC中的开发

    点击蓝字 关注我们 一 前言 PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO). 一般情况下,异步接口推荐使用PO来确保数据正确抵达目 ...

  2. 搞死SAP系统系列 让PO系统宕机

    点击蓝字 关注我们 一 前言 首先郑重申明:本文并不是想教唆你怎么把SAP服务器搞死. 虽然你确实可以从本文中学到搞死SAP服务器的技巧,但是如果因为你对公司的抱怨而导致你无意中使用了本文中的方式无意 ...

  3. SAP MM ME81N PO Value Analysis报表中Net Value 为负数是怎么回事?

    SAP MM ME81N PO Value Analysis报表中Net Value 为负数是怎么回事? ME81N 报表中,如下PO的net value为负数, 怎么回事? 经查这些PO都是退货采购 ...

  4. po是什么java_java中po层

    你看项目中用到的就行了,跟着写  ######PO(Persistant Object) 持久对象 用于表示数据库中的一条记录映射成的 java 对象.PO 仅仅用于表示数据,没有任何数据操作.通常遵 ...

  5. Drop Shipment PO以及Replenishment PO有何异同?

    当涉及到批量采购和物流管理时,很多零售商都会使用两种类型的采购订单:Drop Shipment PO和Replenishment PO.这两种订单类型在实践中有很大的差异和优势,而对于那些正在考虑使用 ...

  6. oracle 修改po税api_Oracle PO控制状态变更

    PO 变更 tool->Control 内容说明 Cancel PO 取消整个 PO 信息,取消后不能再恢复 (只能在 PO Header 部分应用) Cancel PO Line 取消当前 P ...

  7. [UML]UML系列——用例图中的各种关系(include、extend)

    [UML]UML系列--用例图中的各种关系(include.extend) 原文:[UML]UML系列--用例图中的各种关系(include.extend) 用例图中的各种关系 一.参与者与用例间的关 ...

  8. 爱上MVC3系列~分部视图中的POST

    在PartialView中进行表单提交,有什么用呢,我来总结一下: 1 这个表单不只一个地方用到 2 可能涉及到异步的提交问题 这两种情况都有可能需要把表单建立在"分部视图"中,我 ...

  9. C++中利用WebService下载文件

    C#写的WebService读取文件到byte[]和读取文件内容到string,代码如下: [WebMethod] public byte[] dowloadFile() {     FileStre ...

最新文章

  1. 教你如何更优雅的设计Java异常
  2. 解决×××无法上网的心得
  3. 第四届中国国际大数据大会务实推进应用落地
  4. TypeError: 'module' object is not callable 原因分析(python模块导入注意事项)
  5. 记一次分布式B站爬虫任务系统的完整设计和实施
  6. UIWindowLevel详解
  7. 跨系统服务器data,oracle 新增pdb环境,并通过database link实现跨服务器在线克隆
  8. 使用 ZFS 的 Ubuntu 20.10 安装工具默认启用 TRIM
  9. npm升级所有可更新包
  10. 【电子技术实验设计】课程设计题目
  11. sql 返回日期的年月部分_2019年要上映的部分热门电影及上映日期
  12. 《我是北大旁听生/郑球洋》
  13. http首部字段详解与cookie
  14. graphpad两组t检验_如何用 GraphPad prism进行 t 检验?
  15. AutoSAR系列讲解(深入篇)13.1-闪烁一颗LED灯 1
  16. 磁盘存储链式的B树与B+树
  17. vue设置网页title
  18. js的tree转数组
  19. 梅森旋转算法原理c语言,梅森旋转素数算法(MT199937)c语言代码
  20. Shannon极限与Nyquist极限

热门文章

  1. 【乐理】常用和弦走向(4536251/1645)
  2. 神舟战神g8r9和g9r9区别对比评测选哪个好
  3. 任职母校!C9,迎来新副校长!
  4. 第二阶段javaweb-day01-mqsql基础
  5. Tsukuru Tazaki and his Years of Pilgrimage
  6. 给你的亲人一个科技感满满的生日祝福吧
  7. 童年往事,好看的电影,好听的音乐!
  8. 3 4j不是合法的python表达式_3+4j不是合法的Python表达式。
  9. struct 中 typedef的用法
  10. MSP430系列单片机的DMA使用全面认识