點(diǎn)擊藍(lán)字 關(guān)注我們
一
前言
PO(/PI)是SAP公司的一個(gè)中間件產(chǎn)品,用來(lái)輔助連接SAP系統(tǒng)與外圍系統(tǒng). (當(dāng)然外圍系統(tǒng)之間也可以使用PO).
作為中間件,PO支持很多與系統(tǒng)交互的方式(RESTful, SOAP ,JDBC, FILE )等等
百度了一下 webService 與SOAP的關(guān)系(如圖一)
可以看出SOAP只是webService三要素之一, 用來(lái)描述傳遞信息的格式
本文主要介紹webService在PO中的應(yīng)用及特殊映射方式

圖一
二
ABAP與webService
ABAP可以直接引入或發(fā)布webService.
詳見(jiàn)連接無(wú)峰,公眾號(hào):ABAP 技巧與實(shí)戰(zhàn)SAP操作手冊(cè)之 ABAP調(diào)用WEB服務(wù)
詳見(jiàn)連接無(wú)峰,公眾號(hào):ABAP 技巧與實(shí)戰(zhàn)SAP操作手冊(cè)之 RFC函數(shù)發(fā)布WEB服務(wù)
三
webService的優(yōu)點(diǎn)
個(gè)人認(rèn)為webService的最大優(yōu)點(diǎn)就在于包含了WSDL
(WebServicesDescriptionLanguage) . WSDL包含了這個(gè)接口的幾乎所有信息
數(shù)據(jù)定義 :接口傳遞內(nèi)容的結(jié)構(gòu)定義及類型
調(diào)用地址 :服務(wù)提供的調(diào)用地址
調(diào)用點(diǎn)? :服務(wù)提供的調(diào)用點(diǎn) SOAP ACTION
并且大部分的軟件都支持引入WSDL定義生成調(diào)用接口的類,方便應(yīng)用中直接使用.
比如ABAP引入WSDL產(chǎn)生類.調(diào)用類的方法就是調(diào)用接口.
四
SOAPUI與WSDL
把WSDL定義引入到SOAPUI(一個(gè)應(yīng)用廣泛的接口測(cè)試工具)中可以看到接口的這些信息(數(shù)據(jù)定義,調(diào)用地址,調(diào)用點(diǎn))
(當(dāng)然,也可以用瀏覽器打開(kāi)WSDL定義的地址或者文件,只是可讀性相對(duì)較差)



五
PO引入WSDL
PO不支持直接引入WSDL地址.
但是可以通過(guò)IE瀏覽器(新版的瀏覽器似乎沒(méi)有另存為功能)把地址另存為文件.
然后在ESB中創(chuàng)建 External Definition 引入WSDL文件.
創(chuàng)建的External Definition 代替了標(biāo)準(zhǔn)的 data type 和 message type . (圖二) .
Service Interface 中可以直接使用引入的External消息(圖三)


六
SOAP接收通道
其中 Target URL 就是通過(guò)SOAPUI 看到的調(diào)用url地址 SOAP action 就是SOAPUI中看到的調(diào)用點(diǎn),接收通道每個(gè)接口需要單獨(dú)定義,因?yàn)槠渲邪嗣總€(gè)接口的特性: 調(diào)用地址,調(diào)用點(diǎn)

七
SOAP發(fā)送通道
發(fā)送通道只需要定義一些通用屬性 安全層級(jí) 同步/異步屬性. 在PO中可以共用SOAP發(fā)送通道

八
特殊的webService
有些系統(tǒng)為了簡(jiǎn)化或者統(tǒng)一化接口調(diào)用. 會(huì)發(fā)布一種特殊的webService .
這種webService中只有一個(gè)string字段. 如下圖所示. 調(diào)用方需要在這個(gè)字段中填入XML或JSON內(nèi)容. 接收方需要解析這個(gè)字段中的XML或JSON內(nèi)容. 根據(jù)解析的結(jié)果再確定后續(xù)處理方式.
優(yōu)點(diǎn):可以用一個(gè)接口實(shí)現(xiàn)所有業(yè)務(wù)信息的傳輸.
缺點(diǎn):WSDL定義丟失了業(yè)務(wù)含義.不便于調(diào)用方理解接口需要傳輸?shù)膬?nèi)容.
不推薦使用這種webService定義方式, 因?yàn)樗麃G失了三要素之一: 數(shù)據(jù)定義

九
PO與特殊webService
PO可以通過(guò)MAPPING 把一個(gè)XML結(jié)構(gòu)映射到一個(gè)字段中. 過(guò)程如下.
該方式的原文鏈接如下
https://blogs.sap.com/2010/06/17/convert-the-input-xml-to-string-in-pi-71-using-standard-graphical-mapping/
01
源結(jié)構(gòu)

02
目標(biāo)結(jié)構(gòu)

03
映射
任何一個(gè)文本函數(shù)(例如trim) . 右鍵點(diǎn)擊源字段,勾選 return as xml

04
源消息

05
目標(biāo)消息
實(shí)際接口處理時(shí),PO為了避免嵌套XML的解析錯(cuò)誤, 會(huì)使用特殊字符

這種使用轉(zhuǎn)義字符取代 < > 只是為了避免XML的解析錯(cuò)誤. 并體現(xiàn)XML的嵌套.不影響系統(tǒng)對(duì)XML的解析.

十
局限性
PO對(duì)特殊webService的MAPPING 存在局限性.
PO MAPPING可以把一個(gè)XML結(jié)構(gòu)MAPPING 到一個(gè)字段中. 但是因?yàn)橐粋€(gè)PO接口只有一次MAPPING. 所以無(wú)法同時(shí)實(shí)現(xiàn)字段映射及XML映射到字段. 如果要實(shí)現(xiàn)這種復(fù)雜的映射,估計(jì)需要使用JAVA開(kāi)發(fā)映射邏輯來(lái)實(shí)現(xiàn).
一個(gè)變通的方法是把一個(gè)接口拆分成兩個(gè)接口, 讓PO本身作為一個(gè)中轉(zhuǎn)系統(tǒng).
比如接口
系統(tǒng)A -> 系統(tǒng)B
可以調(diào)整為
系統(tǒng)A->PO虛擬
PO虛擬->系統(tǒng)B
這樣就可以通過(guò)兩次映射:第一次執(zhí)行字段隱射, 第二次再把XML結(jié)構(gòu)映射到一個(gè)字段. 來(lái)實(shí)現(xiàn)這個(gè)功能. 只是PO的配置量增大了一倍.
十一
總結(jié)
webService是應(yīng)用廣泛的接口方式,幾乎所有軟件對(duì)webService有良好的支持.
一般項(xiàng)目中,如果外圍系統(tǒng)不是現(xiàn)成的接口, 都建議使用webService方式和外部系統(tǒng)交互.
通過(guò)webService的WSDL定義可以解決雙方系統(tǒng)對(duì)傳輸內(nèi)容結(jié)構(gòu)及字段定義的分歧.快速完成接口的調(diào)用(無(wú)論是否使用PO). 當(dāng)然這要建立在不使用特殊webService的基礎(chǔ)上.
THE
END
約定
如果你對(duì)這篇文章感興趣,請(qǐng)幫忙點(diǎn)贊,在看,分享.? ? ?
? ? (如果你真的喜歡這篇文章,請(qǐng)記得回來(lái)打個(gè)賞,作為支持我繼續(xù)下去的動(dòng)力,這是一個(gè)正反饋過(guò)程. 越多的人打賞,作者越有動(dòng)力分享,讀者就能享受更多的福利.畢竟打賞的金額富不了我,窮不了你,卻能支持這個(gè)公眾號(hào)長(zhǎng)久發(fā)文.)