Hi, you can use the attached and linked report instead of getting requests one after the other in the systems you work with,
Simple to use, you give the request number or task number to the top (if you give the request, all the tasks under it are automatically added)
If you check Release, it will send it to the queue of the target system,
The “TOC:” prefix is added to the beginning of the request definition, if you used 60 full characters in the definition, the last 5 characters are removed.
*&---------------------------------------------------------------------* *& Report ZTOC *&---------------------------------------------------------------------* ************************************************************************ *----------------------------------------------------------------------* * Description : TOC oluşturma programı ************************************************************************ REPORT ZTOC. TABLES: e070, e071. *** SELECTION-SCREEN *** SELECTION-SCREEN : BEGIN OF SCREEN 200. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE tblock1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(23) treq FOR FIELD s_trtt. SELECT-OPTIONS s_trtt FOR e071-trkorr NO INTERVALS OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(23) ttrgt FOR FIELD s_trgt. SELECT-OPTIONS s_trgt FOR e070-tarsystem NO INTERVALS NO-EXTENSION OBLIGATORY DEFAULT 'XXX'. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(26) tlib FOR FIELD chk_lib. PARAMETERS: chk_lib AS CHECKBOX DEFAULT space. * chk_stms AS CHECKBOX. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN : END OF SCREEN 200. *** AT SELECTION-SCREEN *** AT SELECTION-SCREEN. INITIALIZATION. tblock1 = 'TOC Oluşturma'. treq = 'Request:'. ttrgt = 'Hedef Sistem:'. tlib = 'Release edilsin mi?'. *----------------------------------------------------------------------* * CLASS lcl_report DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_report DEFINITION. PUBLIC SECTION. TYPES: ty_range_trkorr TYPE RANGE OF e071-trkorr, BEGIN OF ty_e071, trkorr TYPE e071-trkorr, strkorr TYPE e070-strkorr, as4text TYPE e07t-as4text, END OF ty_e071. DATA gt_e071 TYPE STANDARD TABLE OF ty_e071. DATA gt_message TYPE esp1_message_tab_type. CLASS-METHODS: main. PRIVATE SECTION. CLASS-DATA lo_report TYPE REF TO lcl_report. METHODS: request_sorgula IMPORTING i_r_trkorr TYPE ty_range_trkorr, toc_olustur IMPORTING i_desc TYPE e07t-as4text OPTIONAL i_request_tipi TYPE trfunction RETURNING VALUE(r_request) TYPE e070-trkorr, tasklar_dahil_et IMPORTING i_req_task TYPE e070-trkorr i_req_dest TYPE e070-trkorr, release_et IMPORTING i_request TYPE e071-trkorr, mesajlari_goster, kontrol_et RETURNING VALUE(r_continuar) TYPE flag, mesaj_ekle IMPORTING i_msgid TYPE sy-msgid i_msgty TYPE sy-msgty i_msgno TYPE sy-msgno i_msgv1 TYPE sy-msgv1 OPTIONAL i_msgv2 TYPE sy-msgv2 OPTIONAL i_msgv3 TYPE sy-msgv3 OPTIONAL i_msgv4 TYPE sy-msgv4 OPTIONAL. ENDCLASS. "lcl_report DEFINITION *----------------------------------------------------------------------* * CLASS lcl_report IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_report IMPLEMENTATION. METHOD main. "initial CALL SELECTION-SCREEN 200. CHECK sy-subrc EQ 0. CREATE OBJECT lo_report. FIELD-SYMBOLS <e071> TYPE ty_e071. DATA l_request TYPE e070-trkorr. "taskları ve requestleri toparla lo_report->request_sorgula( i_r_trkorr = s_trtt[] ). "kopya oluştur l_request = lo_report->toc_olustur( i_request_tipi = 'T' ). "toc'a taskları ekle LOOP AT lo_report->gt_e071 ASSIGNING <e071>. lo_report->tasklar_dahil_et( EXPORTING i_req_task = <e071>-trkorr i_req_dest = l_request ). ENDLOOP. lo_report->release_et( i_request = l_request ). lo_report->mesajlari_goster( ). lcl_report=>main( ). ENDMETHOD. "main METHOD mesaj_ekle. FIELD-SYMBOLS <message> TYPE esp1_message_wa_type. APPEND INITIAL LINE TO me->gt_message ASSIGNING <message>. <message>-msgid = i_msgid. <message>-msgty = i_msgty. <message>-msgno = i_msgno. <message>-msgv1 = i_msgv1. <message>-msgv2 = i_msgv2. <message>-msgv3 = i_msgv3. <message>-msgv4 = i_msgv4. ENDMETHOD. "mesaj_ekle METHOD mesajlari_goster. CHECK me->gt_message[] IS NOT INITIAL. CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP' TABLES i_message_tab = me->gt_message. ENDMETHOD. "mesajlari_goster METHOD toc_olustur. CHECK lo_report->kontrol_et( ) EQ 'X'. DATA: l_desc TYPE e07t-as4text, l_msgv2 TYPE sy-msgv2. DATA ls_request_header TYPE trwbo_request_header. FIELD-SYMBOLS: <trtt> LIKE LINE OF s_trtt, <e071> TYPE ty_e071. IF i_desc IS INITIAL. LOOP AT s_trtt ASSIGNING <trtt>. READ TABLE me->gt_e071 ASSIGNING <e071> WITH KEY strkorr = <trtt>-low. IF sy-subrc EQ 0 AND <e071> IS ASSIGNED. l_desc = |TOC:{ <e071>-as4text(55) } |. ENDIF. * IF sy-tabix EQ 1. * l_desc = 'TOC: ' && ' ' && <trtt>-low. * ELSE. * l_desc = l_desc && ' ' && <trtt>-low. * ENDIF. ENDLOOP. ELSE. l_desc = i_desc. ENDIF. CALL FUNCTION 'IW_C_CREATE_TRANSPORT_REQUEST' EXPORTING description = l_desc transport_kind = i_request_tipi langu = sy-langu IMPORTING commfile = r_request. IF sy-subrc <> 0. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'TOC Oluştururken hata oldu'). ELSE. l_msgv2 = r_request. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'S' i_msgno = '001' i_msgv1 = 'TOC başarıyla oluşturuldu ' i_msgv2 = l_msgv2 ). ENDIF. "hedefi belirle "1 - oku DATA: ls_request TYPE trwbo_request. ls_request-h-trkorr = r_request. CALL FUNCTION 'TR_READ_REQUEST' EXPORTING iv_read_e070 = 'X' iv_read_e07t = 'X' iv_read_e070c = 'X' iv_read_e070m = 'X' iv_read_objs_keys = 'X' iv_read_attributes = 'X' CHANGING cs_request = ls_request EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'Request bulunamadı' ). ENDIF. DATA header TYPE trheader. MOVE-CORRESPONDING ls_request-h TO header. "2 - değiştir DATA: ls_e070 TYPE e070, ls_e07t TYPE e07t, ls_e070c TYPE e070c, ls_e070m TYPE e070m, lv_sel_e070m TYPE trboolean VALUE ' ', l_send_save_message TYPE trboolean. MOVE-CORRESPONDING header TO ls_e070. MOVE-CORRESPONDING header TO ls_e07t. MOVE-CORRESPONDING header TO ls_e070c. IF s_trgt-low IS INITIAL. ls_e070-tarsystem = '/XXX/'. ELSE. ls_e070-tarsystem = s_trgt-low. ENDIF. * DATA lr_target_system TYPE RANGE OF e070-tarsystem. * SELECT sign opti low high * INTO TABLE lr_target_system * FROM tvarvc WHERE name EQ 'ZTARGET_SYSTEM'. * SELECT SINGLE low * INTO ls_e070-tarsystem * FROM tvarvc WHERE name EQ 'ZTARGET_SYSTEM'. IF ls_e070-tarsystem IS INITIAL. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'STVARV tablosunda hedef sistem oluşmadı' i_msgv2 = 'ZTARGET_SYSTEM parametresini elle oluşturun.' ). RETURN. ENDIF. DATA trkorr TYPE trkorr. trkorr = r_request. CALL FUNCTION 'TRINT_UPDATE_COMM_HEADER' EXPORTING wi_e070 = ls_e070 wi_e07t = ls_e07t wi_e070c = ls_e070c is_e070m = ls_e070m wi_sel_e070 = 'X' wi_sel_e07t = 'X' wi_sel_e070c = ' ' iv_sel_e070m = lv_sel_e070m EXCEPTIONS OTHERS = 1. * CALL FUNCTION 'TRINT_UPDATE_COMM' * EXPORTING * wi_trkorr = trkorr * wi_e070 = ls_e070 * IMPORTING * we_e070 = ls_e070. IF sy-subrc <> 0. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'Hedef sistem bulunamadı.' ). ENDIF. ENDMETHOD. "toc_olustur METHOD request_sorgula. SELECT e71~trkorr e70~strkorr e7t~as4text FROM e071 AS e71 INNER JOIN e070 AS e70 ON e71~trkorr = e70~trkorr LEFT JOIN e07t AS e7t ON e7t~trkorr = e70~trkorr AND e7t~langu = sy-langu INTO TABLE me->gt_e071 WHERE e70~strkorr IN s_trtt. IF me->gt_e071[] IS INITIAL. SELECT e71~trkorr e70~strkorr e7t~as4text FROM e071 AS e71 INNER JOIN e070 AS e70 ON e71~trkorr = e70~trkorr INNER JOIN e07t AS e7t ON e7t~trkorr = e70~trkorr AND e7t~langu = sy-langu INTO TABLE me->gt_e071 WHERE e70~trkorr IN s_trtt. IF me->gt_e071[] IS INITIAL. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'Veri bulunamadı'). ENDIF. ENDIF. SORT me->gt_e071[] BY trkorr. DELETE ADJACENT DUPLICATES FROM me->gt_e071 COMPARING trkorr. ENDMETHOD. "request_sorgula METHOD kontrol_et. READ TABLE me->gt_message WITH KEY msgty = 'E' TRANSPORTING NO FIELDS. IF sy-subrc <> 0. r_continuar = 'X'. ENDIF. ENDMETHOD. "kontrol_et METHOD tasklar_dahil_et. CHECK lo_report->kontrol_et( ) EQ 'X'. CALL FUNCTION 'TR_COPY_COMM' EXPORTING wi_dialog = 'X' wi_trkorr_from = i_req_task wi_trkorr_to = i_req_dest wi_without_documentation = 'X' EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'Taskları eklerken hata' ). ELSE. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'S' i_msgno = '001' i_msgv1 = 'Tasklar başarıyla eklendi.' ). ENDIF. ENDMETHOD. "tasklar_dahil_et METHOD release_et. DATA lv_release_et TYPE abap_bool. * " Tamamlandıysa requesti release et IF chk_lib EQ abap_true. lv_release_et = abap_false. ELSE. lv_release_et = abap_true. ENDIF. CHECK lo_report->kontrol_et( ) EQ 'X'. CALL FUNCTION 'TRINT_RELEASE_REQUEST' EXPORTING iv_trkorr = i_request iv_dialog = 'X' iv_as_background_job = '' iv_success_message = 'X' iv_without_objects_check = 'X' iv_without_docu = 'X' iv_without_locking = 'X' iv_display_export_log = 'X' iv_ignore_warnings = ' ' iv_simulation = lv_release_et EXCEPTIONS cts_initialization_failure = 1 enqueue_failed = 2 no_authorization = 3 invalid_request = 4 request_already_released = 5 repeat_too_early = 6 object_lock_error = 7 object_check_error = 8 docu_missing = 9 db_access_error = 10 action_aborted_by_user = 11 export_failed = 12 execute_objects_check = 13 release_in_bg_mode = 14 release_in_bg_mode_w_objchk = 15 error_in_export_methods = 16 object_lang_error = 17 OTHERS = 18. IF sy-subrc <> 0. me->mesaj_ekle( EXPORTING i_msgid = sy-msgid i_msgty = sy-msgty i_msgno = sy-msgno i_msgv1 = sy-msgv1 i_msgv2 = sy-msgv2 i_msgv3 = sy-msgv3 i_msgv4 = sy-msgv4 ). ENDIF. * CALL FUNCTION 'TR_RELEASE_REQUEST' * EXPORTING * iv_trkorr = i_request * iv_dialog = '' * iv_as_background_job = 'X' * iv_success_message = 'X' * EXCEPTIONS * OTHERS = 0. IF NOT lo_report->kontrol_et( ). me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'E' i_msgno = '001' i_msgv1 = 'Requesti release ederken hata oluştu.' ). ELSE. me->mesaj_ekle( EXPORTING i_msgid = '00' i_msgty = 'S' i_msgno = '001' i_msgv1 = 'Request release edildi.' ). ENDIF. ENDMETHOD. "release_et ENDCLASS. "lcl_report IMPLEMENTATION *** START-OF-SELECTION *** START-OF-SELECTION. "raporu çalıştır lcl_report=>main( ).