在具体介绍 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 应用服务器支持下列三种交互组件:
这是 AS ABAP 的经典功能界面。远程函数调用是对远端(目标)系统中的函数的调用,而不是调用程序运行的本地系统中的函数。调用可以在不同的 AS ABAP 之间,也可以在AS ABAP和外部第三方系统之间进行。在AS ABAP中,通过功能模块(Function Module)实现各个功能。在外部系统中,专门编程的函数被称为其接口模拟函数模块。
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 通道 是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打开,搞清楚它们到底代表什么含义。
这个AU的含义可以用ABAP Unit来帮助记忆。

SE38打开include程序之后,自动进入下面这个界面,发现CCAU程序存储的是这个类的单元测试代码。

DEF代表Definition(定义). SE38里打开ZCL_ABAP_CLASS================CCDEF,看到的是这个界面:

此处维护的是ABAP类的局部定义,包括类的局部类,局部接口,局部类型定义等等。
也可以先进入SE24,然后点击Local Definitions/Implementations打开。

IMP代表implementation(实现). SE38打开ZCL_ABAP_CLASS================CCIMP, 能看到局部类的实现。

类的私有区域定义。

类的protected区域定义。

类的公有区域定义。

CM代表Class Method,XXX是类的方法序号,基于16进制,从1开始递增,例如CM001存储类的第一个方法的实现代码,CM002代表第二个方法,以此类推。
例如,SE38里打开ZCL_ABAP_CLASS================CM001,看到的是第一个私有方法的源代码:

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

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

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 组成各部分的命名规范和使用方式。
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,: