SAP Fiori程式設計模型規範裡註解 - @OData.publish工作原理解析
今天是2020年2月1日鼠年 大年初八,這是Jerry鼠年的第 8篇文章,也是汪子熙公眾號總共第 207篇原創文章。
Jerry的前一篇文章 揭開SAP Fiori程式設計模型規範裡註解的神秘面紗 - @ObjectModel.readOnly工作原理解析,給大家分享了@ObjectModel.readOnly這個註解對應的Fiori UI和ABAP後臺的工作原理。
今天我們繼續研究另一個註解@OData.publish.
在SAP官網的ABAP Programming Model for SAP Fiori的幫助文件裡,在OData Annotations目錄下有對這個註解的介紹:
一旦加上了這個註解的CDS view啟用時,會自動生成一個OData服務。
這個OData服務是如何自動生成的?這就是本文所要分享的內容。
假設我們對加了這個註解的CDS view啟用後自動生成的OData服務的明細一無所知,從何處開始入手進行研究呢?
我建立了一個名為zjerrytest20160311的view,然後加上這個註解,啟用。根據我的經驗,按照SAP慣例,自動生成的OData服務的名稱應該也會包含0311這個字串。
啟用之後,我試著用0311作為關鍵字在OData服務的註冊事務碼/IWFND/MAINT_SERVICE裡搜尋,果然搜到了對應生成的OData服務:
在Jerry之前的文章 [ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼]( ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼) 曾經提到ABAP Netweaver的登錄檔TADIR,按照0311進行查詢,發現CDS view啟用之後,除了OData服務本身,還自動生成了下列這些物件:
- IWMO: SAP Gateway Business Suite Enablement對應的模型
- IWSV: SAP Gateway Business Suite Enablement對應的服務
- CLAS: OData服務的實現類ZCL_ZJERRYTEST20160311
做個實驗,當我把OData.publish的值設定為false,再次啟用,發現型別為IWMO和IWSV的物件從登錄檔TADIR中消失了,這再次印證了二者是註解OData.publish設定為true之後啟用CDS view生成的。
那麼如何研究CDS view啟用時,這兩個物件的自動生成邏輯呢?
使用Jerry文章( SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位) 裡介紹的第六種武器,離別鉤之ST05.
開啟ST05跟蹤模式,啟用CDS view,在資料庫跟蹤結果裡果然發現了將自動生成的物件名稱插入到登錄檔TADIR的OPEN SQL語句。
《神鵰俠侶》天竺僧去絕情谷給楊過找情花毒解藥時,說過一句話:毒蛇出沒之處,七步之內必有解藥。
同樣,在ABAP裡,在插入資料庫表的OPEN SQL語句之前,必定有待插入資料的生成邏輯。
點選ST05裡藍色的眼鏡圖示,自動跳轉到OPEN SQL語句裡。設定斷點,啟用CDS view,斷點觸發:
從當前的呼叫棧往外追溯,發現在第21個呼叫棧幀,正是自動生成OData服務的地方:
CL_WB_DDLS_SECOBJ_HNDLR_SINGLE->IF_DDIC_WB_DDLS_SECOBJ_HANDLER~ON_ACTIVATION
這個方法首先根據delta_state判斷出需要刪除,新增或者更新的物件清單,分別儲存在下圖12到14行三個輸出引數裡。
舉個例子,當我在一個已經啟用過後的CDS view原始碼裡新增@OData.publish:true的註解,然後啟用,此時該註解對於的EDIT_STATE為N(New), 而其他的註解因為沒有任何變化,被標記為U(Unchanged).
此處會根據EDIT_STATE的值,進入對應的分支。
EDIT_STATE值為N的分支,則執行OData服務的建立,透過CL_SADL_GTK_ODATA_SERVICE_GEN完成,字尾GEN代表Generation.
從偵錯程式裡能看出,名稱為ZJERRYTEST20160311的OData服務透過create_via_exposure方法被建立。
完整的呼叫棧:
本文其實也是另一個具體的例子,在不瞭解一段邏輯(無論框架層面或者應用層面)的情況下,如何使用ST05這個工具來找到設定斷點的程式碼位置,從而找到問題分析的突破口。
感謝閱讀。
更多閱讀
- Jerry的透過CDS view + Smart Template 開發Fiori應用的blog合集
- SAP Fiori應用的三種部署方式
- Jerry的Fiori原創文章合集
- SAP成都C4C小李探花:淺談Fiori Design Guidelines
- SAP Fiori + Vue = ?
- Fiori Fundamentals和SAP UI5 Web Components
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
- SAP Fiori應用索引大全
- 介紹一種Fiori標準應用的增強方式
- 揭開SAP Fiori程式設計模型規範裡註解的神秘面紗 - @ObjectModel.readOnly工作原理解析
- 為什麼SAP GUI裡的傳統事務碼能透過Fiori Launchpad啟動並執行在瀏覽器裡
- 一步步把SAP GUI的事務碼配置到SAP Fiori Launchpad裡
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2674605/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP Fiori @OData.publish 註解的工作原理解析
- SAP Fiori 註解 @ObjectModel.readOnly工作原理解析Object
- 玩了一下 SAP Fiori ABAP程式設計模型程式設計模型
- SAP Fiori Elements 框架裡 Smart Table 控制元件的工作原理介紹框架控制元件
- SAP官方釋出的ABAP程式設計規範程式設計
- SAP Fiori Elements裡Drop down list的實現原理
- Spring框架裡註解@Autowired的工作原理Spring框架
- Java JUnit框架裡@Category註解的工作原理Java框架Go
- 解讀阿里java程式設計規範阿里Java程式設計
- SAP CRM Survey調查問卷的模型設計原理解析模型
- JS程式設計規範JS程式設計
- React程式設計規範React程式設計
- java程式設計規範Java程式設計
- 程式設計小記-程式設計規範程式設計
- SAP GUI裡Screen Painter的工作原理GUIAI
- SAP Fiori Elements 應用裡和 Fiori 3 相關的外觀設定
- python程式設計規範Python程式設計
- C#程式設計規範C#程式設計
- SAP Fiori image的顯示原理
- 如何分辨 SAP Fiori Launchpad 裡的真假 Fiori 應用
- 深入掌握 SAP Fiori Elements 工作原理的前提條件:理解 Smart Field
- HTML 程式碼註釋規範HTML
- Java程式碼註釋規範Java
- SAP Fiori 應用裡圖示(Icon)的渲染原理和使用技巧
- Go 語言程式設計規範Go程式設計
- 微信小程式元件設計規範微信小程式元件
- JavaScript模組化程式設計規範JavaScript程式設計
- python 的程式設計規範Python程式設計
- iOS 團隊程式設計規範iOS程式設計
- C#程式設計命名規範C#程式設計
- 程式設計命名規範(網文)程式設計
- 會計基礎工作規範
- SAP Fiori裡的兩種鎖機制
- JUnit 註解@RunWith的工作原理
- JUnit 註解@Category的工作原理Go
- JUnit 註解@SuiteClasses的工作原理UI
- JUnit 註解@Rule的工作原理
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫