如何通过代码将整个包裹添加到运输请求中?

How to add a whole package to transport request by code?

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

我的问题是,我可以通过事务SE03手动将包裹添加到运输请求中,然后用FM TR_RELEASE_REQUEST释放它,但这不是目标,从第1步到3 必须在一个程序执行中发生,如果有人可以指导我如何执行第 2 步,那将非常有帮助,在此先感谢。

可以查看后面的代码,Write Transport Entry在SE80中右击包菜单

在你的程序中,你必须:

  • 首先获取属于包的对象列表,通过table TADIR(对象列PGMIDOBJECTOBJ_NAME , 并在列 DEVCLASS)
  • 中打包
  • 并通过未发布的功能模块TRINT_APPEND_COMMTR_APPEND_TO_COMM_OBJS_KEYS.
  • 将这些对象添加到任务或传输请求中

要将整个项目添加到请求中,您必须首先 select 包中的所有对象,然后将它们一一添加。你可以这样做:

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 工具。