1. 问题现象与背景解析
最近在SAP Fiori开发中遇到一个典型问题:当尝试在Create Space界面选择Transport时,下拉菜单为空。系统提示"你建的是Workbench Request,而Fiori Space需要的是Customizing Request"。这个错误看似简单,实则涉及SAP传输管理系统(Transport Management System, TMS)的核心机制。
我在实际项目中多次遇到这类问题,特别是在混合开发场景下。SAP系统对传输请求(Transport Request)有严格分类,主要分为两类:
- Workbench Request:用于ABAP开发对象(如程序、函数组、类等)
- Customizing Request:用于定制配置数据(如SPRO配置、业务配置等)
Fiori Space创建属于系统配置范畴,必须使用Customizing Request。而许多开发者(包括早期的我)习惯用SE09/SE10创建Workbench Request,导致后续操作失败。
2. 传输请求类型深度解析
2.1 Workbench Request的特点
Workbench Request(开发类请求)主要用于存储ABAP开发对象。典型特征包括:
- 通过SE80或SE38等开发工具自动创建
- 传输对象以程序、函数模块、类等开发单元为主
- 请求编号通常以"K"开头(如K900123)
- 无法用于存储SPRO配置或Fiori配置变更
2.2 Customizing Request的特点
Customizing Request(定制请求)则是配置专用传输载体:
- 专门用于传输SPRO配置、业务配置和Fiori Space定义
- 请求编号以"T"开头(如T900456)
- 必须通过特定事务码(如SPRO或Fiori配置界面)创建
- 可包含跨客户端的配置数据
关键区别:Workbench Request存储开发代码,Customizing Request存储配置数据。二者在SAP底层存储结构和传输机制上有本质不同。
3. 问题重现与解决方案
3.1 错误操作流程
以下是导致问题的典型操作步骤:
- 开发者通过SE10创建新的传输请求
- 默认创建的是Workbench Request(类型为"开发类")
- 进入Fiori配置界面创建Space
- 在Transport下拉选择时发现列表为空
- 系统提示类型不匹配错误
3.2 正确操作流程
正确的操作应该是:
-
直接通过Fiori配置界面触发创建:
- 进入Fiori Launchpad Designer
- 选择"Create Space"
- 在Transport字段点击"Create"按钮
- 系统会自动生成正确类型的Customizing Request
-
或通过SPRO创建:
- 事务码SPRO进入配置界面
- 选择"SAP Fiori"相关配置节点
- 执行操作时系统会提示创建传输请求
- 此时生成的必定是Customizing Request
-
已有请求的转换方法:
如果已经错误创建了Workbench Request,可以:- 使用事务码SE01(扩展传输组织器)
- 选择请求 → 右键 → 技术设置
- 修改请求类型为"CUST"(定制)
- 但需注意:这种转换可能受系统策略限制
4. 技术原理与底层机制
4.1 传输请求的存储结构
SAP传输请求在数据库层面的关键表:
- E070 - 请求头信息(包含类型字段TRKORR和TASKNUM)
- E071 - 包含的对象列表
- E07T - 请求描述文本
类型判定逻辑:
ABAP复制SELECT SINGLE trfunction
FROM e070
INTO lv_trfunction
WHERE trkorr = lv_transport.
4.2 Fiori Space的传输特性
Fiori Space配置存储在以下位置:
- /UI2/SAPL_CFG_FIORI_SPACE - 核心配置表
- /UI2/SPACE_CONTENT - Space内容定义
- /UI2/SPACE_APPS - 包含的App列表
这些表都被标记为"定制对象",只能通过Customizing Request传输。系统在读取可用传输列表时会过滤:
ABAP复制SELECT trkorr AS transport
FROM e070
WHERE trstatus = 'D'
AND trfunction = 'K'
AND as4user = sy-uname
INTO TABLE lt_transports.
5. 高级场景与疑难处理
5.1 跨系统传输问题
在DEV→QAS→PRD的标准传输路径中,常见问题包括:
- QAS系统缺少必要对象:传输顺序错误导致
- 依赖关系缺失:Space依赖的Catalog未先传输
- 权限不足:目标系统用户缺少维护权限
解决方案:
- 使用STMS检查传输路线
- 按正确顺序传输(先Catalog后Space)
- 在目标系统用SU01检查权限
5.2 传输冲突处理
当多人同时修改同一Space时可能出现:
- 对象锁定:SM12查看锁记录
- 版本冲突:SE11比较表内容差异
- 传输覆盖:使用SE09的版本比较功能
推荐工作流程:
- 修改前用SE10锁定请求
- 定期释放请求供他人使用
- 复杂变更分多个请求进行
6. 最佳实践与经验总结
经过多个Fiori项目实施,我总结出以下经验:
-
请求创建规范:
- 为Fiori配置创建专用Customizing Request
- 命名规则建议:"T_FIORI_[模块]_[日期]"
- 每个Space使用独立请求(便于回滚)
-
传输策略优化:
- 开发阶段:每日传输
- 测试阶段:按功能模块传输
- 生产部署:完整测试后整体传输
-
常见避坑指南:
- 不要用SE10直接创建Fiori传输请求
- 传输前用SE03检查对象一致性
- 复杂配置分多个小请求传输
- 生产传输前用SE09模拟测试
-
实用检查脚本:
ABAP复制REPORT zcheck_fiori_transport.
PARAMETERS p_trkorr TYPE e070-trkorr OBLIGATORY.
START-OF-SELECTION.
SELECT SINGLE trfunction
FROM e070
INTO @DATA(lv_type)
WHERE trkorr = @p_trkorr.
IF lv_type = 'K'.
MESSAGE '错误:这是Workbench Request!' TYPE 'E'.
ELSE.
MESSAGE '正确:Customizing Request' TYPE 'S'.
ENDIF.
这个简单的ABAP程序可以快速验证请求类型,建议加入开发检查清单。
