日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP OData编程指南

發(fā)布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP OData编程指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OData(Open Data Protocol)協議是一個開放的工業(yè)標準,用于定義RESTFul API的設計和使用。我的文章標題前加上SAP的前綴,只是為了表明這篇文章介紹的是Jerry在SAP項目開發(fā)中使用到OData的一些心得和經驗。

目前OData被廣泛用于SAP Business Suite和SAP S/4HANA的眾多Fiori應用中,以及SAP Customer Engagement Center和一些正在開發(fā)的新一代云產品中。此外OData也是SAP Cloud for Customer推薦的一種將C4C和客戶第三方應用集成的技術手段。關于這種集成方式,在我的另一篇文章里有所介紹:

SAP S4CRM vs C4C, 諸葛亮和周瑜?

本文會從OData服務的實現和消費這兩個方面來介紹,目錄如下:

  • 在SAP Business Suite中進行OData開發(fā)

  • 在SAP S/4HANA中進行OData開發(fā)

  • 使用ABAP代碼消費OData服務

  • 使用Java代碼 + Apache Olingo消費OData服務

  • 使用UI5消費OData服務

  • OData性能測試

  • C4C中的OData應用

  • XS OData Services

  • 更多閱讀


在SAP Business Suite中進行OData開發(fā)

以SAP CRM為例。SAP對于很多Fiori應用都貼心地提供了可以云端試用的版本,通過如下鏈接訪問:

https://www.sapfioritrial.com/

點擊鏈接之后,在Fiori Launchpad里能看到CRM目錄下存在若干Tile,它們是SAP成都研究院CRM Fiori開發(fā)團隊負責開發(fā)和維護的,Jerry也曾經是這個團隊的一員。隨便點擊一個Tile, 比如My Opportunities:

然后我們能看到該應用的明細頁面了。在Chrome開發(fā)者工具的Network標簽頁,我們能觀察到一個對于metadata的請求:

關于Chrome開發(fā)者工具的使用技巧,Jerry曾經做過整理,單獨寫在另一篇文章里:

Jerry和您聊聊Chrome開發(fā)者工具

我們把這個metadata請求的url從Chrome開發(fā)者工具里拷貝出來,完整鏈接如下:

https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/$metadata?sap-language=en&sap-client=001

直接在瀏覽器里訪問這個鏈接,就能觀察到包含在鏈接里名為CRM_OPPORTUNITY的OData服務的metadata(元數據)。我們可以把一個OData服務的模型類比成一個SAP Business Object,該模型同樣由一個根節(jié)點和若干子節(jié)點組成,每個節(jié)點包含若干字段。某些節(jié)點提供了一些可以執(zhí)行的邏輯,在OData協議里稱這些邏輯為function import(相當于Business Object里的action)。不同節(jié)點之間通過定義Navigation建立關聯關系——SAP基于Netweaver的不同產品的建模方式思路都類似,可以觸類旁通。

另一個重要的請求:

https://www.sapfioritrial.com/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities?KaTeX parse error: Expected 'EOF', got '&' at position 7: skip=0&?top=20&$inlinecount=allpages&sap-client=001

在Jerry的另一篇文章?SAP UI 搜索分頁技術?里已經對這個請求做過分析:

  • **KaTeX parse error: Expected 'EOF', got '&' at position 7: skip=0&?top=20:**通知后臺執(zhí)行分頁搜索,只將滿足查詢條件的前20條記錄從數據庫取出,返回給UI。

  • $inlinecount=allpages:?返回數據庫滿足搜索條件的記錄數。因為Jerry未指定搜索條件,所以返回系統(tǒng)里Opportunity的總個數1051。

下面簡單介紹SAP Business Suite系統(tǒng)里如何開發(fā)OData模型和服務。

在動手開發(fā)前,我們需要先溫習Fiori的架構。

在我的文章?SAP Fiori應用的三種部署方式里提到過這張圖:

談到Fiori開發(fā)時,就這張圖而言,可以總結成兩句話:

1. 在ABAP Back-End服務器上做OData模型和服務的開發(fā)

2. 在ABAP Front-End服務器上做OData服務的注冊,以便讓Fiori應用能夠消費

首先我們到ABAP Back-End服務器上,使用事務碼SEGW打開CRM_OPPORTUNITY這個OData服務。可以看到Data Model里包含了很多節(jié)點,每個節(jié)點實際上由一個ABAP DDIC Structure實現,節(jié)點上的每個字段對應著Structure上的字段。我們定義好OData模型包含哪些Structure之后,點擊工具欄的Generate Runtime Objects按鈕:

SAP Gateway框架就會基于我們定義的OData模型,自動生成4個ABAP類和兩個模型。

**MPC和MPC_EXT:**當消費者訪問該服務的metadata時,這兩個類負責把通過ABAP DDIC Structure描述的metadata信息轉換成OData協議規(guī)范的格式并返回。每次開發(fā)人員修改OData模型,點擊Generate按鈕后,MPC的代碼都會重新生成。如果開發(fā)人員需要在模型上添加一些額外信息,比如一些版本控制信息或者相關注解(annotation),那么需要在MPC_EXT里通過ABAP代碼實現。MPC_EXT是MPC的子類,其代碼不會被Generate按鈕覆蓋。一個例子如下:

**DPC和DPC_EXT:**包含了OData服務的實現,實際上也就是基于OData模型的CRUD操作,搜索操作和function import的實現。以Opportunity為例,因為該模型底層使用的是CRM One Order模型,所以DPC_EXT里包含了大量CRM_ORDER_*等函數調用,CRM顧問朋友們對這些函數應該非常熟悉。

在ABAP Back-End服務器做好OData開發(fā)后,登陸ABAP Front-End服務器,使用事務碼**/IWFND/MAINT_SERVICE**將后臺服務器做好的OData服務進行注冊。

下圖是OData服務在ABAP Front-End服務器的注冊界面。從下圖能看出理論上一臺ABAP Front-End服務器可以連接多臺ABAP Back-End服務器,

SAP把這種1:N的關系稱為Multiple Origin Composition,典型的使用場景比如一家跨國企業(yè),其美洲分公司的應用運行于Back-End服務器1,歐洲分公司位于Back-End服務器2。一個銷售經理使用Fiori應用查看該企業(yè)某個時間段內全球的銷售數據,則其OData實現會將這兩臺服務器的后臺數據搜集起來,進行匯總并返回給UI。具體細節(jié)請參考SAP幫助文檔:

https://help.sap.com/doc/saphelp_hba/1.0/en-US/dd/f1ceb93a7d48fab4aa16efebc90e02/frameset.htm

關于SEGW更多開發(fā)細節(jié),可以參考我的SAP同事環(huán)宇的公眾號文章:

十分鐘手把手系列之SEGW Project入門

環(huán)宇有一個名為Fiori的公眾號,介紹的全是Fiori知識。感興趣的朋友可以關注一下。

在S/4HANA中進行OData開發(fā)

在我的公眾號文章?Hello World, S/4HANA for Customer Management 1.0?里提到,CDS view是S/4HANA里一個重要的建模方式。

我們還是來看個具體的例子。假設需要在S/4HANA里開發(fā)一個管理Service Order的Fiori應用,功能暫定為支持對Service Order的只讀操作,即查詢和瀏覽。借助S/4HANA的CDS view建模技術,我們不需要寫一行JavaScript,就可以自動生成一個滿足需求的Fiori應用,聽起來是不是很神奇?

我們需要創(chuàng)建一個CDS view,用它來自動生成OData的模型和服務,即下圖綠色的Z_C_Service_Order_View。該View又從其他更底層的CDS view取數據,將Service Order的抬頭,行項目,狀態(tài)信息等數據聚合在一起。

CDS view開發(fā)完畢后,只需要在事務碼SEGW里將其通過Reference->Data Source加載進去:

就可以自動生成OData模型,以及前一章節(jié)提到的MPC和DPC各兩套一共4個ABAP Class,分別對應下圖藍色和紅色區(qū)域所示,無需應用開發(fā)人員再寫ABAP代碼。

然后用SAP WebIDE創(chuàng)建一個新的Fiori應用,注意創(chuàng)建時不要使用普通的SAPUI5 Application模板,而采用Smart Template Application模板。在創(chuàng)建向導里指定之前基于CDS view自動生成的OData服務。

點擊向導的Finish按鈕,最終不用寫一行JavaScript代碼,就得到這樣一個Fiori應用:

上圖提到的CDS view的源代碼,以及Smart Template的工作原理,都在我的博客里:

Create a CRM Service Order Fiori application within a couple of minutes

更進一步,如果想給這個自動生成的Fiori應用增添一些功能,例如支持對Service Order的修改創(chuàng)建操作,請按照我的另外兩篇博客去實現:

  • Enable CRM Service Order application with edit functionality

  • Enable CRM Service Order application with create functionality

值得一提的是,在CDS view里有一個強大的注解:

@OData.publish: true

和SpringBoot的注解能實現很多神奇的功能一樣,被該注解定義過的CDS view,能夠不借助SEGW的幫助,自動生成OData模型和服務,進一步簡化了開發(fā)人員做OData開發(fā)需要的配置,有助于開發(fā)人員快速構建出標準化的OData服務。

@OData.publish這個注解的實現原理,請參考我的CDS view自學教程系列的第4部分:

Part 4 how does annotation @OData.publish work

OData服務的消費

前面說了這么多都是OData模型和服務的開發(fā),現在來談談如何消費。

使用ABAP代碼消費OData服務

以消費C4C Opportunity的標準OData服務為例。

首先在postman里搞清楚如何使用HTTP Post加上OData的$batch操作來創(chuàng)建Opportunity:

其實最主要的工作量就是把batch操作的一整套流程用ABAP代碼實現。batch操作的一整套流程用ABAP代碼實現。batchABAPbatch請求的body通過下圖代碼里insert_line這個自定義宏操作的一系列字符串去填充。

因為ABAP Netweaver既可作為Web Server,又可作為Web Client,所以使用ABAP代碼消費OData這種RESTFul API,實質上是利用了IF_HTTP_CLIENT的SEND和RECEIVE方法,進行網絡請求的發(fā)送和接收。

我在SAP Community上寫過一個用ABAP代碼消費OData服務的教程:

Consume standard C4C OData service via ABAP code

使用Java代碼 + Apache Olingo消費OData服務

相信大多數開發(fā)人員都不愿意像下面的代碼這樣直接操作OData $batch body,既麻煩又容易出錯。

于是在Java里就有了Apache Olingo,一個開源庫,您可以把它當成OData的Java SDK,封裝了OData底層的細節(jié)。$batch操作需要填充的BatchChangeSet和BatchChangeSetPart在Olingo里都有了對應的類進行封裝,看看下圖使用Java代碼調用OData服務進行ServiceTicket 的創(chuàng)建,和上圖ABAP代碼進行比較,是不是從語義上看清晰了很多?

上圖的完整Java代碼,參考我的github

使用UI5消費OData服務

在SAP UI5官網上能找到詳細的API說明。

Jerry只補充兩點原創(chuàng)內容。

1. UI5 OData API的同步和異步參數。

2015年6月時,我和德國一位負責Quality的同事就這個話題在半小時的電話會議里產生了爭執(zhí)。因為時間有限,我沒能在電話里說服他,所以就有了這篇博客。德國同事看了之后,同意了我的意見。具體細節(jié)參考博客:

A Test on Fiori OData request Synchronous mode VS Asynchronous mode

下圖是5個請求以同步模式發(fā)出在Chrome開發(fā)者工具Network標簽頁中觀察到的時序:

下圖是5個請求以異步模式發(fā)出:

2. 在SAP云平臺的CloudFoundry環(huán)境下消費ABAP On-Premise OData服務

場景:在微信里消費On-Premise系統(tǒng)的OData服務。

詳細步驟已經在我之前的微信公眾號文章介紹過了。

OData性能測試

1. 使用Netweaver提供的性能測試工具

詳細介紹參考我的博客:

How to find OData performance trace and payload trace functionality

2. 使用JMeter測試OData服務在高并發(fā)場景下的性能指標

在Jerry工作過的客戶項目里,很多客戶提出了這種性能測試要求,比如同時發(fā)起1000個Service Request的OData創(chuàng)建請求,測量其平均響應時間。

Jerry在這兩篇博客里介紹了兩種辦法:

(1) 自己寫Java代碼,用多線程編程技術,每個線程發(fā)起一個OData創(chuàng)建請求,自己度量平均響應時間。

(2) 使用性能測試神器JMeter,這樣一行代碼都不用寫。

兩種辦法的具體介紹參考我的博客:

  • JMeter beginner – how to use JMeter to measure performance of OData service accessed parallelly

  • OData service parallel performance measurement – how to deal with XSRF token in Java Program and JMeter

Kapsel OData plugin原理講解

SAP移動解決方案的Offline(離線)模式使用了Kapsel OData plugin,用于將業(yè)務數據從后臺系統(tǒng)抽取出來,保存于設備本地的離線存儲區(qū)域。

關于其工作原理,參考Jerry做過的三個維度的分析:

  • How is OData request routed to Offline data store by Odata offline plugin

  • How is JavaScript code in OData offline plugin delegated to native Java code in Android

  • How is OData offline store opened in Android platform

C4C中的OData應用

Jerry做過的C4C客戶項目中對OData使用的一些分享:

  • Leverage C4C Odata notification to monitor C4C Opportunity change in CRM system

    使用場景:在C4C創(chuàng)建業(yè)務數據后,利用這篇博客介紹的用法,能自動發(fā)送一個通知給其他系統(tǒng)/應用。可以作為一種輕量級的系統(tǒng)集成方案。

  • Expose TextCollection data belonging to a Custom BO via OData service

    該解決方案我提供給了一個Chinese C4C客戶。

  • Expose Custom BO logic implemented by ABSL via Custom OData service

    通過OData將用ABSL實現的自定義邏輯暴露給第三方應用。

  • C4C和微信集成系列教程

    這個系列教程里,C4C和微信的交互,60%使用了C4C OData,40%使用了C4C Web Service。

XS OData Services

HANA Studio里開發(fā)的HANA view也能通過HANA Extended Application Service暴露成OData服務。

據我的成都同事介紹,SAP Customer Engagement Center采用的就是這種方式。

更多介紹參考這篇SAP博客:

HANA Development: XS OData Services

更多閱讀

所有更多閱讀的鏈接都已經分布在文章的每一章節(jié),這里為閱讀方便起見,將部分鏈接再次統(tǒng)一羅列如下:

  • SAP UI 搜索分頁技術

  • 在SAP云平臺的CloudFoundry環(huán)境下消費ABAP On-Premise OData服務

  • Jerry和您聊聊Chrome開發(fā)者工具

  • C4C和微信集成系列教程

  • Jerry的UI5框架代碼自學教程

  • SAP Fiori應用的三種部署方式

  • Jerry的Fiori原創(chuàng)文章合集

  • Hello World, S/4HANA for Customer Management 1.0

  • SAP UI和Salesforce UI開發(fā)漫談

  • SAP S4CRM vs C4C, 諸葛亮和周瑜?

  • 那些年我用過的SAP IDE

要獲取更多Jerry的原創(chuàng)技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

總結

以上是生活随笔為你收集整理的SAP OData编程指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。