SAP 经典事务码使用指南(五篇连载)
第三篇:SE24 类构建器面向对象开发实操指南
如果说SE38是ABAP世界的“记事本”,SE80是“项目管理器”,那么SE24就是面向对象开发的“造物主”。本文围绕ABAP面向对象开发核心工具SE24展开,从类/接口的创建、属性/方法/事件的定义,到继承关系配置、单元测试配置、增强实施,再到版本对比与遗留类重构,帮你系统掌握面向对象开发的工具使用逻辑。
写在前面:为什么是SE24?
SE24(事务码名称“类构建器”/Class Builder)是SAP ABAP开发体系中用于创建、编辑、查看和维护面向对象ABAP类及接口的核心工具,其本质是ABAP面向对象编程(OOABAP)的可视化集成开发环境入口之一。SE24与事务码SE80(Object Navigator)、SE38(报表编辑器)、SE18/SE19(BADI定义与实现)等共同构成SAP OOABAP开发全生命周期支撑体系的关键节点。
SE24的界面分为左右两栏:左侧为导航树,显示当前类的继承关系、组件列表(属性、方法、事件、接口、友元、类型等);右侧为主编辑区,支持以“Definition”(定义)和“Implementation”(实现)双标签切换,分别展示类的声明部分和具体逻辑实现。
📌本系列导航:
- 第一篇:SE38 ABAP程序编辑事务码全解析
- 第二篇:SE80 对象导航器一站式开发指南
- 第三篇:SE24 类构建器面向对象开发实操指南(本文)
- 第四篇:三大事务码协同开发场景实战
- 第五篇:经典事务码使用常见问题与进阶技巧汇总
第一部分:从零开始——创建你的第一个全局类
1.1 启动SE24并新建类
- 在命令栏输入
/nSE24回车 - 在“对象类型”字段中输入自建类名称(建议以
ZCL_或YCL_开头,如ZCL_HELLO_WORLD) - 点击“创建(Create)”按钮
- 在弹出的对话框中选择“类(Class)”,点击“对号”确认
1.2 类属性定义(Attributes)
进入类构建器主界面后,在左侧导航树中找到“属性(Attributes)”节点,右键可新增属性。ABAP类中的属性可以从两个角度来看:
从可见性角度:
- PUBLIC:在外部可见,任何对象都可以访问
- PROTECTED:只能在类本身、子类和友元类中可见
- PRIVATE:只能在类本身内部可见
从作用域角度:
- 实例属性:使用
DATA关键字声明,每个对象独立拥有一份副本 - 静态属性:使用
CLASS-DATA关键字声明,在所有对象之间共享。调用时使用=>符号,例如ZCL_UTILS=>GV_MESSAGE
1.3 类方法定义(Methods)
在“方法(Methods)”节点处右键新增方法。每个方法可以定义以下参数类型:
- IMPORTING:传入参数(只读)
- EXPORTING:传出参数(仅输出)
- CHANGING:传入并传出参数
- RETURNING:返回值(仅单个返回值时使用)
- EXCEPTIONS:异常列表(传统方式)
SE24对方法参数的呈现极为规范,每个参数均标注其类型、可选性、传递标识等关键语义信息,并支持双击参数名跳转至其类型定义。
进入方法实现编辑区(双击方法名或在右侧“Implementation”标签页中编写),编写业务逻辑代码。
METHOD say_hello. " 示例代码 lv_message = 'Hello, this is ' && me->mv_name. WRITE: / lv_message. ENDMETHOD.💡小技巧:在方法实现中使用
ME->引用当前对象自身的实例变量。
第二部分:进阶对象——接口(Interface)
2.1 创建接口
- 在SE24初始屏幕中输入接口名称(建议以
ZIF_或YIF_开头) - 点击“创建”,在弹出的对话框中选择“接口(Interface)”
- 定义接口的方法和属性(接口中的方法只有定义,没有实现)
由于SE24存在结构性局限:它无法直观呈现类在整个系统中的调用上下文,不在SE24中直接展示接口实现类链路。正确做法通常是先用SE80进行包级搜索与依赖分析,再在SE24中集中编辑实现细节。
2.2 在一个类中实现接口
- 在类的编辑器中,点击“接口(Interfaces)”节点
- 右键“新增”,输入要实现的接口名称
- 点击“对号”确认,系统会自动在类的定义中添加
INTERFACES语句 - 进入导航树中“Methods”节点下,双击以
接口名~方法名格式自动生成的方法进行代码实现
本质理解:
SE19是增强实施的“项目管理中心”,它负责创建、管理和激活一个具体的增强实施项目;而SE24是ABAP对象的“开发工具”,负责具体编写和定义实现增强业务逻辑的类。它们的关系是:你在SE19中“注册”一个增强实施,并指定一个在SE24中“开发”好的类作为其实现逻辑。
第三部分:类的高级配置——继承与常量
3.1 继承配置(超类)
如果新建的类希望继承系统的某个类(或其属性),需要进行以下操作:
- 在类编辑器中,点击工具栏上的**“超类”按钮**(Superclass)
- 在弹出的输入框中输入要继承的类名称(例如CL_GUI_ALV_GRID)
- 保存并激活
如果需要重构迁移已有类中的多个方法(如从旧类提取新接口或派生新类),不应手工逐个复制——请使用“重构助手(Refactoring Assistant)”来完成批量迁移。
3.2 常量管理(Constants)
在类的“类型(Types)”或属性区域可以定义常量(CONSTANTS):
- 在“类型”节点中,定义与类相关的全局类型
- 在“属性”节点中,将属性的可见性设为PUBLIC并勾选“常量(Constant)”
3.3 别名配置(Aliases)
通过“别名”可以为类中现有的方法、属性等创建替代名称,便于在特定上下文或接口实现中提供更具语义的表达。
第四部分:单元测试配置(ABAP Unit)
ABAP Unit是内置于ABAP Workbench(SE38/SE24/SE80)的原生单元测试框架,自NetWeaver 6.40起成为标配,支持类方法级粒度的测试用例编写、测试套件组织、覆盖率分析等关键特性。
4.1 创建本地测试类的两种方式
方式一——手动生成(适用于对ABAP Unit已有一定了解):
- 在SE24中打开要测试的全局类
- 点击菜单“实用程序(Utilities)→ 测试类(Test Classes)→ 生成(Generate)”
- 根据向导设置测试类名称、风险级别(RISK LEVEL)、时长类型(DURATION TYPE)、是否生成SETUP/TEARDOWN方法等
- 选择需要生成测试用例的类方法
方式二 —— 从ADT右键一键生成(适合早期试验或快速原型验证):在ADT的ABAP类编辑器中右键“生成测试类(Generate Test Class)”,系统会自动为选中的全局类创建本地测试类,并填充基础的测试方法骨架。
4.2 编写测试用例
在生成的测试类中,编写具体的测试方法:
CLASS lcl_test_my_class DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PRIVATE SECTION. DATA: mo_cut TYPE REF TO zcl_my_class. METHODS: setup, teardown. METHODS: test_calculate FOR TESTING. ENDCLASS. CLASS lcl_test_my_class IMPLEMENTATION. METHOD setup. CREATE OBJECT mo_cut. ENDMETHOD. METHOD test_calculate. DATA: lv_actual TYPE i, lv_expected TYPE i VALUE 100. lv_actual = mo_cut->calculate( 50 ). cl_aunit_assert=>assert_equals( act = lv_actual exp = lv_expected msg = 'Calculation result mismatch' ). ENDMETHOD. ENDCLASS.4.3 运行单元测试
在SE24中,直接点击工具栏上的**“单元测试(Unit Test)”按钮**,系统会执行所有FOR TESTING标识的方法,并显示测试报告。
风险级别说明:
RISK LEVEL HARMLESS:测试不会危害关键数据RISK LEVEL CRITICAL:测试可能影响数据DURATION SHORT:测试执行时间短(秒级)
第五部分:增强实施(Enhancement)
5.1 场景理解:什么时候用到SE24做增强?
当SAP标准功能需要扩展但不想修改标准程序时,SAP提供了多种增强技术,BADI(Business Add-In)就是基于面向对象思想的第三代增强。BADI的核心是接口,SAP预定义接口,开发者创建一个实现类来实现该接口的方法。SE24就是用来创建和维护这个实现类的工具。
5.2 三种最常用的BADI定位方法
| 方法 | 操作路径 |
|---|---|
| 方法一(通用查找) | SE24中输入CL_EXITHANDLER,在其GET_INSTANCE方法中打断点,然后运行相关事务码跟踪EXIT_NAME的值 |
| 方法二(源码搜索) | SE38中在事务码对应的标准程序内搜索CL_EXITHANDLER或exit_handler关键字 |
| 方法三(配置查找) | 使用SE18直接查找增强点定义 |
5.3 BADI实施完整步骤
- 定位BADI:通过上述方法找到目标BADI,记住接口名称(如
IF_EX_BADI_MATERIAL_REF) - 创建BADI实现:
- 使用事务码
SE19创建BADI实施 - 输入实施名称(Z/Y开头),选择要实施的BADI
- 在实施中,系统会自动生成以
ZCL_IM_开头的实现类
- 使用事务码
- 在SE24中编写逻辑:
- 在SE24中找到生成的实现类
- 找到对应接口的方法(如
IF_EX_BADI_MATERIAL_REF~CREATE_MATERIAL) - 编写业务逻辑代码(例如在CT_SALES_TAX内表中循环,将TAXKM字段赋默认值)
- 保存并激活:保存类并激活,然后回到SE19激活增强实施
- 测试验证:执行相应事务码,检验增强是否生效
5.4 注意区分
- SE18:查看和定义BADI(增强点的“说明书”)
- SE19:创建和实施BADI实现(增强项目的“容器”)
- SE24:编写实现类的具体代码(增强逻辑的“编写场所”)
5.5 类增强(Class Enhancement)
除了BADI实施,SE24还支持对标准类的直接增强(Enhancement Spot / Class Enhancement):
- 在SE24中打开要增强的全局类
- 点击菜单栏上的“增强”按钮,进入增强模式
- 在弹出的对话框中选择现有增强实施容器或新建一个
- 在增强模式下,可以新增属性、方法及方法参数,甚至向现有方法插入Post-Exit逻辑
- 编写完增强代码后,保存并激活增强
两种增强场景的区别:
- BADI(实施接口的方法):SAP已预置接口框架,开发者在SE24中开发接口方法内的逻辑
- Class Enhancement(在原有方法上追加逻辑):开发者在SE24中直接在标准类原有方法末尾插入补充代码片段
两种目标对象不同,请不要混用。
5.6 增强开发注意事项
- 因性能原因,第三方增强技术都不推荐在生产系统直接调试;若确实需要通过SE24进行增强代码调试验证,优先在开发系统中模拟
- 增强代码不应大段复制SAP标准逻辑,应只写必要的新增逻辑
- 实施BADI时注意方法的调用模式(同步/异步)与异常返回处理
第六部分:实用技巧——调试、版本管理与跨系统比较
6.1 调试技巧
SE24与ABAP调试器(/H或断点功能)深度集成:
- 在SE24中打开某方法并设置断点后,运行调用该方法的程序时,调试器将自动停驻于方法实现处并高亮当前执行行
- 通过调试器的“调用堆栈”窗口可逐层回溯调用链
- 条件断点:在SE24中双击行号设置断点,右键选择“断点属性”,输入条件表达式,可以只在满足特殊条件时才中断
6.2 类版本对比与管理
比较同一系统内的历史版本:
- 菜单路径:
实用程序 → 版本 → 版本管理 - 可对比活动版本与历史版本的差异
跨系统远程比较:
- 通过SE24的
Utilities → Versions选中版本后,点击“远程比较(Remote Compare)”按钮,可对比当前开发系统与测试/生产系统之间的类代码差异
提示:某些情况下,生产系统(PRD)中的SE24可能只有只读权限(
Read-Only显示模式)且“Source Code-Based”按钮不可见,属正常安全策略。此时应先确认是否有集成ADT开发环境的合规审批,或者只有在DEV环境完成修改并通过传输请求统一推送测试和PRD。
6.3 权限控制说明
开发相关的核心权限对象是S_DEVELOP,它用于控制开发活动:
- 对象类型
DEBUG+ 活动值包含03:仅允许查看和单步调试 - 活动值包含
02:额外允许在调试中修改变量值
自ABAP 7.57(2022年)版本起,SAP引入专门的调试权限对象S_DBG,提供更细粒度的调试控制,包括软件组件、开发包等维度的分隔控制。
第七部分:遗留类重构与迁移
随着项目迭代和业务演进,类可能会有重构、拆分或配合新版本升级的需求。
7.1 提取接口(Extract Interface)
使用SAP标准工具将现有类中的方法批量提取出一个新接口:
- 在SE24中打开原类,菜单
实用程序 → 重构 → 重构助手 - 按向导选择
Extract Interface模式 - 选择需要提取的方法,系统自动生成新接口类(如
ZIF_...) - 原类自动实现提取出来的新接口
整个过程中,原业务逻辑保持不变。
7.2 在ADT迁移源配置到新环境
将某个全局类通过文本复制做跨系统迁移的典型步骤:
- 在源系统中进入SE24,切换到“基于源代码”视图,全选复制所有代码
- 在目标系统中运行SE24,创建同名类(或重命名新类)
- 切换到“基于源代码”视图,粘贴代码并激活
使用场景:
- 临时在无传输连接的不同系统之间传递少量类代码
- 在迁移前的验证阶段可以先做代码层面的导入/导出测试,然后再走标准传输请求将类正式激活
第八部分:常见问题速查表
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 创建类时提示“名称无效” | 类名不以Z/Y开头或包含特殊字符 | 类名必须以Z或Y开头且只能包含字母、数字、下划线 |
| 单元测试显示“NO EXECUTION AS ACTUAL RISK LEVEL IS TOO HIGH” | 测试类的风险级别(RISK LEVEL)与系统配置冲突 | 将测试类的风险级别改为HARMLESS,或联系基础团队调整SAUNIT_CLIENT_SETUP配置 |
| 类激活报错“Class has not yet been converted to new class-local types” | 早期版本创建的类未完成元数据转换,多见于S/4HANA升级场景 | 在SE24中执行“实用程序 → 转换 → Convert to Class-Local Types”,或安装SAP Note |
| 类方法修改后调试中未生效 | 未正确激活类 | 保存后务必激活(Ctrl+F3),仅保存是不够的,检查SE24中的激活状态图标 |
| SE24与SE80显示的类内容不一致 | SE80未刷新类缓存 | 在SE80中选中类节点后按F5刷新缓存,或用/h模式下的菜单强制同步视图 |
| 在SE24中实现接口时找不到自动生成的方法 | 接口添加后,需要首先生成接口方法的框架代码 | 添加接口实现后,保存类(Ctrl+S),系统会自动生成INTERFACE~METHOD类型的方法。如果仍然没有,在导航树Methods节点上右键“重新生成方法”,最后重新激活 |
结语
SE24不仅是编写类代码的工具,更是ABAP面向对象开发的核心入口。掌握SE24,你就能:
- 轻松构建类的骨架(属性、方法、事件、接口)
- 快速编写单元测试保障代码质量
- 熟练实施BADI等增强技术,扩展SAP标准功能
- 高效实现类的重构、迁移与版本管理
SE24仍有一定的局限——无法直观呈现类在整个系统中的调用上下文是其短板,此时需要配合SE80等工具协同工作(这些将在本系列第四篇中详细展开)。
📌下一篇预告:三大事务码协同开发场景实战 —— 结合实际开发场景,讲解SE38、SE80、SE24的协同使用方法,涵盖通过SE80快速定位SE24类在SE38程序中的调用位置等高频协同操作,提升多对象协作的开发效率。
作者:你的学习伙伴
版本记录:2026年5月 第一版
💬 你在SE24使用中是否遇到过不常见的问题或者奇葩报错?欢迎在评论区留言分享。