如何添加整个包裹以按代码传输请求?



我的任务是以编程方式执行所有这些步骤:

  • 创建一个新的传输请求,我设法用TR_INSERT_REQUEST_WITH_TASKS做到这一点
  • 将包内容添加到新创建的传输中,这是我卡在的部分。
  • 释放传输,我设法用TR_RELEASE_REQUEST做到这一点

我的问题是我可以通过事务SE03手动将包添加到传输请求中,然后使用 FMTR_RELEASE_REQUEST释放它,但这不是目标,从步骤 1 到 3 的所有内容都必须在一个程序执行中发生,如果有人可以指导我如何执行步骤 2,这将非常有帮助, 提前谢谢。

在您的程序中,您必须:

  • 首先通过表TADIR获取属于包的对象列表(PGMID列中的对象、OBJECTOBJ_NAME列中的对象和第DEVCLASS列中的包(
  • 并将这些对象通过未发布的功能模块TRINT_APPEND_COMMTR_APPEND_TO_COMM_OBJS_KEYS添加到任务或传输请求中。

要将整个项目添加到请求中,您必须首先从包中选择所有对象并逐个添加它们。你可以这样做:

DATA: l_trkorr  TYPE trkorr,
l_package TYPE devclass VALUE 'ZPACKAGE'.
cl_pak_package_queries=>get_all_subpackages( EXPORTING im_package     = l_package
IMPORTING et_subpackages = DATA(lt_descendant) ).
INSERT VALUE cl_pak_package_queries=>ty_subpackage_info( package = l_package ) INTO TABLE lt_descendant.
SELECT pgmid, object, obj_name FROM tadir
INTO TABLE @DATA(lt_segw_objects)
FOR ALL ENTRIES IN @lt_descendant
WHERE devclass = @lt_descendant-package.
DATA(instance) = cl_adt_cts_management=>create_instance( ).
LOOP AT lt_segw_objects ASSIGNING FIELD-SYMBOL(<fs_obj>).
TRY.
instance->insert_objects_in_wb_request( EXPORTING pgmid        = <fs_obj>-pgmid
object       = <fs_obj>-object
obj_name     = CONV trobj_name( <fs_obj>-obj_name )
IMPORTING result       = DATA(result)
request      = DATA(request)
CHANGING  trkorr       = l_trkorr ).
CATCH cx_adt_cts_insert_error.
ENDTRY.
ENDLOOP.

请注意,您不能添加已在另一个请求中锁定的对象,它会给您cx_adt_cts_insert_error例外。无法以编程方式解锁对象,只能通过 SE03 工具。

您可以检查代码隐藏,在 SE80 中写入传输条目,右键单击包菜单。

最新更新