SAP ABAP - Merge Many Transport Request to a single Transport Request

*&---------------------------------------------------------------------*
*& Report ZABAP_MERGE_REQUEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zabap_merge_request.
TABLES : trheader.
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS : p_treq TYPE trheader-trkorr.
SELECT-OPTIONS : s_sreq FOR trheader-trkorr.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
DATA :
we_e070 LIKE e070,
we_e070_src LIKE e070,
we_e07t LIKE e07t,
we_e070c LIKE e070c,
es_e070m LIKE e070m,
we_e07t_doesnt_exist LIKE trpari-w_e07t,
we_e070c_doesnt_exist LIKE trpari-w_e070c,
ev_e070m_doesnt_exist LIKE trpari-w_e070m,
wt_e071k_str TYPE e071k_strtyp,
we_e070create TYPE e070create,
lv_msg TYPE char255,
lv_Ans TYPE char5.
CALL FUNCTION 'TR_READ_COMM'
EXPORTING
wi_trkorr = p_treq
wi_dialog = ''
wi_langu = sy-langu
wi_sel_e070 = 'X'
wi_sel_e071 = 'X'
wi_sel_e071k = 'X'
iv_sel_e071kf = 'X'
wi_sel_e07t = 'X'
wi_sel_e070c = 'X'
iv_sel_e070m = 'X'
iv_sel_e070a = 'X'
iv_sel_e070create = 'X'
IMPORTING
we_e070 = we_e070
we_e07t = we_e07t
we_e070c = we_e070c
es_e070m = es_e070m
we_e07t_doesnt_exist = we_e07t_doesnt_exist
we_e070c_doesnt_exist = we_e070c_doesnt_exist
ev_e070m_doesnt_exist = ev_e070m_doesnt_exist
wt_e071k_str = wt_e071k_str
we_e070create = we_e070create
EXCEPTIONS
not_exist_e070 = 1
no_authorization = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
SELECT * FROM e070
INTO TABLE @DATA(lt_e070)
WHERE trkorr IN @s_sreq.
WRITE : lines( lt_e070 ) , ` adet request merge edilecek`.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Uyarı'
text_question = |{ lines( lt_e070 ) } adet request merge edilecek ve silinecek|
text_button_1 = 'Evet'(001)
text_button_2 = 'Hayır'(002)
IMPORTING
answer = lv_ans
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
IF lv_ans NE '1'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
LOOP AT lt_e070 REFERENCE INTO DATA(lr_e070).
cl_progress_indicator=>progress_indicate(
i_text = |Processing: { sy-tabix }/{ lines( lt_e070 ) }|
i_output_immediately = abap_true ).
CALL FUNCTION 'TR_READ_COMM'
EXPORTING
wi_trkorr = lr_e070->trkorr
wi_dialog = ''
wi_langu = sy-langu
wi_sel_e070 = 'X'
IMPORTING
we_e070 = we_e070_src
EXCEPTIONS
not_exist_e070 = 1
no_authorization = 2
OTHERS = 3.
IF we_e070_src-as4user NE we_e070-as4user.
CALL FUNCTION 'TR_CHANGE_USERNAME'
EXPORTING
wi_dialog = ''
wi_trkorr = lr_e070->trkorr
wi_user = we_e070-as4user
EXCEPTIONS
already_released = 1
e070_update_error = 2
file_access_error = 3
not_exist_e070 = 4
user_does_not_exist = 5
tr_enqueue_failed = 6
no_authorization = 7
wrong_client = 8
unallowed_user = 9
OTHERS = 10.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO lv_msg.
WRITE / : |{ sy-msgty } { sy-msgid } { sy-msgno } { lv_msg }|.
ELSE.
PERFORM merge_transports USING p_treq lr_e070->trkorr.
ENDIF.
ELSE.
PERFORM merge_transports USING p_treq lr_e070->trkorr.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDLOOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form merge_transports
*&---------------------------------------------------------------------*
FORM merge_transports USING pv_target_request TYPE trheader-trkorr
pv_source_Request TYPE trheader-trkorr.
DATA : ls_request_from TYPE trwbo_request,
ls_Request_to TYPE trwbo_request.
ls_request_from-h-trkorr = pv_source_Request.
ls_Request_to-h-trkorr = pv_target_request.
CALL FUNCTION 'TR_MERGE_REQUESTS'
EXPORTING
is_request_from = ls_request_from
is_request_to = ls_Request_to
iv_request_choice = ''
* IV_ALLOW_CUST_TO_WB = ' '
* IV_WITH_DIALOG = ' '
* IMPORTING
* EV_TRKORR_FROM =
* ES_REQUEST_TO =
EXCEPTIONS
illegal_from_request = 1
illegal_to_request = 2
requests_dont_match = 3
error_db_access = 4
request_locked = 5
action_aborted_by_user = 6
OTHERS = 7.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO lv_msg.
WRITE / : |{ sy-msgty } { sy-msgid } { sy-msgno } { lv_msg }|.
else.
WRITE / : |{ pv_source_Request } merge edildi |.
ENDIF.
ENDFORM.