From f6cd2e12bd6a64abdc2640ff2a6008c3fe51de39 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Mon, 2 Nov 2020 03:40:33 -0500 Subject: [PATCH] Fix DDIC activation issues (#4111) * Fix DDIC activation issues - Avoid double activation of DDIC objects in case of "LATE" processing - Derive DDIC id for XINX and MCID (same as for INDX) Closes #4103 * Lint Co-authored-by: Lars Hvam --- .../zcl_abapgit_objects_activation.clas.abap | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/objects/zcl_abapgit_objects_activation.clas.abap b/src/objects/zcl_abapgit_objects_activation.clas.abap index e1a4fb365..56d575c3e 100644 --- a/src/objects/zcl_abapgit_objects_activation.clas.abap +++ b/src/objects/zcl_abapgit_objects_activation.clas.abap @@ -52,11 +52,16 @@ CLASS zcl_abapgit_objects_activation DEFINITION !iv_logname TYPE ddmass-logname RAISING zcx_abapgit_exception . + CLASS-METHODS is_ddic_type + IMPORTING + !iv_obj_type TYPE trobjtype + RETURNING + VALUE(rv_result) TYPE abap_bool . ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION. +CLASS zcl_abapgit_objects_activation IMPLEMENTATION. METHOD activate. @@ -85,10 +90,14 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION. LOOP AT gt_objects ASSIGNING . + " Filter types supported by mass activation + IF is_ddic_type( -object ) = abap_false. + CONTINUE. + ENDIF. ls_gentab-tabix = sy-tabix. ls_gentab-type = -object. ls_gentab-name = -obj_name. - IF ls_gentab-type = 'INDX'. + IF ls_gentab-type = 'INDX' OR ls_gentab-type = 'XINX' OR ls_gentab-type = 'MCID'. CALL FUNCTION 'DD_E071_TO_DD' EXPORTING object = -object @@ -136,6 +145,12 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION. show_activation_errors( lv_logname ). ENDIF. + " Remove objects from activation queue to avoid double activation in activate_old + LOOP AT lt_gentab INTO ls_gentab. + DELETE gt_objects WHERE object = ls_gentab-type AND obj_name = ls_gentab-name. + ENDLOOP. + DELETE gt_objects WHERE object = 'INDX' OR object = 'XINX' OR object = 'MCID'. + ENDIF. ENDMETHOD. @@ -259,6 +274,36 @@ CLASS ZCL_ABAPGIT_OBJECTS_ACTIVATION IMPLEMENTATION. ENDMETHOD. + METHOD is_ddic_type. + + " Determine if object can be handled by mass activation (see RADMASUTC form ma_tab_check) + + CONSTANTS: + lc_domain TYPE c LENGTH 9 VALUE 'DOMA DOMD', + lc_types TYPE c LENGTH 50 VALUE 'DTEL DTED TABL TABD SQLT SQLD TTYP TTYD VIEW VIED', + lc_technset TYPE c LENGTH 24 VALUE 'TABT VIET SQTT INDX XINX', + lc_f4_objects TYPE c LENGTH 35 VALUE 'SHLP SHLD MCOB MCOD MACO MACD MCID', + lc_enqueue TYPE c LENGTH 9 VALUE 'ENQU ENQD', + lc_sqsc TYPE c LENGTH 4 VALUE 'SQSC', + lc_stob TYPE c LENGTH 4 VALUE 'STOB', + lc_ntab TYPE c LENGTH 14 VALUE 'NTTT NTTB NTDT', + lc_ddls TYPE c LENGTH 4 VALUE 'DDLS', + lc_switches TYPE c LENGTH 24 VALUE 'SF01 SF02 SFSW SFBS SFBF', + lc_enhd TYPE c LENGTH 4 VALUE 'ENHD'. + + rv_result = abap_true. + IF lc_domain NS iv_obj_type AND lc_types NS iv_obj_type AND + lc_technset NS iv_obj_type AND lc_f4_objects NS iv_obj_type AND + lc_enqueue NS iv_obj_type AND lc_sqsc NS iv_obj_type AND + lc_stob NS iv_obj_type AND lc_ntab NS iv_obj_type AND + lc_ddls NS iv_obj_type AND + lc_switches NS iv_obj_type AND iv_obj_type <> lc_enhd. + rv_result = abap_false. + ENDIF. + + ENDMETHOD. + + METHOD show_activation_errors. DATA: lt_lines TYPE STANDARD TABLE OF trlog,