如何通过代码将整个包裹添加到运输请求中?
How to add a whole package to transport request by code?
我的任务是以编程方式完成所有这些步骤:
- 创建一个新的传输请求,我设法用
TR_INSERT_REQUEST_WITH_TASKS
做到了
- 在新建的传输中添加包内容,这是我卡的部分
- 释放传输,我用
TR_RELEASE_REQUEST
做到了
我的问题是,我可以通过事务SE03
手动将包裹添加到运输请求中,然后用FM TR_RELEASE_REQUEST
释放它,但这不是目标,从第1步到3 必须在一个程序执行中发生,如果有人可以指导我如何执行第 2 步,那将非常有帮助,在此先感谢。
可以查看后面的代码,Write Transport Entry在SE80中右击包菜单
在你的程序中,你必须:
- 首先获取属于包的对象列表,通过table
TADIR
(对象列PGMID
、OBJECT
、OBJ_NAME
, 并在列 DEVCLASS
) 中打包
- 并通过未发布的功能模块
TRINT_APPEND_COMM
或TR_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 工具。
我的任务是以编程方式完成所有这些步骤:
- 创建一个新的传输请求,我设法用
TR_INSERT_REQUEST_WITH_TASKS
做到了
- 在新建的传输中添加包内容,这是我卡的部分
- 释放传输,我用
TR_RELEASE_REQUEST
做到了
我的问题是,我可以通过事务SE03
手动将包裹添加到运输请求中,然后用FM TR_RELEASE_REQUEST
释放它,但这不是目标,从第1步到3 必须在一个程序执行中发生,如果有人可以指导我如何执行第 2 步,那将非常有帮助,在此先感谢。
可以查看后面的代码,Write Transport Entry在SE80中右击包菜单
在你的程序中,你必须:
- 首先获取属于包的对象列表,通过table
TADIR
(对象列PGMID
、OBJECT
、OBJ_NAME
, 并在列DEVCLASS
) 中打包
- 并通过未发布的功能模块
TRINT_APPEND_COMM
或TR_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 工具。