一
前言
传输请求是ABAP开发的一个很重要的工具,主要负责把开发的对象或配置的内容从源系统(开发系统)传输到目标系统(测试/生产系统).
本文主要讲解一个特殊的传输请求:副本传输请求
副本传输用的不多,应微信群友的建议,特意详细测试了一下副本传输请求,本文是根据测试得出的一些结论,可能有谬误之处,欢迎指正.
后文中用到的系统编号
S4D 开发系统
S4Q 测试系统
S4P 生产系统
二
补充的功能介绍
上文中遗漏了一些功能介绍,补充一下.
详见链接无峰,公众号:ABAP 技巧与实战ABAP基础知识 传输请求处理(三 传输)
01
关闭导入队列
STMS中提供了一个功能, 关闭/打开导入队列
导入队列关闭后. 还是可以传输请求的, 只是新进入的请求放到了导入队列末尾 .
关闭队列功能更像是设置了一个时间节点. 区分该节点之前的请求和之后的请求.
比如可以把系统上线作为这个时间节点,节点后的请求等上线稳定后再传输
重新打开队列后, 导入队列恢复常态.
02
导入选项
在执行导入处理时, 可以设置导入的特殊处理选项. 这些选项会影响请求导入是否能够成功
将传输请求保留在队列中用于以后导入: 勾选后, 请求可以多次导入, 否则只能导入一次
再次导入传输请求 : 含义不明
覆盖原件 : 强制覆盖对象,把外部请求导入开发系统,勾选避免报错
覆盖未确认修复中的对象 : 强制覆盖对象,把外部请求导入开发系统,勾选避免报错
忽略无效传输类型 : 忽略传输请求类型检查, 把外部请求导入开发系统,勾选避免报错
忽略无效表类 : 忽略系统标准组件版本检查, 把外部请求导入开发系统,勾选避免报错
跳过前驱关系 : 用处不明.
三
基本概念
传输请求的相关概念
传输请求: 主传输请求
任务: 挂在主传输请求下的子请求
传输对象: 包含在任务或主传输请求中的配置(集团相关/集团无关),资源库对象
一般情况下, 对象包含在任务下面
释放后的任务和请求同时包含对象
通过特殊方式把对象写入请求时,请求包含对象
通过表E071可以更明确的看到这个关系
四
副本请求使用场景
副本请求一般在如下场景中使用
正式传输请求中包含多个功能, 这些功能还没有最终开发完成. 但是因为测试的需要(开发系统没有测试所需的数据), 需要先把这个请求中的多个或者部分功能先传输到测试或生产系统测试.
副本请求可以跳过测试系统, 直接传到生产系统.
01
创建
使用SE10创建副本传输请求,创建好的副本请求没有目标系统, 如果在SE10中选中一个副本请求, 点击创建,系统会自动继承选中请求的属性.
02
包含请求内容
把需要测试的程序所在的请求中的对象包含到副本请求中, 更多把对象写入传输请求的方法.
详见链接无峰,公众号:ABAP 技巧与实战ABAP基础知识 传输请求(一 记录)
添加请求或任务 这里需要注意请求/任务和对象的关系, 如果需要添加多个请求或任务,使用第二个单选框
包含了对象的副本请求
03
设置目标系统
副本请求的特殊之处在于,创建的时候系统不会自动指定传输目标, 需要手工指定传输目标(参考创建例外)
传输目标可以无视传输路径S4D->S4Q->S4P. 直接设置期望的目标系统.
设置好不同目标系统的副本请求
04
释放
和正常的传输请求一样释放即可.
释放时需要忽略对象锁定错误,因为副本请求无法锁定对象(对象所在的原请求锁定了对象)
释放后的副本请求直接出现在指定的系统导入队列中
指定S4Q系统的请求写入了导入队列,
05
导入
副本请求的默认导入选项不同于正常请求的,系统会自动取消勾选[将传输请求保留到队列中用于以后导入]
不勾选这个选项,导致的结果是,副本请求只能导入一次.
副本请求不受传输链路影响,传入S4Q系统后, 不再进入S4P系统的导入队列.
副本请求导入后不同于正常请求导入的状态
五
一个系统BUG及解决
对于直接设置目标系统是S4P的副本请求. 在导入队列中查找不到,但是传输了其它任意正式请求后, 副本请求出现在了S4P的导入队列.
01
BUG发现
测试了5个S4P作为目标的副本请求,前两个成功的写入了目标系统,后面创建的无论如何也无法写入目标系统.(看来这个环节还有些问题: BUG 或者 有些关键条件没达成? )
其中有两个进入了S4P系统
对于写入了S4P系统的副本请求,也不是释放后直接写入的, 而是其它什么条件触发它写入了(日志中可以看到,相比未写入S4P的副本请求, 写入的副本请求多了一行日志,不同于释放的时间
当正常请求进入S4P时, 调整导入队列功能生效.点击后,会触发副本请求也被写入生产系统的导入队列
02
BUG分析
实测副本请求进入S4P系统BUG的结论
副本请求如果指定S4P系统, 无法直接写入S4P系统的导入队列. 并且也不会触发系统能够使用调整导入队列功能.
当正常请求导入QAS系统,触发了生产系统能够使用调整导入队列功能时 , 该功能会把之前目标系统是S4P的副本请求一起写入导入队列并复制传输请求文件到S4P系统.
所以BUG产生的核心原因是释放时没有设置目标系统的导入队列待调整状态. 导致STMS无法显示该按钮.
03
BUG 解决
可以通过调试中断 LTMSU_IQF02 205行左右, 从内表 lt_exclude 中删除FTPQ
强制出现调整按钮
不选择传输请求,进入全量调整,调整后,请求会出现在S4P的导入队列中
也可以通过调用函数把副本请求加入S4P的导入队列
TMS_UI_TRANSMIT_TR_QUEUE
六
总结
副本请求可以在功能尚未完全完成的情况下, 先把已开发的部分功能传到测试系统测试.
副本请求不会按传输路径传输(副本请求只进入指定的目标系统). 这样就可以确保最终进入生产系统的传输请求相对比较少,便于管理.
副本请求可以指定目标系统为生产系统. 因此可以在测试系统出现故障时, 使用副本传输请求直接传到生产系统.(有待验证).
只是标准STMS对于副本请求直接传到生产系统存在一个小BUG. 需要用正常请求触发副本请求进入生产系统队列.
或者手工调用函数
TMS_UI_TRANSMIT_TR_QUEUE
完成请求加入生产系统队列