在具体介绍 ABAP 这门编程语言的 Class(类) 的设计原理之前,先简略介绍一下 ABAP 编程语言自身。
ABAP 是 SAP 公司推出的一门高级编程语言,全称是 Advanced Business Application Program. 在应用 ABAP 编程语言之前,必须先装置 Application Server ABAP (下文简称 AS ABAP)作为 ABAP 零碎的应用层。AS ABAP提供了 ABAP 运行时框架,ABAP 程序在该框架中独立于平台执行。
AS ABAP 必须连贯到数据库层或数据库系统,其外围数据集存储在规范数据库中。
基于 UI 的拜访须要一个展示层(Presentation Layer)来显示 AS ABAP 用户界面(在 SAP GUI 或 Web 浏览器中)。
ABAP 应用服务器反对下列三种交互组件:
RFC 接口
这是 AS ABAP 的经典性能界面。近程函数调用是对远端(指标)零碎中的函数的调用,而不是调用程序运行的本地零碎中的函数。调用能够在不同的 AS ABAP 之间,也能够在AS ABAP和内部第三方零碎之间进行。在AS ABAP中,通过功能模块(Function Module)实现各个性能。在内部零碎中,专门编程的函数被称为其接口模仿函数模块。
互联网通信管理器(ICM)
Internet通信管理器ICM (Internet Communication Manager)是AS ABAP的一个过程,容许它间接应用HTTP、HTTPS或SMTP与Internet通信。ICM用于连贯基于Web的示意组件,如SAPUI5、Web Dynpro ABAP、BSP等。ICM还容许应用AS ABAP作为Web服务的客户机和服务器。应用Internet通信框架(ICF)的类和接口从ABAP程序拜访ICM。
ABAP渠道(Channel)
ABAP 通道 是AS实例与Internet之间基于事件的通信框架。ABAP音讯通道(AMC)用于在不同AS实例的ABAP程序之间替换音讯,而ABAP推送通道(APC)用于在AS ABAP与Internet之间应用WebSocket协定或TCP套接字协定进行双向通信。
ABAP Class 在上述提到的 ICM 和 ABAP Channel 里都有着宽泛的利用。
ABAP数据建模使得为定义在数据库上的业务应用程序创立数据模型成为可能:
ABAP Dictionary 是数据类型及其关系的长久存储库,它们是可见的,能够在所有其余开发对象中应用。ABAP 字典用于治理规范 AS ABAP 数据库的数据库表、视图和锁对象。
ABAP 外围数据服务为 AS ABAP 实现了 SAP CDS概念。独立于平台的 CDS DDL 和CDS DCL 使得定义 CDS 实体(如 CDS 视图或 CDS 表函数)以及相干的 CDS 角色及其语义空虚成为可能。
咱们新建一个ABAP类之后,实现代码编写,第一次激活时,会看到这些以类的名称结尾,两头跟着一大段 =
符号,以五个字符结尾的对象呈现在待激活列表里。它们是什么鬼?
咱们来入手钻研一番。Jerry在2019猪年大年三十写的文章 SAP GUI和Windows注册表 已经提到Windows零碎的注册表,而ABAP Netweaver也有属于本人的注册表:TADIR和TRDIR. 无论在SE80或者是SE11事务码里创立的对象,在这两张表里都会留下一些痕迹。
创立一个最简略的ABAP类,蕴含public,protected和private办法和属性各一个,麻雀虽小,五脏俱全。
激活之后,在注册表TRDIR里依据类的名字ZCL_ABAP_CLASS进行查问,失去如下记录:
由此可见,ABAP里的类(Class), 技术上是通过若干能够通过SE38间接关上的ABAP include程序组成:
对于上述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,不会再感觉一头雾水了。
总结
本文首先介绍了 ABAP Class 在 ABAP AS 三大通信模块中的利用,接着具体介绍了 ABAP Class 组成各局部的命名标准和应用形式。