如何将多个用户的$TMP对象转移至单个包/文件夹?
批量转移多用户$TMP对象至指定包的解决方案
方法1:通过SE03工具批量处理
- 启动事务码
SE03,在对象目录条目分类下选择「更改对象目录条目」,点击执行。 - 在筛选界面:
- 「对象类型」:可按需选择(如程序
PROG、函数组FUGR等),若要覆盖所有类型可留空或全选 - 「所有者」:输入需要处理的多个用户名,用逗号分隔(如
USER1,USER2,USER3) - 「对象目录」:输入
$TMP,仅筛选临时对象
- 「对象类型」:可按需选择(如程序
- 执行筛选后,选中所有需要转移的对象条目(可通过顶部「全选」按钮批量选择)。
- 点击工具栏的「更改对象目录」,在弹出窗口中输入目标包名称,同时指定一个传输请求(若需传输),确认后完成批量转移。
方法2:通过ABAP程序批量更新
如果SE03的筛选逻辑无法满足需求,可编写简单的ABAP程序直接操作TADIR表(操作前务必备份数据):
REPORT Z_MOVE_TMP_OBJECTS. PARAMETERS: p_target TYPE tadir-devclass OBLIGATORY, p_users TYPE string OBLIGATORY, " 多用户用逗号分隔,如USER1,USER2 p_trkorr TYPE e070-trkorr OPTIONAL. DATA: lt_users TYPE TABLE OF xubname, ls_tadir TYPE tadir, lt_tadir TYPE TABLE OF tadir. * 拆分用户列表 SPLIT p_users AT ',' INTO TABLE lt_users. * 查询符合条件的$TMP对象 SELECT * FROM tadir INTO TABLE lt_tadir WHERE devclass = '$TMP' AND uname IN @lt_users. IF sy-subrc = 0. LOOP AT lt_tadir INTO ls_tadir. ls_tadir-devclass = p_target. MODIFY tadir FROM ls_tadir TRANSPORTING devclass WHERE obj_name = ls_tadir-obj_name AND obj_type = ls_tadir-obj_type. " 如果需要绑定传输请求,需更新E071表 IF p_trkorr IS NOT INITIAL. INSERT e071 FROM VALUE #( trkorr = p_trkorr obj_name = ls_tadir-obj_name obj_type = ls_tadir-obj_type devclass = p_target ) ON DUPLICATE KEY UPDATE devclass = p_target. ENDIF. ENDLOOP. COMMIT WORK. WRITE: / '成功转移', lines(lt_tadir), '个对象至包', p_target. ELSE. WRITE: / '未找到符合条件的$TMP对象'. ENDIF.
执行程序时,输入目标包、待处理的用户列表(逗号分隔),可选指定传输请求,即可完成批量转移。
注意事项
- 确保拥有
S_DEVELOP权限,且目标包已存在(若不存在需先通过SE21创建) - 转移对象时,若对象已被锁定,需先解锁(可通过
SM12查看并处理锁定) - 若需要将对象传输至其他系统,务必指定有效的传输请求,避免对象丢失
内容的提问来源于stack exchange,提问作者Priyanka Mishra
相关产品推荐
相关产品推荐

