ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

i042416發表於2020-01-30

本文是鼠年第二篇文章,也是汪子熙公眾號第201篇原創文章。

今天是鼠年大年初二,不知道昨天的大年初一,大家過得如何?

最近這段非常時期,像Jerry這類宅男,能夠理直氣壯地以“響應國家號召,不給國家和社會添亂”為理由宅在家裡。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼 ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼


為了降低對病毒的恐懼感,讓我們繼續學習,分散下對疾病的注意力。

我們新建一個ABAP類之後,完成程式碼編寫,第一次啟用時,會看到這些以類的名稱開頭,中間跟著一大段=符號,以五個字元結尾的物件出現在待啟用列表裡。它們是什麼鬼?

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

我們來動手研究一番。Jerry在2019豬年大年三十寫的文章 SAP GUI和Windows登錄檔 曾經提到Windows系統的登錄檔,而ABAP Netweaver也有屬於自己的登錄檔:TADIR和TRDIR. 無論在SE80或者是SE11事務碼裡建立的物件,在這兩張表裡都會留下一些痕跡。

建立一個最簡單的ABAP類,包含public,protected和private方法和屬性各一個,麻雀雖小,五臟俱全。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

啟用之後,在登錄檔TRDIR里根據類的名字ZCL_ABAP_CLASS進行查詢,得到如下記錄:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

由此可見,ABAP裡的類(Class), 技術上是透過若干可以透過SE38直接開啟的ABAP include程式組成:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

對於上述TRDIR裡的記錄,我們可以逐一用SE38開啟,搞清楚它們到底代表什麼含義。

CCAU

這個AU的含義可以用ABAP Unit來幫助記憶。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

SE38開啟include程式之後,自動進入下面這個介面,發現CCAU程式儲存的是這個類的單元測試程式碼。

CCDEF

DEF代表Definition(定義). SE38裡開啟ZCL_ABAP_CLASS================CCDEF,看到的是這個介面:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

此處維護的是ABAP類的區域性定義,包括類的區域性類,區域性介面,區域性型別定義等等。

也可以先進入SE24,然後點選Local Definitions/Implementations開啟。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CCIMP

IMP代表implementation(實現). SE38開啟ZCL_ABAP_CLASS================CCIMP, 能看到區域性類的實現。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CI

類的私有區域定義。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CO

類的protected區域定義。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CU

類的公有區域定義。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CMXXX

CM代表Class Method,XXX是類的方法序號,基於16進位制,從1開始遞增,例如CM001儲存類的第一個方法的實現程式碼,CM002代表第二個方法,以此類推。

例如,SE38裡開啟ZCL_ABAP_CLASS================CM001,看到的是第一個私有方法的原始碼:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

ZCL_ABAP_CLASS================CM002:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

ZCL_ABAP_CLASS================CM003:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

CCMAC

MAC是Macro(宏)的縮寫,儲存類的宏定義。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

如何用程式碼的方式獲得一個類的這些不同的ABAP include程式名稱呢?

使用ABAP工具類CL_OO_CLASSNAME_SERVICE:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

比如我想知道CL_CRM_BOL_CORE這個類所有方法對應的include名稱,那麼在工具類的GET_ALL_METHOD_INCLUDES打個斷點,

然後SE24裡開啟CL_CRM_BOL_CORE,點選Source Code Based:

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

斷點立即觸發,從呼叫棧能看出,為了在Source Code模式下顯示出ABAP類的完整程式碼,需要把散落儲存在各個include程式裡的程式碼讀取出來。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

類方法和其include程式名稱的對應關係一目瞭然。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

在ABAP Type Group SEOP裡,儲存了本文介紹的以CC開頭的include型別的常量定義。

ABAP CCDEF, CCIMP, CCMAC, CCAU, CM00X這些東東是什麼鬼

相信閱讀了本文之後,下次大家在各個場合裡遇到以CCXXX結尾的這些ABAP include,不會再覺得一頭霧水了。感謝閱讀,祝大家新年快樂。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2674321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章