溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

OData服務(wù)是如何自動(dòng)生成的

發(fā)布時(shí)間:2022-01-04 15:07:03 來源:億速云 閱讀:240 作者:iii 欄目:服務(wù)器

本篇內(nèi)容主要講解“OData服務(wù)是如何自動(dòng)生成的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“OData服務(wù)是如何自動(dòng)生成的”吧!

假設(shè)我們對加了這個(gè)注解的CDS view激活后自動(dòng)生成的OData服務(wù)的明細(xì)一無所知,從何處開始入手進(jìn)行研究呢?

我創(chuàng)建了一個(gè)名為zjerrytest20160311的view,然后加上這個(gè)注解,激活。根據(jù)我的經(jīng)驗(yàn),按照SAP慣例,自動(dòng)生成的OData服務(wù)的名稱應(yīng)該也會(huì)包含0311這個(gè)字符串。

OData服務(wù)是如何自動(dòng)生成的

激活之后,我試著用0311作為關(guān)鍵字在OData服務(wù)的注冊事務(wù)碼/IWFND/MAINT_SERVICE里搜索,果然搜到了對應(yīng)生成的OData服務(wù):

OData服務(wù)是如何自動(dòng)生成的

在Jerry之前的文章 [ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什么鬼]( ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什么鬼) 曾經(jīng)提到ABAP Netweaver的注冊表TADIR,按照0311進(jìn)行查詢,發(fā)現(xiàn)CDS view激活之后,除了OData服務(wù)本身,還自動(dòng)生成了下列這些對象:

OData服務(wù)是如何自動(dòng)生成的

  • IWMO: SAP Gateway Business Suite Enablement對應(yīng)的模型

  • IWSV: SAP Gateway Business Suite Enablement對應(yīng)的服務(wù)

  • CLAS: OData服務(wù)的實(shí)現(xiàn)類ZCL_ZJERRYTEST20160311

做個(gè)實(shí)驗(yàn),當(dāng)我把OData.publish的值設(shè)置為false,再次激活,發(fā)現(xiàn)類型為IWMO和IWSV的對象從注冊表TADIR中消失了,這再次印證了二者是注解OData.publish設(shè)置為true之后激活CDS view生成的。

OData服務(wù)是如何自動(dòng)生成的

那么如何研究CDS view激活時(shí),這兩個(gè)對象的自動(dòng)生成邏輯呢?

使用Jerry文章( SAP錯(cuò)誤消息調(diào)試之七種武器:讓所有的錯(cuò)誤消息都能被定位) 里介紹的第六種武器,離別鉤之ST05.

打開ST05跟蹤模式,激活CDS view,在數(shù)據(jù)庫跟蹤結(jié)果里果然發(fā)現(xiàn)了將自動(dòng)生成的對象名稱插入到注冊表TADIR的OPEN SQL語句。

OData服務(wù)是如何自動(dòng)生成的

《神雕俠侶》天竺僧去絕情谷給楊過找情花毒解藥時(shí),說過一句話:毒蛇出沒之處,七步之內(nèi)必有解藥。

OData服務(wù)是如何自動(dòng)生成的

同樣,在ABAP里,在插入數(shù)據(jù)庫表的OPEN SQL語句之前,必定有待插入數(shù)據(jù)的生成邏輯。

點(diǎn)擊ST05里藍(lán)色的眼鏡圖標(biāo),自動(dòng)跳轉(zhuǎn)到OPEN SQL語句里。設(shè)置斷點(diǎn),激活CDS view,斷點(diǎn)觸發(fā):

OData服務(wù)是如何自動(dòng)生成的

從當(dāng)前的調(diào)用棧往外追溯,發(fā)現(xiàn)在第21個(gè)調(diào)用棧幀,正是自動(dòng)生成OData服務(wù)的地方:

OData服務(wù)是如何自動(dòng)生成的

CL_WB_DDLS_SECOBJ_HNDLR_SINGLE->IF_DDIC_WB_DDLS_SECOBJ_HANDLER~ON_ACTIVATION

這個(gè)方法首先根據(jù)delta_state判斷出需要?jiǎng)h除,新增或者更新的對象清單,分別存儲(chǔ)在下圖12到14行三個(gè)輸出參數(shù)里。

OData服務(wù)是如何自動(dòng)生成的

舉個(gè)例子,當(dāng)我在一個(gè)已經(jīng)激活過后的CDS view源代碼里添加@OData.publish:true的注解,然后激活,此時(shí)該注解對于的EDIT_STATE為N(New), 而其他的注解因?yàn)闆]有任何變化,被標(biāo)記為U(Unchanged).

OData服務(wù)是如何自動(dòng)生成的

此處會(huì)根據(jù)EDIT_STATE的值,進(jìn)入對應(yīng)的分支。

OData服務(wù)是如何自動(dòng)生成的

EDIT_STATE值為N的分支,則執(zhí)行OData服務(wù)的創(chuàng)建,通過CL_SADL_GTK_ODATA_SERVICE_GEN完成,后綴GEN代表Generation.

OData服務(wù)是如何自動(dòng)生成的

從調(diào)試器里能看出,名稱為ZJERRYTEST20160311的OData服務(wù)通過create_via_exposure方法被創(chuàng)建。

完整的調(diào)用棧:

OData服務(wù)是如何自動(dòng)生成的

到此,相信大家對“OData服務(wù)是如何自動(dòng)生成的”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI