SAP GUI 创建 ABAP 异常类实操:SE24 生成构造器与 MESSAGE_TEXT 参数适配

本文以 ZCX_MM_SC 为例,按 SAP GUI 的实际操作顺序,说明如何创建异常类、维护公开只读字符串属性、核对系统生成构造器、检查并激活,以及通过测试环境验证构造参数赋值。
实操日期为2026年11月10日,环境为 SAP GUI for Windows、ZSD/900、事务码 SE24。类已保存、语法检查无错误、已激活,并通过构造器实例测试。截图中的系统、包和对象名称用于说明本次操作;其他项目应使用各自批准的开发环境、包和工作台请求。
这次遇到的关键问题是:经典 SE24 为异常类自动生成的构造参数名为 MESSAGE_TEXT,参数名不能在当前界面编辑,构造器源码也提示不能编辑。原项目使用 IV_TEXT 命名参数,因此最终保留系统生成构造器,并把调用方统一为 EXPORTING message_text = ...。
截图从基本对象创建完成后开始采集,因此没有SE24初始页及创建弹窗的原始图片。下文说明前段配置,并用后续20张真实截图记录属性维护、构造器限制、激活和测试过程。没有通过删除重建对象补造前段截图。
对象设置与完成结果
| 项目 | 本次设置或结果 |
|---|---|
| 类名 | ZCX_MM_SC |
| 描述 | 委外发料业务异常 |
| 类别与父类 | 异常类,CX_STATIC_CHECK |
| 实例生成与继承限制 | 公共,Final |
| 自定义属性 | MESSAGE_TEXT TYPE STRING READ-ONLY |
| 构造参数 | 系统生成的可选 TEXTID、PREVIOUS、MESSAGE_TEXT |
| 当前包 | Z001,沿用本次系统归属;未移包、未释放传输 |
| 已验证 | 保存、类语法检查、激活、构造器文本赋值 |
| 未覆盖 | 全项目编译、ABAP Unit、ATC及真实业务流程验收 |
操作前如何进入
- 登录项目获准开发系统,核对系统/客户端;本次唯一会话为ZSD/900,当前事务SE24。
- SE24输入ZCX_MM_SC,先核对是否已有对象;本次实操初始状态栏显示原类已删除,点击创建后进入新对象创建窗口。
- 创建类别选择“异常类”,父类CX_STATIC_CHECK;描述“委外发料业务异常”;实例生成公共;勾选Final;不选择T100消息类方案。
- 保存后进入下面的属性维护步骤。若已有活动对象或目标系统/客户端不符,不按本记录覆盖未知对象。
1. 基本对象已创建
本次实操开始时在SE24已填ZCX_MM_SC,点击创建后选择异常类,父类CX_STATIC_CHECK,描述“委外发料业务异常”,实例生成选公共,勾选Final。本图记录基本对象创建后的当前界面,状态为“已实现/非活动”;不是此前创建弹窗的截图。

2. 进入属性页
在类构建器点击用于维护成员的“属性”页签。注意左侧还有一个“属性”页签用于类基本属性;本页是包含TEXTID、PREVIOUS等继承属性的成员表。定位继承属性之后的第一空行。

3. 填写MESSAGE_TEXT属性
在空行填写属性MESSAGE_TEXT;级别选Instance Attribute,可见性Public,勾选只读,键入Type,关联类型STRING。继承属性不修改。此图记录回车前的输入。

4. 确认属性输入
按回车检查输入,MESSAGE_TEXT应成为当前异常类的公开只读字符串实例属性。系统未返回错误;不要把它建为静态属性或数值字段。

5. 保存类及属性
点击标准工具栏保存,实际状态栏返回“类 ZCX_MM_SC 已保存”。本会话没有弹出新的包/请求分配窗口;随后类属性显示包Z001。本次实操未改包、未释放传输。其他环境若弹出包/请求选择,按项目正式包与获准任务处理,不能照抄Z001。

6. 定位CONSTRUCTOR
切到“方法”页,在方法列表定位CONSTRUCTOR。IF_MESSAGE~GET_TEXT等是继承方法,不需要新建或重定义。

7. 核对系统生成参数
选中CONSTRUCTOR,点击“参数”。实际参数为TEXTID、PREVIOUS、MESSAGE_TEXT;MESSAGE_TEXT为TYPE STRING OPTIONAL。读取控件可编辑性确认参数名不可编辑,不尝试强行改成IV_TEXT。

8. 查看构造器及编辑限制
点击“源代码”。系统进入构造器显示,状态栏提示“不能编辑异常类的构造函数”。源码调用父构造器并执行me->MESSAGE_TEXT = MESSAGE_TEXT。本次实操没有修改生成源码;最终采用保留系统生成构造器、统一本地项目调用参数的方案。

9. 返回类构建器
按返回离开只读构造器。不要把无法编辑理解为缺少一行代码,也不要通过改父类或取消异常类别绕过。

10. 执行语法检查
确认当前对象ZCX_MM_SC,点击“检查”(Ctrl+F2)。实际状态栏为“未找到语法错误”。检查通过后仍需要激活。

11. 核对激活对象清单
点击“激活”(Ctrl+F3)。弹出非活动对象清单,已选中6行,都是ZCX_MM_SC的类组成部分:两个CINC、CPRI、CPRO、CPUB及CONSTRUCTOR方法;不是6个独立业务类。不选择其他人员或其他对象。

12. 确认激活成功
核对清单后点继续。实际状态栏为“对象已激活”,类状态变为“已实现/活动”。这一步是本次实操在目标SAP真实执行的激活结果。

13. 核对父类、类别和包
打开类基本属性页,确认父类CX_STATIC_CHECK、描述“委外发料业务异常”、实例生成公共、Final及异常类别40。当前包Z001,语言ZH。包是系统当前归属,不是本手册为所有项目推荐的固定包。

14. 进入实例测试
在类构建器点击测试环境(F8)。系统进入“创建类ZCX_MM_SC的实例:构造函数参数”界面,包含TEXTID、PREVIOUS及MESSAGE_TEXT。只测试已知纯内存赋值构造器,没有执行业务发料/写表函数。

15. 打开字符串编辑器
定位MESSAGE_TEXT行的“编辑长字段或结构”,双击进入;本次通过定位该行并执行选择动作进入字符串编辑器。TEXTID及PREVIOUS保持初始。

16. 输入测试文本
在CONSTRUCTOR.MESSAGE_TEXT的字符串输入栏填写ZCX_MM_SC_TEST_20261110。该文本仅用于验证构造器赋值,不是业务数据或接口请求号。

17. 返回参数界面确认输入
返回构造器参数页,核对MESSAGE_TEXT行显示完整ZCX_MM_SC_TEST_20261110,避免进入长文本编辑器后未带回输入。

18. 创建实例并核对结果
点击“创建实例”(F8),展开对象属性。实际MESSAGE_TEXT属性值为ZCX_MM_SC_TEST_20261110,证明参数到只读属性的传递正确。本次未执行完整项目ABAP Unit或ATC。

19. 退出测试回到已激活类
按返回回到类构建器,类状态仍为“已实现/活动”。测试只生成内存实例,不生成业务凭证。

20. 以显示模式结束
切换为显示模式,最终停留在ZCX_MM_SC类基本属性界面,状态“已实现/活动”,包Z001。未继续创建或修改其他SAP对象。

本地代码怎样与生成器对齐
构造器公共接口为:TEXTID LIKE TEXTID OPTIONAL、PREVIOUS LIKE PREVIOUS OPTIONAL、MESSAGE_TEXT TYPE STRING OPTIONAL。调用示例:
RAISE EXCEPTION TYPE zcx_mm_sc
EXPORTING message_text = '供应商不能为空,禁止保存'.
捕获后仍读取异常对象的MESSAGE_TEXT属性。保留PREVIOUS异常链;本地共361处调用参数改名,错误文本及业务判断未改。SAP中已实施的其他类、Include或增强片段需要以后按新本地源码合并和检查,本次实操没有批量修改它们。
验证范围和复现要点
- 已在SAP执行:ZCX_MM_SC保存、类语法检查、类激活、构造器创建实例、MESSAGE_TEXT属性值核对。
- 尚未执行:其余项目类/报表的SAP编译、RULES的16项ABAP Unit、ATC、真实发料/冲销、并发/断连恢复及完整业务验收。
- 不能直接编辑生成构造器时,维护公开只读属性让SE24生成对应参数;不要强改参数名、父类或后台元数据。后续新增异常属性可能触发生成器更新,更新后重新核对签名和调用方。
- 截图只证明对应步骤的实际界面状态,类激活不等于全部项目已上线。其他客户端/系统须重新核对。
常见问题
| 现象 | 处理方式 |
|---|---|
构造器参数名不能改成 IV_TEXT | 核对系统生成签名,统一调用方使用 MESSAGE_TEXT,不强改生成元数据 |
| 源码界面提示不能编辑异常类构造函数 | 保留生成器实现,通过属性维护生成对应参数;源码页用于核对 |
| 保存成功但状态仍为非活动 | 执行类检查,再激活,并核对实际激活结果 |
| 类激活成功但其他程序仍报参数不存在 | 检查调用方是否仍使用旧参数名,更新对应源码并分别检查 |
截图包为 Z001 | 这是本次系统归属;正式项目应核对自身包、请求和传输安排 |
