共计 1960 个字符,预计需要花费 5 分钟才能阅读完成。
业务场景:为什么我们需要字段增强?
最近在化工行业项目中遇到一个典型需求:客户要求在所有物料主数据中增加 环保认证编号 字段,用于记录欧盟 REACH 法规的合规信息。这个需求涉及:

- 扩展 MM03/MM02 事务码的界面
- 存储到 MARA 表增强结构
- 在 MRP 计算时校验该字段
这类需求在 SAP 实施中非常普遍,比如医药行业的 GMP 认证字段、汽车行业的 PPAP 审批状态等。传统做法是创建 Z 表关联,但会导致数据割裂——这正是 ABAP 字段增强技术的用武之地。
技术方案选型
方案对比表
| 技术类型 | 适用版本 | 维护性 | 升级安全 | 实现复杂度 |
|---|---|---|---|---|
| 用户出口 | ECC | 差 | 低 | 低 |
| BADI | ECC/S4 | 中 | 中 | 中 |
| 隐式增强 | S4HANA | 好 | 高 | 高 |
| CDS 视图扩展 | S4HANA 1909+ | 优 | 极高 | 低 |
关键决策因素
- 用户出口(User Exit):
- 通过 CMOD 维护,查找
MM06E005等出口 - 优点:代码直接插入标准程序
-
缺点:S4HANA 中部分出口已失效
-
BADI 实现:
- 使用
MATERIAL_MAINTAIN_DISPBADI -
示例代码框架:
CLASS zcl_mm_material_badi IMPLEMENTATION. METHOD if_ex_material_maintain_disp~modify_screen. LOOP AT SCREEN. IF screen-group1 = 'ECO'. screen-active = 1. MODIFY SCREEN. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS. -
隐式增强(Enhancement Spot):
- 在 SE80 中对
SAPLMGMM包使用Enhancement Implementation -
必须使用
ENHANCEMENT 1.语法包裹代码 -
CDS 视图扩展:
- 通过
@UI注解实现 Fiori 界面集成 - 需要 EXTEND VIEW 定义:
@AbapCatalog.enhancementCategory: [#EXTENSIBLE_CHARACTERISTIC] extend view MARA with Z_I_MARA_EXT {@UI: { lineItem: [ { position: 120} ] } ReachCertification; }
完整实现步骤
步骤 1:数据字典扩展
- 创建 APPEND 结构:
- 事务码 SE11,结构名
ZMM_MARA_EXT -
字段
ZREACH_NO类型 CHAR20 -
分配增强 ID:
- SPRO 路径:
物料管理→主数据→字段增强 - 激活
CI_MARA增强点
步骤 2:屏幕增强实现
* 在 PBO 模块中添加
MODULE customize_screen OUTPUT.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'MARA-MEINS'.
screen-required = 2. " 设置必输
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
步骤 3:校验逻辑实现
CLASS zcl_mm_reach_validator DEFINITION.
PUBLIC SECTION.
CLASS-METHODS validate_reach_no
IMPORTING iv_reach_no TYPE zreach_no
RAISING cx_badi_multiple_implement.
ENDCLASS.
METHOD validate_reach_no.
IF iv_reach_no IS INITIAL.
RETURN.
ENDIF.
" 调用外部 API 校验 REACH 编号
DATA(lo_client) = NEW zco_reach_ws_client( ).
IF NOT lo_client->check_validity(iv_reach_no).
MESSAGE e398(00) WITH 'REACH 认证无效'.
ENDIF.
ENDMETHOD.
生产环境部署要点
传输策略
- 必须包含以下对象:
- 数据字典增强(结构 / 域)
- 屏幕增强程序
- BADI 实现类
-
权限对象(如需)
-
推荐分组:
$T1 - 数据字典 $T2 - 程序增强 $T3 - 配置变更
多系统同步
- 使用 SCOT 配置传输路线
- 在 DEV 系统测试后:
- 先传输 QAS 验证
- 生产系统必须用 SCC1 副本传输
- 使用 SCMON 监控增强点激活状态
延伸思考
Fiori 适配难题
当传统 GUI 增强完成后,发现 Fiori 的 ” 管理物料 ” 应用未显示新字段。这是因为:
- Fiori 基于 CDS 元数据驱动
- 需要额外完成:
- 扩展 ODATA 服务
- 添加 UI 注解
- 适配 ValueHelp
MDG 影响分析
在启用物料主数据治理 (MDG) 的场景下:
- 需检查数据复制框架 (DRF) 配置
- 可能需要在 CRO 事务中映射字段
- 影响中央数据分发 (CDD) 性能
经验总结
通过这次实战,深刻体会到 S4HANA 的增强理念变化:
- 从代码级增强转向元数据驱动
- 兼容性问题主要发生在:
- 版本升级时(如 1909→2020)
- Fiori 与传统事务混合使用场景
- 推荐采用 ABAP Test Cockpit(ATC)检查增强代码质量
正文完
