我的任务是以编程方式执行所有这些步骤:
- 创建一个新的传输请求,我设法用
TR_INSERT_REQUEST_WITH_TASKS
做到这一点 - 将包内容添加到新创建的传输中,这是我卡在的部分。
- 释放传输,我设法用
TR_RELEASE_REQUEST
做到这一点
我的问题是我可以通过事务SE03
手动将包添加到传输请求中,然后使用 FMTR_RELEASE_REQUEST
释放它,但这不是目标,从步骤 1 到 3 的所有内容都必须在一个程序执行中发生,如果有人可以指导我如何执行步骤 2,这将非常有帮助, 提前谢谢。
在您的程序中,您必须:
- 首先通过表
TADIR
获取属于包的对象列表(PGMID
列中的对象、OBJECT
、OBJ_NAME
列中的对象和第DEVCLASS
列中的包( - 并将这些对象通过未发布的功能模块
TRINT_APPEND_COMM
或TR_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 中写入传输条目,右键单击包菜单。