SAP ABAP - Create TOC from Transport Requests
Updated: Aug 29, 2022
TR:

EN:

*&---------------------------------------------------------------------*
*& Report Z_ABAP_CREATE_TOC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_abap_create_toc.
TABLES : trheader.
DATA : gv_toc_text TYPE trheader-as4text.
DATA : gt_task_req_list TYPE TABLE OF trheader-trkorr.
DATA : gv_toc_no TYPE trheader-trkorr.
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS : s_req FOR trheader-trkorr.
SELECTION-SCREEN SKIP.
PARAMETERS : pc_tocn AS CHECKBOX DEFAULT 'X',
pc_rel AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN SKIP.
PARAMETERS : p_toc_n TYPE trheader-as4text,
p_target TYPE trheader-tarsystem OBLIGATORY DEFAULT 'KRQ'.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
CLEAR : gv_toc_text,gt_task_req_list[],gv_toc_no.
IF pc_tocn = 'X'.
IF s_req-high IS NOT INITIAL OR
lines( s_req[] ) > 1 .
MESSAGE 'Tek bir request giriniz' TYPE 'I'.
ELSE.
PERFORM create_toc.
ENDIF.
ELSE.
IF p_toc_n IS INITIAL.
MESSAGE 'Request Metni Giriniz.' TYPE 'I'.
ELSEIF p_toc_n(4) NE 'TOC:'.
MESSAGE 'Request Metni "TOC:" ile başlamalı.' TYPE 'I'.
ELSE.
gv_toc_text = p_toc_n.
PERFORM create_toc.
ENDIF.
ENDIF.
IF pc_rel = 'X' AND gv_toc_no IS NOT INITIAL.
PERFORM release_toc.
ENDIF.
*&---------------------------------------------------------------------*
*& Form create_toc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM create_toc .
SELECT * FROM e070
INTO TABLE @DATA(lt_e070)
WHERE trkorr IN @s_req.
IF sy-subrc = 0.
SELECT * FROM e070
INTO TABLE @DATA(lt_e070_tasks)
FOR ALL ENTRIES IN @lt_e070
WHERE strkorr EQ @lt_e070-trkorr.
SELECT * FROM e07t
INTO TABLE @DATA(lt_e07t)
FOR ALL ENTRIES IN @lt_e070
WHERE trkorr EQ @lt_e070-trkorr
AND langu EQ @sy-langu.
ENDIF.
LOOP AT lt_e070 REFERENCE INTO DATA(lr_e070).
IF lr_e070->strkorr IS NOT INITIAL.
APPEND lr_e070->trkorr TO gt_task_req_list.
ELSE.
IF pc_tocn = 'X' AND gv_toc_text IS INITIAL.
IF line_exists( lt_e07t[ trkorr = lr_e070->trkorr ] ).
gv_toc_text = 'TOC:' && lt_e07t[ trkorr = lr_e070->trkorr ]-as4text.
ENDIF.
ENDIF.
LOOP AT lt_e070_tasks REFERENCE INTO DATA(lr_e070_task)
WHERE strkorr = lr_e070->trkorr.
APPEND lr_e070_task->trkorr TO gt_task_req_list.
ENDLOOP.
ENDIF.
ENDLOOP.
DATA : ls_toc_req TYPE trwbo_request_header.
CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
EXPORTING
iv_type = 'T'
iv_text = gv_toc_text
iv_owner = sy-uname
iv_target = p_target
iv_with_badi_check = 'X'
IMPORTING
es_request_header = ls_toc_req
EXCEPTIONS
insert_failed = 1
enqueue_failed = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
gv_toc_no = ls_toc_req-trkorr.
LOOP AT gt_task_req_list REFERENCE INTO DATA(lr_task_req).
CALL FUNCTION 'TR_COPY_COMM'
EXPORTING
wi_dialog = ''
wi_trkorr_from = lr_task_req->*
wi_trkorr_to = ls_toc_req-trkorr
wi_without_documentation = 'X'
EXCEPTIONS
db_access_error = 1
trkorr_from_not_exist = 2
trkorr_to_is_repair = 3
trkorr_to_locked = 4
trkorr_to_not_exist = 5
trkorr_to_released = 6
user_not_owner = 7
no_authorization = 8
wrong_client = 9
wrong_category = 10
object_not_patchable = 11
OTHERS = 12.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
ENDLOOP.
MESSAGE `TOC : ` && gv_toc_no && ` yaratıldı.` TYPE 'I'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form release_toc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM release_toc .
CALL FUNCTION 'TR_RELEASE_REQUEST'
EXPORTING
iv_trkorr = gv_toc_no
iv_dialog = ''
iv_display_export_log = 'X'
iv_without_locking = 'X'
EXCEPTIONS
cts_initialization_failure = 1
enqueue_failed = 2
no_authorization = 3
invalid_request = 4
request_already_released = 5
repeat_too_early = 6
error_in_export_methods = 7
object_check_error = 8
docu_missing = 9
db_access_error = 10
action_aborted_by_user = 11
export_failed = 12
OTHERS = 13.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
MESSAGE `TOC : ` && gv_toc_no && ` release edildi.` TYPE 'I'.
CALL FUNCTION 'TMS_MGR_READ_TRANSPORT_QUEUE'
EXPORTING
iv_system = p_target
iv_collect_data = space
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE 'E'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA lt_columns TYPE tmsiqcols.
lt_columns[] = VALUE #( ( field = 'BUFPOS'
sortdes = 'X' )
).
CALL FUNCTION 'TMS_UIQ_INT_SORT_QUEUE'
EXPORTING
iv_sort_field = 'BUFPOS'
iv_sort_desc = 'X'
it_columns = lt_columns.
* display import queue
CALL FUNCTION 'TMS_UIQ_IMPORT_QUEUE_DISPLAY'
EXPORTING
iv_system = p_target
EXCEPTIONS
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE 'E'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
Is this post helpful or not?
- Helpful
- Not good, useless