Как добавить весь пакет к запросу транспорта по коду? - PullRequest
1 голос
/ 10 февраля 2020

Моя задача состоит в том, чтобы выполнить все эти шаги программно:

  • Создать новый запрос транспорта, мне удалось сделать это с помощью TR_INSERT_REQUEST_WITH_TASKS
  • Добавить содержимое пакета во вновь созданный транспорт, это та часть, в которой я застрял.
  • Освободите транспорт, мне удалось сделать это с помощью TR_RELEASE_REQUEST

Моя проблема в том, что я могу вручную добавить пакет в запрос на транспортировку через транзакцию SE03, а затем сбросить его с помощью FM TR_RELEASE_REQUEST, но это не является целью, все от шага 1 до 3 должно происходить в одном выполнении программы, если кто-нибудь может подсказать мне, как выполнить шаг 2, это будет быть очень полезным, спасибо заранее.

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

В вашей программе вы должны:

  • Сначала получить список объектов, которые относятся к пакету, через таблицу TADIR (объект в столбцах PGMID, OBJECT, OBJ_NAME и упаковать в столбец DEVCLASS)
  • И добавить эти объекты в задачу или запрос на перенос через невыпущенные функциональные модули TRINT_APPEND_COMM или TR_APPEND_TO_COMM_OBJS_KEYS.
1 голос
/ 11 февраля 2020

Чтобы добавить весь проект в запрос, вы должны сначала выбрать все объекты из пакета и добавить их один за другим. Вы можете сделать это так:

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.

0 голосов
/ 10 февраля 2020

Вы можете проверить код позади, Запись транспортной записи в SE80, щелкнуть правой кнопкой мыши на меню пакета.

...