Easy TOC creating program

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( ).

Leave a Reply

Your email address will not be published. Required fields are marked *