1. SAP传输请求依赖关系检查的必要性
在SAP系统运维和开发过程中,传输请求(Transport Request)是变更管理的重要载体。作为一名有十年SAP实施经验的顾问,我见过太多因为忽略传输依赖关系而导致的系统故障案例。想象一下这样的场景:你在测试环境完美运行的程序,传输到生产环境后突然报错,排查半天才发现是因为某个被引用的表结构没有同步传输——这种问题完全可以通过前置检查避免。
传输请求之间的依赖关系主要分为三类:
- 对象依赖:请求A中的程序调用了请求B中的函数模块
- 数据依赖:请求C中的报表读取请求D中配置的自定义表数据
- 结构依赖:请求E的DDIC对象修改依赖于请求F的基础结构变更
2. 使用/SDF/CMO_TR_CHECK进行依赖检查
2.1 事务码执行与参数输入
在SAP系统中执行事务码SE38,输入程序名/SDF/CMO_TR_CHECK后进入检查界面。这里有几个关键参数需要注意:
目标系统(Target System):
- 必须填写准确的系统ID(如PRD表示生产系统)
- 大小写敏感,建议从系统菜单复制避免手误
传输请求号(Transport Request):
- 支持单个请求(如K900123)或多个请求(用逗号分隔)
- 可输入开发类(Development Class)批量检查相关请求
检查选项(Check Options):
- 默认勾选"检查对象依赖关系"
- 高级用户可勾选"包括已释放的请求"进行更彻底检查
重要提示:检查生产系统的依赖关系时,务必在测试环境先执行检查,避免直接在生产系统操作。
2.2 执行结果解析
程序执行后会生成结构化报告,重点关注以下输出字段:
| 字段名称 | 说明 | 处理建议 |
|---|---|---|
| Request | 被检查的请求号 | 记录需要处理的请求清单 |
| Depends On | 依赖的请求号 | 检查这些请求是否已传输 |
| Object Type | 对象类型(如TABL、PROG) | 判断依赖性质(结构/程序) |
| Object Name | 具体对象名称 | 确认业务影响范围 |
| Status | 依赖请求状态(已释放/未释放) | 决定传输顺序 |
当出现红色错误提示(如图中的"Request references tables from another request"),表示存在必须处理的强依赖关系。我曾遇到一个实际案例:财务月结程序因Z表未同步传输,导致全公司报表延迟出具——这种问题完全可以通过这个检查避免。
3. 依赖关系的解决方案
3.1 标准处理流程
根据检查结果,建议按以下步骤处理:
收集所有依赖请求:
" 示例:通过表E070查询请求详情 SELECT * FROM E070 WHERE TRKORR IN ('K900123','K900124') INTO TABLE @DATA(lt_requests).验证依赖请求状态:
- 检查TCODE SE10确认请求是否已释放
- 未释放的请求需联系开发人员处理
制定传输计划:
- 基础结构变更(如DDIC)优先传输
- 配置数据次之
- 最后传输应用程序
使用传输队列(Transport Organizer):
- 在STMS中创建传输组
- 按依赖顺序排列请求
3.2 特殊情况处理
场景1:循环依赖当请求A依赖B,B又依赖A时,解决方案:
- 合并两个请求为一个
- 重构代码消除循环引用
场景2:跨系统依赖如果依赖请求在另一个系统:
- 使用TCODE SCC1进行跨系统传输
- 记录在传输文档中备查
场景3:已传输但对象丢失有时显示依赖已解决但实际对象缺失:
" 检查对象是否存在 SELECT SINGLE @ABAP_TRUE FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'TABL' AND OBJ_NAME = 'ZMY_TABLE' INTO @DATA(lv_exists).4. 自动化检查方案
对于频繁传输的场景,建议建立自动化检查机制:
4.1 后台作业配置
- 创建变式(Variant)保存检查参数
- 通过SM36设置定期后台作业
- 输出结果发送到管理员邮箱
4.2 增强检查逻辑
通过BADI增强默认检查:
METHOD /sdf/cl_cmo_tr_check~check_requests. " 添加自定义校验逻辑 IF sy-tcode = 'ZFI_POST'. CHECK_SPECIAL_FI_RULES( ). ENDIF. ENDMETHOD.5. 最佳实践与经验分享
传输前检查清单:
- [ ] 执行/SDF/CMO_TR_CHECK
- [ ] 检查所有依赖请求状态
- [ ] 确认测试环境验证通过
- [ ] 记录传输顺序计划
常见问题排查:
问题:检查通过但传输后报错原因:可能有人修改了依赖请求内容解决:传输前再次快速检查
问题:显示不存在的依赖原因:可能是系统缓存问题解决:执行TCODE SGEN清理
性能优化技巧:
- 对于大型请求集,分批次检查
- 在系统空闲时段执行全量检查
- 使用
/SDF/CMO_TR_CHECK_PARALLEL提升大系统检查速度
在实际项目中,我建议将这套检查流程纳入公司的变更管理规范。某制造客户通过强制前置检查,将传输故障率降低了82%。记住:半小时的检查可能避免数小时的事故处理。