共计 1276 个字符,预计需要花费 4 分钟才能阅读完成。
标准表扩展的痛点
在 SAP 系统中直接修改 MARC 标准表结构就像在雷区跳舞——系统升级时所有 Z 字段会被覆盖,权限控制需要额外开发,更可能引发数据一致性风险。经历过 SAP 版本升级的开发者都知道,找回被覆盖的自定义字段数据简直是噩梦。

技术方案选型
- User Exit(用户出口)
- 优点:标准 SAP 预留的修改点
-
缺点:仅限特定功能点,灵活性差
-
Append Structure(附加结构)
- 优点:物理存储在原表,支持所有标准事务
-
缺点:仍需考虑升级影响
-
BAdI(Business Add-In)
- 优点:完全解耦,支持多重实现
- 缺点:需要显式编码调用
实际项目中推荐组合方案:Append Structure 存储数据 + BAdI 处理业务逻辑
核心实现步骤
Append Structure 创建(事务码 SE11)
- 输入结构名 ZMM_MARC_APPEND
- 勾选 ”Append Structure” 选项
- 在 Reference Table 字段填入 MARC
- 添加自定义字段如 ZZ_PROD_LEVEL(生产层级)
关键配置截图要点:
– 必须激活包含字段的 Domain
– 建议添加字段描述(F1 帮助文本)
BAdI 调用示例代码
DATA: lo_badi TYPE REF TO ZBADI_MARC_ENH.
try.
GET BADI lo_badi
FILTERS
plant = im_werks.
CALL BADI lo_badi->validate_material
EXPORTING
im_matnr = im_matnr
CHANGING
cv_error = ev_error.
catch cx_badi_not_implemented.
" 处理未实现情况
catch cx_badi_multiply_implemented.
" 处理多重实现
endtry.
CDS 视图增强(事务码 SEGW)
@AbapCatalog.sqlViewAppendName: 'ZMARC_EXT'
@ObjectModel:{
foreignKey.association: '_AppendFields',
semanticKey: ['Material', 'Plant']
}
extend view MARC with ZMARC_EXT {ZMM_MARC_APPEND.ZZ_PROD_LEVEL}
生产环境检查清单
- 传输管理
- 将 Append Structure 与 BAdI 定义放在独立请求
-
使用事务码 SE10 标记为关键传输
-
权限控制
- 配置 S_TABU_NAM 对象,限制字段访问
-
示例权限值:&_SYS_STRUC&(仅结构权限)
-
性能验证
- 使用 ST05 跟踪 MARC 表操作
- 重点关注大批量查询场景
- 建议对新增字段创建辅助索引
思考题:跨 Client 同步方案
当需要在不同 Client 间同步增强字段时,你会选择:
– 通过 RFC 调用集中存储服务?
– 利用 S4HANA 的 Extension Field 特性?
– 还是设计自定义分发机制?
实际项目中,我们最终采用 Append Structure+BAdI 组合方案,在 3 个生产系统平稳运行 2 年,经受住了 2 次系统升级考验。特别提醒:字段命名建议包含项目标识(如 ZZ_< 项目 >_XXX),避免与其他增强冲突。
正文完
