SAP-ABAP:SAP 经典事务码使用指南(五篇连载) 第三篇:SE24 类构建器面向对象开发实操指南
2026/5/13 10:13:56 网站建设 项目流程

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并新建类

  1. 在命令栏输入/nSE24回车
  2. 在“对象类型”字段中输入自建类名称(建议以ZCL_YCL_开头,如ZCL_HELLO_WORLD
  3. 点击“创建(Create)”按钮
  4. 在弹出的对话框中选择“类(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 创建接口

  1. 在SE24初始屏幕中输入接口名称(建议以ZIF_YIF_开头)
  2. 点击“创建”,在弹出的对话框中选择“接口(Interface)”
  3. 定义接口的方法和属性(接口中的方法只有定义,没有实现)

由于SE24存在结构性局限:它无法直观呈现类在整个系统中的调用上下文,不在SE24中直接展示接口实现类链路。正确做法通常是先用SE80进行包级搜索与依赖分析,再在SE24中集中编辑实现细节。

2.2 在一个类中实现接口

  1. 在类的编辑器中,点击“接口(Interfaces)”节点
  2. 右键“新增”,输入要实现的接口名称
  3. 点击“对号”确认,系统会自动在类的定义中添加INTERFACES语句
  4. 进入导航树中“Methods”节点下,双击以接口名~方法名格式自动生成的方法进行代码实现

本质理解
SE19是增强实施的“项目管理中心”,它负责创建、管理和激活一个具体的增强实施项目;而SE24是ABAP对象的“开发工具”,负责具体编写和定义实现增强业务逻辑的类。它们的关系是:你在SE19中“注册”一个增强实施,并指定一个在SE24中“开发”好的类作为其实现逻辑。

第三部分:类的高级配置——继承与常量

3.1 继承配置(超类)

如果新建的类希望继承系统的某个类(或其属性),需要进行以下操作:

  1. 在类编辑器中,点击工具栏上的**“超类”按钮**(Superclass)
  2. 在弹出的输入框中输入要继承的类名称(例如CL_GUI_ALV_GRID)
  3. 保存并激活

如果需要重构迁移已有类中的多个方法(如从旧类提取新接口或派生新类),不应手工逐个复制——请使用“重构助手(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_EXITHANDLERexit_handler关键字
方法三(配置查找)使用SE18直接查找增强点定义

5.3 BADI实施完整步骤

  1. 定位BADI:通过上述方法找到目标BADI,记住接口名称(如IF_EX_BADI_MATERIAL_REF
  2. 创建BADI实现
    • 使用事务码SE19创建BADI实施
    • 输入实施名称(Z/Y开头),选择要实施的BADI
    • 在实施中,系统会自动生成以ZCL_IM_开头的实现类
  3. 在SE24中编写逻辑
    • 在SE24中找到生成的实现类
    • 找到对应接口的方法(如IF_EX_BADI_MATERIAL_REF~CREATE_MATERIAL
    • 编写业务逻辑代码(例如在CT_SALES_TAX内表中循环,将TAXKM字段赋默认值)
  4. 保存并激活:保存类并激活,然后回到SE19激活增强实施
  5. 测试验证:执行相应事务码,检验增强是否生效

5.4 注意区分

  • SE18:查看和定义BADI(增强点的“说明书”)
  • SE19:创建和实施BADI实现(增强项目的“容器”)
  • SE24:编写实现类的具体代码(增强逻辑的“编写场所”)

5.5 类增强(Class Enhancement)

除了BADI实施,SE24还支持对标准类的直接增强(Enhancement Spot / Class Enhancement):

  1. 在SE24中打开要增强的全局类
  2. 点击菜单栏上的“增强”按钮,进入增强模式
  3. 在弹出的对话框中选择现有增强实施容器或新建一个
  4. 在增强模式下,可以新增属性、方法及方法参数,甚至向现有方法插入Post-Exit逻辑
  5. 编写完增强代码后,保存并激活增强

两种增强场景的区别

  • 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标准工具将现有类中的方法批量提取出一个新接口:

  1. 在SE24中打开原类,菜单实用程序 → 重构 → 重构助手
  2. 按向导选择Extract Interface模式
  3. 选择需要提取的方法,系统自动生成新接口类(如ZIF_...
  4. 原类自动实现提取出来的新接口

整个过程中,原业务逻辑保持不变。

7.2 在ADT迁移源配置到新环境

将某个全局类通过文本复制做跨系统迁移的典型步骤:

  1. 在源系统中进入SE24,切换到“基于源代码”视图,全选复制所有代码
  2. 在目标系统中运行SE24,创建同名类(或重命名新类)
  3. 切换到“基于源代码”视图,粘贴代码并激活

使用场景

  • 临时在无传输连接的不同系统之间传递少量类代码
  • 在迁移前的验证阶段可以先做代码层面的导入/导出测试,然后再走标准传输请求将类正式激活

第八部分:常见问题速查表

问题可能原因解决方案
创建类时提示“名称无效”类名不以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使用中是否遇到过不常见的问题或者奇葩报错?欢迎在评论区留言分享。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询