SAP OData編程該如何理解,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
OData(Open Data Protocol)協(xié)議是一個(gè)開放的工業(yè)標(biāo)準(zhǔn),用于定義RESTFul API的設(shè)計(jì)和使用。
目前OData被廣泛用于SAP Business Suite和SAP S/4HANA的眾多Fiori應(yīng)用中,以及SAP Customer Engagement Center和一些正在開發(fā)的新一代云產(chǎn)品中。此外OData也是SAP Cloud for Customer推薦的一種將C4C和客戶第三方應(yīng)用集成的技術(shù)手段。
在SAP Business Suite中進(jìn)行OData開發(fā)
以SAP CRM為例。SAP對(duì)于很多Fiori應(yīng)用都貼心地提供了可以云端試用的版本,通過如下鏈接訪問:
https://www.sapfioritrial.com/
點(diǎn)擊鏈接之后,在Fiori Launchpad里能看到CRM目錄下存在若干Tile,它們是SAP成都研究院CRM Fiori開發(fā)團(tuán)隊(duì)負(fù)責(zé)開發(fā)和維護(hù)的。隨便點(diǎn)擊一個(gè)Tile, 比如My Opportunities:
然后我們能看到該應(yīng)用的明細(xì)頁(yè)面了。在Chrome開發(fā)者工具的Network標(biāo)簽頁(yè),我們能觀察到一個(gè)對(duì)于metadata的請(qǐng)求:
我們把這個(gè)metadata請(qǐng)求的url從Chrome開發(fā)者工具里拷貝出來,完整鏈接如下:
https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/$metadata?sap-language=en&sap-client=001
直接在瀏覽器里訪問這個(gè)鏈接,就能觀察到包含在鏈接里名為CRM_OPPORTUNITY的OData服務(wù)的metadata(元數(shù)據(jù))。我們可以把一個(gè)OData服務(wù)的模型類比成一個(gè)SAP Business Object,該模型同樣由一個(gè)根節(jié)點(diǎn)和若干子節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含若干字段。某些節(jié)點(diǎn)提供了一些可以執(zhí)行的邏輯,在OData協(xié)議里稱這些邏輯為function import(相當(dāng)于Business Object里的action)。不同節(jié)點(diǎn)之間通過定義Navigation建立關(guān)聯(lián)關(guān)系——SAP基于Netweaver的不同產(chǎn)品的建模方式思路都類似,可以觸類旁通。
另一個(gè)重要的請(qǐng)求:
https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities?$skip=0&$top=20&$inlinecount=allpages&sap-client=001
請(qǐng)求的分析:
$skip=0&$top=20:通知后臺(tái)執(zhí)行分頁(yè)搜索,只將滿足查詢條件的前20條記錄從數(shù)據(jù)庫(kù)取出,返回給UI。
$inlinecount=allpages: 返回?cái)?shù)據(jù)庫(kù)滿足搜索條件的記錄數(shù)。因?yàn)镴erry未指定搜索條件,所以返回系統(tǒng)里Opportunity的總個(gè)數(shù)1051。
下面簡(jiǎn)單介紹SAP Business Suite系統(tǒng)里如何開發(fā)OData模型和服務(wù)。
在動(dòng)手開發(fā)前,我們需要先溫習(xí)Fiori的架構(gòu)。
SAP Fiori應(yīng)用:
談到Fiori開發(fā)時(shí),就這張圖而言,可以總結(jié)成兩句話:
1. 在ABAP Back-End服務(wù)器上做OData模型和服務(wù)的開發(fā)
2. 在ABAP Front-End服務(wù)器上做OData服務(wù)的注冊(cè),以便讓Fiori應(yīng)用能夠消費(fèi)
首先我們到ABAP Back-End服務(wù)器上,使用事務(wù)碼SEGW打開CRM_OPPORTUNITY這個(gè)OData服務(wù)??梢钥吹紻ata Model里包含了很多節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)實(shí)際上由一個(gè)ABAP DDIC Structure實(shí)現(xiàn),節(jié)點(diǎn)上的每個(gè)字段對(duì)應(yīng)著Structure上的字段。我們定義好OData模型包含哪些Structure之后,點(diǎn)擊工具欄的Generate Runtime Objects按鈕:
SAP Gateway框架就會(huì)基于我們定義的OData模型,自動(dòng)生成4個(gè)ABAP類和兩個(gè)模型。
MPC和MPC_EXT:當(dāng)消費(fèi)者訪問該服務(wù)的metadata時(shí),這兩個(gè)類負(fù)責(zé)把通過ABAP DDIC Structure描述的metadata信息轉(zhuǎn)換成OData協(xié)議規(guī)范的格式并返回。每次開發(fā)人員修改OData模型,點(diǎn)擊Generate按鈕后,MPC的代碼都會(huì)重新生成。如果開發(fā)人員需要在模型上添加一些額外信息,比如一些版本控制信息或者相關(guān)注解(annotation),那么需要在MPC_EXT里通過ABAP代碼實(shí)現(xiàn)。MPC_EXT是MPC的子類,其代碼不會(huì)被Generate按鈕覆蓋。一個(gè)例子如下:
DPC和DPC_EXT:包含了OData服務(wù)的實(shí)現(xiàn),實(shí)際上也就是基于OData模型的CRUD操作,搜索操作和function import的實(shí)現(xiàn)。以O(shè)pportunity為例,因?yàn)樵撃P偷讓邮褂玫氖荂RM One Order模型,所以DPC_EXT里包含了大量CRM_ORDER_*等函數(shù)調(diào)用,CRM顧問朋友們對(duì)這些函數(shù)應(yīng)該非常熟悉。
在ABAP Back-End服務(wù)器做好OData開發(fā)后,登陸ABAP Front-End服務(wù)器,使用事務(wù)碼/IWFND/MAINT_SERVICE將后臺(tái)服務(wù)器做好的OData服務(wù)進(jìn)行注冊(cè)。
下圖是OData服務(wù)在ABAP Front-End服務(wù)器的注冊(cè)界面。從下圖能看出理論上一臺(tái)ABAP Front-End服務(wù)器可以連接多臺(tái)ABAP Back-End服務(wù)器,
SAP把這種1:N的關(guān)系稱為Multiple Origin Composition,典型的使用場(chǎng)景比如一家跨國(guó)企業(yè),其美洲分公司的應(yīng)用運(yùn)行于Back-End服務(wù)器1,歐洲分公司位于Back-End服務(wù)器2。一個(gè)銷售經(jīng)理使用Fiori應(yīng)用查看該企業(yè)某個(gè)時(shí)間段內(nèi)全球的銷售數(shù)據(jù),則其OData實(shí)現(xiàn)會(huì)將這兩臺(tái)服務(wù)器的后臺(tái)數(shù)據(jù)搜集起來,進(jìn)行匯總并返回給UI。
在S/4HANA中進(jìn)行OData開發(fā)
CDS view是S/4HANA里一個(gè)重要的建模方式。
我們還是來看個(gè)具體的例子。假設(shè)需要在S/4HANA里開發(fā)一個(gè)管理Service Order的Fiori應(yīng)用,功能暫定為支持對(duì)Service Order的只讀操作,即查詢和瀏覽。借助S/4HANA的CDS view建模技術(shù),我們不需要寫一行JavaScript,就可以自動(dòng)生成一個(gè)滿足需求的Fiori應(yīng)用,聽起來是不是很神奇?
我們需要?jiǎng)?chuàng)建一個(gè)CDS view,用它來自動(dòng)生成OData的模型和服務(wù),即下圖綠色的Z_C_Service_Order_View。該View又從其他更底層的CDS view取數(shù)據(jù),將Service Order的抬頭,行項(xiàng)目,狀態(tài)信息等數(shù)據(jù)聚合在一起。
CDS view開發(fā)完畢后,只需要在事務(wù)碼SEGW里將其通過Reference->Data Source加載進(jìn)去:
就可以自動(dòng)生成OData模型,以及前一章節(jié)提到的MPC和DPC各兩套一共4個(gè)ABAP Class,分別對(duì)應(yīng)下圖藍(lán)色和紅色區(qū)域所示,無需應(yīng)用開發(fā)人員再寫ABAP代碼。
然后用SAP WebIDE創(chuàng)建一個(gè)新的Fiori應(yīng)用,注意創(chuàng)建時(shí)不要使用普通的SAPUI5 Application模板,而采用Smart Template Application模板。在創(chuàng)建向?qū)Ю镏付ㄖ盎贑DS view自動(dòng)生成的OData服務(wù)。
點(diǎn)擊向?qū)У腇inish按鈕,最終不用寫一行JavaScript代碼,就得到這樣一個(gè)Fiori應(yīng)用:
上圖提到的CDS view的源代碼,以及Smart Template的工作原理。
更進(jìn)一步,如果想給這個(gè)自動(dòng)生成的Fiori應(yīng)用增添一些功能,例如支持對(duì)Service Order的修改和創(chuàng)建操作。
值得一提的是,在CDS view里有一個(gè)強(qiáng)大的注解:
@OData.publish: true
和SpringBoot的注解能實(shí)現(xiàn)很多神奇的功能一樣,被該注解定義過的CDS view,能夠不借助SEGW的幫助,自動(dòng)生成OData模型和服務(wù),進(jìn)一步簡(jiǎn)化了開發(fā)人員做OData開發(fā)需要的配置,有助于開發(fā)人員快速構(gòu)建出標(biāo)準(zhǔn)化的OData服務(wù)。
OData服務(wù)的消費(fèi)
前面說了這么多都是OData模型和服務(wù)的開發(fā),現(xiàn)在來談?wù)勅绾蜗M(fèi)。
使用ABAP代碼消費(fèi)OData服務(wù)
以消費(fèi)C4C Opportunity的標(biāo)準(zhǔn)OData服務(wù)為例。
首先在postman里搞清楚如何使用HTTP Post加上OData的$batch操作來創(chuàng)建Opportunity:
其實(shí)最主要的工作量就是把$batch操作的一整套流程用ABAP代碼實(shí)現(xiàn)。$batch請(qǐng)求的body通過下圖代碼里insert_line這個(gè)自定義宏操作的一系列字符串去填充。
因?yàn)锳BAP Netweaver既可作為Web Server,又可作為Web Client,所以使用ABAP代碼消費(fèi)OData這種RESTFul API,實(shí)質(zhì)上是利用了IF_HTTP_CLIENT的SEND和RECEIVE方法,進(jìn)行網(wǎng)絡(luò)請(qǐng)求的發(fā)送和接收。
使用Java代碼 + Apache Olingo消費(fèi)OData服務(wù)
相信大多數(shù)開發(fā)人員都不愿意像下面的代碼這樣直接操作OData $batch body,既麻煩又容易出錯(cuò)。
于是在Java里就有了Apache Olingo,一個(gè)開源庫(kù),您可以把它當(dāng)成OData的Java SDK,封裝了OData底層的細(xì)節(jié)。$batch操作需要填充的BatchChangeSet和BatchChangeSetPart在Olingo里都有了對(duì)應(yīng)的類進(jìn)行封裝,看看下圖使用Java代碼調(diào)用OData服務(wù)進(jìn)行ServiceTicket 的創(chuàng)建,和上圖ABAP代碼進(jìn)行比較,是不是從語義上看清晰了很多?
上圖的完整Java代碼
使用UI5消費(fèi)OData服務(wù)
在SAP UI5官網(wǎng)上能找到詳細(xì)的API說明。
Jerry只補(bǔ)充兩點(diǎn)原創(chuàng)內(nèi)容。
1. UI5 OData API的同步和異步參數(shù)。
下圖是5個(gè)請(qǐng)求以同步模式發(fā)出在Chrome開發(fā)者工具Network標(biāo)簽頁(yè)中觀察到的時(shí)序:
下圖是5個(gè)請(qǐng)求以異步模式發(fā)出:
2. 在SAP云平臺(tái)的CloudFoundry環(huán)境下消費(fèi)ABAP On-Premise OData服務(wù)
場(chǎng)景:在微信里消費(fèi)On-Premise系統(tǒng)的OData服務(wù)。
OData性能測(cè)試
1. 使用Netweaver提供的性能測(cè)試工具
2. 使用JMeter測(cè)試OData服務(wù)在高并發(fā)場(chǎng)景下的性能指標(biāo)
在之前工作過的客戶項(xiàng)目里,很多客戶提出了這種性能測(cè)試要求,比如同時(shí)發(fā)起1000個(gè)Service Request的OData創(chuàng)建請(qǐng)求,測(cè)量其平均響應(yīng)時(shí)間。
兩種辦法:
(1) 自己寫Java代碼,用多線程編程技術(shù),每個(gè)線程發(fā)起一個(gè)OData創(chuàng)建請(qǐng)求,自己度量平均響應(yīng)時(shí)間。
(2) 使用性能測(cè)試神器JMeter,這樣一行代碼都不用寫。
Kapsel OData plugin原理講解
SAP移動(dòng)解決方案的Offline(離線)模式使用了Kapsel OData plugin,用于將業(yè)務(wù)數(shù)據(jù)從后臺(tái)系統(tǒng)抽取出來,保存于設(shè)備本地的離線存儲(chǔ)區(qū)域。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
文章標(biāo)題:SAPOData編程該如何理解-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)URL:http://chinadenli.net/article4/dgooie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、Google、全網(wǎng)營(yíng)銷推廣、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容