PO系列之 PO中使用webService

點(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ā)文.)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • WebService學(xué)習(xí)筆記 友情提示,本文檔的圖床使用極簡(jiǎn)圖床進(jìn)行圖片存儲(chǔ),默認(rèn)存儲(chǔ)到七牛云空間 本學(xué)習(xí)貼是根據(jù)...
    Mr_魏閱讀 1,174評(píng)論 0 5
  • WebService學(xué)習(xí)系列之基礎(chǔ)理論知識(shí) 本系列文章將介紹WebService是什么、 WebService的應(yīng)...
    理想是一盞燈閱讀 1,882評(píng)論 0 1
  • alert(a); function name(parameters) { alert(parameters); ...
    name阿喆azhe閱讀 1,318評(píng)論 0 3
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實(shí)現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,092評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 7,540評(píng)論 0 4

友情鏈接更多精彩內(nèi)容