...Fiori編程模型規範裡註解的神秘面紗 - @OData.publish工作原理...

2020-12-23 汪子熙的編程和遊泳

今天是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目錄下有對這個註解的介紹:

https://help.sap.com/viewer/cc0c305d2fab47bd808adcad3ca7ee9d/1709%20000/en-US/ccdb054e4ecf4573829d4ba258cafa72.html

一旦加上了這個註解的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 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 GuidelinesSAP Fiori + Vue = ?Fiori Fundamentals和SAP UI5 Web Components30分鐘用Restful ABAP Programming模型開發一個支持增刪改查的Fiori應用SAP Fiori應用索引大全介紹一種Fiori標準應用的增強方式揭開SAP Fiori編程模型規範裡註解的神秘面紗 - @ObjectModel.readOnly工作原理解析為什麼SAP GUI裡的傳統事務碼能通過Fiori Launchpad啟動並運行在瀏覽器裡一步步把SAP GUI的事務碼配置到SAP Fiori Launchpad裡

相關焦點

  • 揭開SAP Fiori編程模型規範裡註解的神秘面紗 - @ObjectModel.read...
    以@ObjectModel.readOnly為例,施加了這個註解的CDS view欄位,在對應的Fiori UI上以只讀的方式渲染:並且也不能通過編程的方式進行修改。大家在使用這些註解的時候,有沒有想過,它們是怎麼工作的?
  • SpringMvc @Validated註解執行原理
    1|0@Validated 和@valid 的對比Spring Validation驗證框架對參數的驗證機制提供了@Validated(Spring's JSR-303規範,是標準JSR-303的一個變種),javax提供了@Valid(標準JSR-303規範),配合BindingResult可以直接提供參數驗證結果。
  • 可編程電子負載工作原理及使用方法
    打開APP 可編程電子負載工作原理及使用方法 發表於 2017-11-08 12:19:38   可編程直流電子負載是一種模擬真實負載的電子設備
  • NIO&AIO編程模型
    NIO線程模型什麼是NIO線程模型?上圖是NIO的線程模型, 基於select實現, 這種線程模型的特點: 多條channel通過一個選擇器和單挑線程綁定, 並且在這種編程模型中, Channel中相關業務邏輯不允許存在耗時的任務 , 如果一定會有耗時的邏輯, 請將它們放置到線程池中去運行, 因為這種模型雖然做到了非阻塞, 但是他並不是真正的異步編程, 任何channel上的任何耗時的操作, 都會拖垮這個選擇器
  • Aop工作原理分析
    Aop工作原理分析,面向切面編程,是通過代理的方式為程序添加統一功能,集中解決一些公共問題。應用在Debugging 調試、logging, tracing, profiling and monitoring 記錄跟蹤優化校準場景中。
  • JavaScript模塊化編程規範
    當一個網站複雜度較高需要多人協作開發時,傳統的非模塊化編程模式容易導致代碼衝突和依賴等問題,而模塊化編程的誕生正是為了解決此類問題。目前使用該規範的典型代表有:Node.js、微信小程序。下面以Node.js中的兩個小例子,簡單講講CommonJS規範下的模塊化編程。無返回值的模塊調用//module.jsconsole.log(『這是一個模塊。』);//main.jsrequire(『.
  • ...機:極短時間內發送兩個Odata request,前一個會自動被cancel掉嗎
    用戶在創建Opportunity時,需要指定Account欄位,該欄位支持Live Search功能,比如敲入一個字符"J", UI5會發送一個OData請求到後臺,後者異步返回Account模型裡fullname欄位包含J的那些數據,作為搜索結果,通過下拉列表的方式顯示在UI上:OData請求url:/sap/opu/odata/sap/CRM_OPPORTUNITY/
  • Spring事務實現原理
    但是由於不了解底層的原理,這樣的問題可能在今後的工作中往復出現。本文就為大家揭開@Transactional下的秘密。原生的事務管理在沒有Spring存在的時候,事務就已經誕生了。其實框架依賴的還是底層提供的能力,只不過它對這一過程的抽象和復用。
  • 結合參數接收響應轉換原理講解SpringBoot常用註解
    結合參數接收響應轉換原理講解SpringBoot常用註解一、常用註解回顧1.1 @RequestBody與@ResponseBody@RequestBody與@ResponseBody(圖片點擊可放大)如上代碼所示:@RequestBody修飾請求參數,註解用於接收HTTP的body,默認是使用JSON的格式
  • 入門PCB設計,最關鍵的是對背後原理和規範的理解
    PCB設計是硬體工程師的必備技能,是影響企業產品質量和交期的關鍵因素,因此對硬體工程師的要求是全方面的: 所以學習PCB設計最重要的是學習背後的原理和規範
  • 「原創」Java並發編程系列07|synchronized原理
    synchronized是實現同步加鎖的原理?synchronized解決了並發編程的哪些問題?1.原理探究如下代碼,利用javap工具查看生成的class文件信息來分析Synchronize的實現。所有的Java對象是天生的Monitor,每一個Java對象都有成為Monitor的潛質,因為在Java的設計中,每一個Java對象自打娘胎裡出來就帶了一把看不見的鎖,它叫做內部鎖或者Monitor鎖。
  • 原創】Java並發編程系列01|開篇獲獎感言
    ,他剛工作時的並發編程第一原則就是不要寫並發程序。說白了,對我們程式設計師來說,並發編程在日常工作中是都要用到的,就算目前沒用到將來也要用到,工作中用不到面試也要用到。如何學習並發編程並發編程的學習確實有難度《Java並發編程實戰》中這麼說,「編寫正確的程序難,編寫正確的並發程序更難」。
  • 免費的編程中文書籍索引
    今天給大家推薦一個免費的編程中文書籍索引。來我們看看都有什麼書籍吧!
  • 常用的機器人編程方法
    機器人離線編程是利用計算機圖形學的成果,通過對工作單元進行三維建模,在仿真環境中建立與現實工作環境對應的場景,採用規划算法對圖形進行控制和操作,在不使用實際機器人的情況下進行軌跡規劃,進而產生機器人程序。
  • 未來機器編程會「搶」程式設計師飯碗嗎
    那麼,機器編程指的是搬運代碼模型,還是具有相當的自主開發特徵;目前機器編程的主要方法有哪些,效能如何,具備怎樣的優勢;為什麼有專家認為機器編程不僅不會取代程式設計師,還會創造出大量就業機會,其可能首先大規模應用於什麼領域?代碼將不再是「手工藝品」如今,幾乎各個行業都離不開編程。傳統編程看似簡單,其實對人的要求很高。
  • 數字萬用表工作原理
    圖1是雙積分ADC的工作原理。圖1 雙積分ADC的工作原理雙積分ADC包括2個部分:第一部分是充電和積分電路(圖1的上升部分);第二部分是放電部分(圖1的下降部分)。2 業界經典的數字萬用表34401A的結構框圖34401A數字萬用表包括幾個部分:1)前面板輸入和後面板輸入選擇部分;2)測試功能切換部分;3)直流放大和電阻測試中的電流產生電路;4)AC測量中的AC到DC轉換電路;5)雙積分ADC部分;6)邏輯控制和處理部分;7)編程接口部分
  • 天能電池數字工廠TOS項目揭開神秘面紗,不斷加碼數位化轉型
    [摘要]近日,由天能部品事業部主導的數字工廠TOS項目,在青創園揭開神秘面紗。 關於天能數字工廠TOS項目 近日,由天能部品事業部主導的數字工廠TOS項目,在青創園揭開神秘面紗
  • 網絡嗅探器工作原理及驅動流程
    網絡嗅探器的基本工作原理   網絡嗅探器利用的是共享式的網絡傳輸介質。共享即意味著網絡中的一臺機器可以嗅探到傳遞給本網段(衝突域)中的所有機器的報文。例如最常見的乙太網就是一種共享式的網絡技術,乙太網卡收到報文後,通過對目的地址進行檢查,來判斷是否是傳遞給自己的,如果是,則把報文傳遞給作業系統;否則,將報文丟棄,不進行處理;網卡存在一種特殊的工作模式,在這種工作模式下,網卡不對目的地址進行判斷,而直接將他收到的所有報文都傳遞給作業系統進行處理,這種特殊的工作模式,就稱之為混雜模式。網絡嗅探器通過將網卡設置為混雜模式來實現對網絡的嗅探。
  • CCF啟動編程培訓師資認證工作 小碼研究院院長王洋擔任組織委員會...
    小碼研究院院長王洋(左一)被任命為PTA組織委員會副主席  期間,中國科學院院士、中國軍事科學院副院長梅宏,中國計算機學會秘書長杜子德,滴滴出行高級副總裁、雲平臺事業群負責人兼開源委員會主席章文嵩,出席會議並就CCF編程培訓師資認證工作發表講話