From d103d2fb2e83a6469db1bce887fbd4f3f77d8a6b Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Tue, 2 Nov 2021 20:58:02 +0200 Subject: [PATCH] Remove obsolete screens on PROG deserialize (#5075) * Remove obsolete screens on PROG deserialize * remove commented code * align RS_SCRP_DELETE params Co-authored-by: Lars Hvam --- .../zcl_abapgit_objects_program.clas.abap | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/objects/zcl_abapgit_objects_program.clas.abap b/src/objects/zcl_abapgit_objects_program.clas.abap index b9467ad96..ee30065f5 100644 --- a/src/objects/zcl_abapgit_objects_program.clas.abap +++ b/src/objects/zcl_abapgit_objects_program.clas.abap @@ -195,7 +195,7 @@ ENDCLASS. -CLASS zcl_abapgit_objects_program IMPLEMENTATION. +CLASS ZCL_ABAPGIT_OBJECTS_PROGRAM IMPLEMENTATION. METHOD add_tpool. @@ -333,14 +333,39 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. CONSTANTS lc_rpyty_force_off TYPE c LENGTH 1 VALUE '/'. DATA: lv_name TYPE dwinactiv-obj_name, + lt_d020s_to_delete TYPE TABLE OF d020s, + ls_d020s LIKE LINE OF lt_d020s_to_delete, ls_dynpro LIKE LINE OF it_dynpros. FIELD-SYMBOLS: TYPE rpy_dyfatc. + " Delete DYNPROs which are not in the list + CALL FUNCTION 'RS_SCREEN_LIST' + EXPORTING + dynnr = '' + progname = ms_item-obj_name + TABLES + dynpros = lt_d020s_to_delete + EXCEPTIONS + not_found = 1 + OTHERS = 2. + IF sy-subrc = 2. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + SORT lt_d020s_to_delete BY dnum ASCENDING. + * ls_dynpro is changed by the function module, a field-symbol will cause * the program to dump since it_dynpros cannot be changed LOOP AT it_dynpros INTO ls_dynpro. + READ TABLE lt_d020s_to_delete WITH KEY dnum = ls_dynpro-header-screen + TRANSPORTING NO FIELDS + BINARY SEARCH. + IF sy-subrc = 0. + DELETE lt_d020s_to_delete INDEX sy-tabix. + ENDIF. + " todo: kept for compatibility, remove after grace period #3680 ls_dynpro-flow_logic = uncondense_flow( it_flow = ls_dynpro-flow_logic @@ -411,6 +436,27 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION. ENDLOOP. + " Delete obsolete screens + LOOP AT lt_d020s_to_delete INTO ls_d020s. + + CALL FUNCTION 'RS_SCRP_DELETE' + EXPORTING + dynnr = ls_d020s-dnum + progname = ms_item-obj_name + with_popup = abap_false + EXCEPTIONS + enqueued_by_user = 1 + enqueue_system_failure = 2 + not_executed = 3 + not_exists = 4 + no_modify_permission = 5 + popup_canceled = 6. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ENDLOOP. + ENDMETHOD.