本文是鼠年第二篇文章,也是汪子熙公众号第201篇原创文章。工具
今天是鼠年大年初二,不知道昨天的大年初一,你们过得如何?单元测试
最近这段很是时期,像Jerry这类宅男,可以义正词严地以“响应国家号召,不给国家和社会添乱”为理由宅在家里。学习
为了下降对病毒的恐惧感,让咱们继续学习,分散下对疾病的注意力。测试
咱们新建一个ABAP类以后,完成代码编写,第一次激活时,会看到这些以类的名称开头,中间跟着一大段=符号,以五个字符结尾的对象出如今待激活列表里。它们是什么鬼? spa
咱们来动手研究一番。Jerry在2019猪年大年三十写的文章 SAP GUI和Windows注册表 曾经提到Windows系统的注册表,而ABAP Netweaver也有属于本身的注册表:TADIR和TRDIR. 不管在SE80或者是SE11事务码里建立的对象,在这两张表里都会留下一些痕迹。3d
建立一个最简单的ABAP类,包含public,protected和private方法和属性各一个,麻雀虽小,五脏俱全。对象
激活以后,在注册表TRDIR里根据类的名字ZCL_ABAP_CLASS进行查询,获得以下记录:blog
因而可知,ABAP里的类(Class), 技术上是经过若干能够经过SE38直接打开的ABAP include程序组成:token
对于上述TRDIR里的记录,咱们能够逐一用SE38打开,搞清楚它们到底表明什么含义。接口
CCAU
这个AU的含义能够用ABAP Unit来帮助记忆。
SE38打开include程序以后,自动进入下面这个界面,发现CCAU程序存储的是这个类的单元测试代码。
CCDEF
DEF表明Definition(定义). SE38里打开ZCL_ABAP_CLASS================CCDEF,看到的是这个界面:
此处维护的是ABAP类的局部定义,包括类的局部类,局部接口,局部类型定义等等。
也能够先进入SE24,而后点击Local Definitions/Implementations打开。
CCIMP
IMP表明implementation(实现). SE38打开ZCL_ABAP_CLASS================CCIMP, 能看到局部类的实现。
CI
类的私有区域定义。
CO
类的protected区域定义。
CU
类的公有区域定义。
CMXXX
CM表明Class Method,XXX是类的方法序号,基于16进制,从1开始递增,例如CM001存储类的第一个方法的实现代码,CM002表明第二个方法,以此类推。
例如,SE38里打开ZCL_ABAP_CLASS================CM001,看到的是第一个私有方法的源代码:
ZCL_ABAP_CLASS================CM002:
ZCL_ABAP_CLASS================CM003:
CCMAC
MAC是Macro(宏)的缩写,存储类的宏定义。
如何用代码的方式得到一个类的这些不一样的ABAP include程序名称呢?
使用ABAP工具类CL_OO_CLASSNAME_SERVICE:
好比我想知道CL_CRM_BOL_CORE这个类全部方法对应的include名称,那么在工具类的GET_ALL_METHOD_INCLUDES打个断点,
而后SE24里打开CL_CRM_BOL_CORE,点击Source Code Based:
断点当即触发,从调用栈能看出,为了在Source Code模式下显示出ABAP类的完整代码,须要把散落存储在各个include程序里的代码读取出来。
类方法和其include程序名称的对应关系一目了然。
在ABAP Type Group SEOP里,存储了本文介绍的以CC开头的include类型的常量定义。
相信阅读了本文以后,下次你们在各个场合里遇到以CCXXX结尾的这些ABAP include,不会再以为一头雾水了。感谢阅读,祝你们新年快乐。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":