From 7b6e83f85847fa6ef776276f277d1f3f065790d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 17 Jan 2018 12:43:42 +0100 Subject: [PATCH 1/4] Use DD_MASS_ACT_C3 for DDIC activation --- src/zabapgit_objects.prog.abap | 238 ++++++++++++++++++++++++++++++--- 1 file changed, 223 insertions(+), 15 deletions(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index dd8377393..162e06637 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -31,6 +31,29 @@ CLASS lcl_objects_activation DEFINITION FINAL. IMPORTING iv_obj_name TYPE trobj_name CHANGING ct_objects TYPE dwinactiv_tab. + CLASS-METHODS use_new_activation_logic + RETURNING VALUE(rv_use_new_activation_logic) TYPE abap_bool. + + CLASS-METHODS activate_new + IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false + RAISING zcx_abapgit_exception. + + CLASS-METHODS activate_old + IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false + RAISING zcx_abapgit_exception. + + CLASS-METHODS filter_ddic_objects + EXPORTING et_ddic TYPE act_work_area + et_non_ddic TYPE act_work_area. + + CLASS-METHODS activate_ddic + IMPORTING it_ddic TYPE act_work_area + RAISING zcx_abapgit_exception. + + CLASS-METHODS activate_non_ddic + IMPORTING it_non_ddic TYPE act_work_area + RAISING zcx_abapgit_exception. + CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv. ENDCLASS. "lcl_objects_activation DEFINITION @@ -53,21 +76,14 @@ CLASS lcl_objects_activation IMPLEMENTATION. METHOD activate. - IF NOT gt_objects IS INITIAL. - CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' - EXPORTING - activate_ddic_objects = iv_ddic - with_popup = abap_true - TABLES - objects = gt_objects - EXCEPTIONS - excecution_error = 1 - cancelled = 2 - insert_into_corr_error = 3 - OTHERS = 4. - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from RS_WORKING_OBJECTS_ACTIVATE' ). - ENDIF. + IF use_new_activation_logic( ) = abap_true. + + activate_new( iv_ddic ). + + ELSE. + + activate_old( iv_ddic ). + ENDIF. ENDMETHOD. "activate @@ -155,6 +171,198 @@ CLASS lcl_objects_activation IMPLEMENTATION. ENDMETHOD. "activate + + METHOD use_new_activation_logic. + + IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_experimental_features( ) = abap_true. + + CALL FUNCTION 'FUNCTION_EXISTS' + EXPORTING + funcname = 'DD_MASS_ACT_C3' " Name of Function Module + EXCEPTIONS + function_not_exist = 1 + OTHERS = 2. + + IF sy-subrc = 0. + rv_use_new_activation_logic = abap_true. + ENDIF. + + ENDIF. + + ENDMETHOD. + + + METHOD activate_new. + + DATA: lt_ddic TYPE act_work_area, + lt_non_ddic TYPE act_work_area. + + IF gt_objects IS INITIAL. + RETURN. + ENDIF. + + zcl_abapgit_progress=>show( iv_key = 'Activate' + iv_current = '100' + iv_total = '100' + iv_text = '...' ). + + filter_ddic_objects( + IMPORTING + et_ddic = lt_ddic + et_non_ddic = lt_non_ddic ). + + IF lines( lt_ddic ) > 0 AND iv_ddic = abap_true. + + activate_ddic( lt_ddic ). + + ENDIF. + + IF lines( lt_non_ddic ) > 0. + + activate_non_ddic( lt_non_ddic ). + + ENDIF. + + ENDMETHOD. + + + METHOD activate_old. + + IF gt_objects IS NOT INITIAL. + + CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' + EXPORTING + activate_ddic_objects = iv_ddic + with_popup = abap_true + TABLES + objects = gt_objects + EXCEPTIONS + excecution_error = 1 + cancelled = 2 + insert_into_corr_error = 3 + OTHERS = 4. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from RS_WORKING_OBJECTS_ACTIVATE' ). + ENDIF. + + ENDIF. + + ENDMETHOD. + + + METHOD filter_ddic_objects. + + DATA: ls_ddic LIKE LINE OF et_ddic. + + FIELD-SYMBOLS: LIKE LINE OF gt_objects. + + CLEAR: et_ddic, et_non_ddic. + + LOOP AT gt_objects ASSIGNING . + + MOVE-CORRESPONDING TO ls_ddic. + INSERT ls_ddic INTO TABLE et_ddic. + INSERT ls_ddic INTO TABLE et_non_ddic. + + ENDLOOP. + + CALL FUNCTION 'WB_ACTIVATION_TROBJTYPE_FILTER' + EXPORTING + keep_dictionary_types = abap_true + CHANGING + trobjtypes = et_ddic. + + CALL FUNCTION 'WB_ACTIVATION_TROBJTYPE_FILTER' + EXPORTING + keep_dictionary_types = abap_false + CHANGING + trobjtypes = et_non_ddic. + + ENDMETHOD. + + + METHOD activate_ddic. + + DATA: lt_gentab TYPE STANDARD TABLE OF dcgentb, + ls_gentab LIKE LINE OF lt_gentab, + lv_rc TYPE sy-subrc, + lt_deltab TYPE STANDARD TABLE OF dcdeltb. + + FIELD-SYMBOLS: LIKE LINE OF it_ddic. + + LOOP AT it_ddic ASSIGNING . + + ls_gentab-name = -obj_name. + ls_gentab-type = -object. + INSERT ls_gentab INTO TABLE lt_gentab. + + ENDLOOP. + + IF lt_gentab IS NOT INITIAL. + + CALL FUNCTION 'DD_MASS_ACT_C3' + EXPORTING + ddmode = 'C' + medium = space + write_log = space + log_head_tail = space + t_on = space + IMPORTING + act_rc = lv_rc + TABLES + gentab = lt_gentab + deltab = lt_deltab + EXCEPTIONS + access_failure = 1 + no_objects = 2 + locked = 3 + internal_error = 4 + OTHERS = 5. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from DD_MASS_ACT_C3' ). + ENDIF. + + ENDIF. + + ENDMETHOD. + + + METHOD activate_non_ddic. + + DATA: lt_non_ddic_objects LIKE gt_objects, + ls_non_ddic_object LIKE LINE OF lt_non_ddic_objects. + + FIELD-SYMBOLS: LIKE LINE OF it_non_ddic. + + LOOP AT it_non_ddic ASSIGNING . + + MOVE-CORRESPONDING TO ls_non_ddic_object. + INSERT ls_non_ddic_object INTO TABLE lt_non_ddic_objects. + + ENDLOOP. + + IF lt_non_ddic_objects IS NOT INITIAL. + + CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' + EXPORTING + with_popup = abap_true + TABLES + objects = lt_non_ddic_objects + EXCEPTIONS + excecution_error = 1 + cancelled = 2 + insert_into_corr_error = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from RS_WORKING_OBJECTS_ACTIVATE' ). + ENDIF. + + ENDIF. + + ENDMETHOD. + ENDCLASS. "lcl_objects_activation IMPLEMENTATION "Null Object Pattern From 82ad709a639b4c1aed16e51c942771c12ca28cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 17 Jan 2018 12:58:26 +0000 Subject: [PATCH 2/4] Remove filter logic -> not necessary Own filter logic for DDIC/non-DDIC is not necessary because in abapGit we have already the distinction --- src/zabapgit_objects.prog.abap | 85 +++++++++------------------------- 1 file changed, 21 insertions(+), 64 deletions(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 162e06637..5519ef8a4 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -42,17 +42,11 @@ CLASS lcl_objects_activation DEFINITION FINAL. IMPORTING iv_ddic TYPE abap_bool DEFAULT abap_false RAISING zcx_abapgit_exception. - CLASS-METHODS filter_ddic_objects - EXPORTING et_ddic TYPE act_work_area - et_non_ddic TYPE act_work_area. - CLASS-METHODS activate_ddic - IMPORTING it_ddic TYPE act_work_area - RAISING zcx_abapgit_exception. + RAISING zcx_abapgit_exception. CLASS-METHODS activate_non_ddic - IMPORTING it_non_ddic TYPE act_work_area - RAISING zcx_abapgit_exception. + RAISING zcx_abapgit_exception. CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv. @@ -194,32 +188,27 @@ CLASS lcl_objects_activation IMPLEMENTATION. METHOD activate_new. - DATA: lt_ddic TYPE act_work_area, - lt_non_ddic TYPE act_work_area. - IF gt_objects IS INITIAL. RETURN. ENDIF. - zcl_abapgit_progress=>show( iv_key = 'Activate' - iv_current = '100' - iv_total = '100' - iv_text = '...' ). + IF iv_ddic = abap_true. - filter_ddic_objects( - IMPORTING - et_ddic = lt_ddic - et_non_ddic = lt_non_ddic ). + zcl_abapgit_progress=>show( iv_key = 'Activating DDIC' + iv_current = '98' + iv_total = '100' + iv_text = '...' ). - IF lines( lt_ddic ) > 0 AND iv_ddic = abap_true. + activate_ddic( ). - activate_ddic( lt_ddic ). + ELSE. - ENDIF. + zcl_abapgit_progress=>show( iv_key = 'Activating non DDIC' + iv_current = '98' + iv_total = '100' + iv_text = '...' ). - IF lines( lt_non_ddic ) > 0. - - activate_non_ddic( lt_non_ddic ). + activate_non_ddic( ). ENDIF. @@ -249,38 +238,6 @@ CLASS lcl_objects_activation IMPLEMENTATION. ENDMETHOD. - - METHOD filter_ddic_objects. - - DATA: ls_ddic LIKE LINE OF et_ddic. - - FIELD-SYMBOLS: LIKE LINE OF gt_objects. - - CLEAR: et_ddic, et_non_ddic. - - LOOP AT gt_objects ASSIGNING . - - MOVE-CORRESPONDING TO ls_ddic. - INSERT ls_ddic INTO TABLE et_ddic. - INSERT ls_ddic INTO TABLE et_non_ddic. - - ENDLOOP. - - CALL FUNCTION 'WB_ACTIVATION_TROBJTYPE_FILTER' - EXPORTING - keep_dictionary_types = abap_true - CHANGING - trobjtypes = et_ddic. - - CALL FUNCTION 'WB_ACTIVATION_TROBJTYPE_FILTER' - EXPORTING - keep_dictionary_types = abap_false - CHANGING - trobjtypes = et_non_ddic. - - ENDMETHOD. - - METHOD activate_ddic. DATA: lt_gentab TYPE STANDARD TABLE OF dcgentb, @@ -288,12 +245,12 @@ CLASS lcl_objects_activation IMPLEMENTATION. lv_rc TYPE sy-subrc, lt_deltab TYPE STANDARD TABLE OF dcdeltb. - FIELD-SYMBOLS: LIKE LINE OF it_ddic. + FIELD-SYMBOLS: LIKE LINE OF gt_objects. - LOOP AT it_ddic ASSIGNING . + LOOP AT gt_objects ASSIGNING . - ls_gentab-name = -obj_name. - ls_gentab-type = -object. + ls_gentab-name = -obj_name. + ls_gentab-type = -object. INSERT ls_gentab INTO TABLE lt_gentab. ENDLOOP. @@ -333,11 +290,11 @@ CLASS lcl_objects_activation IMPLEMENTATION. DATA: lt_non_ddic_objects LIKE gt_objects, ls_non_ddic_object LIKE LINE OF lt_non_ddic_objects. - FIELD-SYMBOLS: LIKE LINE OF it_non_ddic. + FIELD-SYMBOLS: LIKE LINE OF gt_objects. - LOOP AT it_non_ddic ASSIGNING . + LOOP AT gt_objects ASSIGNING . - MOVE-CORRESPONDING TO ls_non_ddic_object. + MOVE-CORRESPONDING TO ls_non_ddic_object. INSERT ls_non_ddic_object INTO TABLE lt_non_ddic_objects. ENDLOOP. From 1ea86107d42c2c7aacf909378b97339af2af54ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 17 Jan 2018 13:23:25 +0000 Subject: [PATCH 3/4] delete activate_non_ddic --- src/zabapgit_objects.prog.abap | 41 ++-------------------------------- 1 file changed, 2 insertions(+), 39 deletions(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 5519ef8a4..538b44e69 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -45,8 +45,7 @@ CLASS lcl_objects_activation DEFINITION FINAL. CLASS-METHODS activate_ddic RAISING zcx_abapgit_exception. - CLASS-METHODS activate_non_ddic - RAISING zcx_abapgit_exception. + CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv. @@ -208,7 +207,7 @@ CLASS lcl_objects_activation IMPLEMENTATION. iv_total = '100' iv_text = '...' ). - activate_non_ddic( ). + activate_old( ). ENDIF. @@ -284,42 +283,6 @@ CLASS lcl_objects_activation IMPLEMENTATION. ENDMETHOD. - - METHOD activate_non_ddic. - - DATA: lt_non_ddic_objects LIKE gt_objects, - ls_non_ddic_object LIKE LINE OF lt_non_ddic_objects. - - FIELD-SYMBOLS: LIKE LINE OF gt_objects. - - LOOP AT gt_objects ASSIGNING . - - MOVE-CORRESPONDING TO ls_non_ddic_object. - INSERT ls_non_ddic_object INTO TABLE lt_non_ddic_objects. - - ENDLOOP. - - IF lt_non_ddic_objects IS NOT INITIAL. - - CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' - EXPORTING - with_popup = abap_true - TABLES - objects = lt_non_ddic_objects - EXCEPTIONS - excecution_error = 1 - cancelled = 2 - insert_into_corr_error = 3 - OTHERS = 4. - - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( 'error from RS_WORKING_OBJECTS_ACTIVATE' ). - ENDIF. - - ENDIF. - - ENDMETHOD. - ENDCLASS. "lcl_objects_activation IMPLEMENTATION "Null Object Pattern From 11b7b9ed8fd76b04c171e66198fbc4741bbf6528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 17 Jan 2018 15:02:21 +0000 Subject: [PATCH 4/4] log and show activation errors --- src/zabapgit_objects.prog.abap | 70 ++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 538b44e69..29ffa0260 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -45,7 +45,9 @@ CLASS lcl_objects_activation DEFINITION FINAL. CLASS-METHODS activate_ddic RAISING zcx_abapgit_exception. - + CLASS-METHODS show_activation_errors + IMPORTING iv_logname TYPE ddmass-logname + RAISING zcx_abapgit_exception. CLASS-DATA: gt_objects TYPE TABLE OF dwinactiv. @@ -239,10 +241,12 @@ CLASS lcl_objects_activation IMPLEMENTATION. METHOD activate_ddic. - DATA: lt_gentab TYPE STANDARD TABLE OF dcgentb, - ls_gentab LIKE LINE OF lt_gentab, - lv_rc TYPE sy-subrc, - lt_deltab TYPE STANDARD TABLE OF dcdeltb. + DATA: lt_gentab TYPE STANDARD TABLE OF dcgentb, + ls_gentab LIKE LINE OF lt_gentab, + lv_rc TYPE sy-subrc, + lt_deltab TYPE STANDARD TABLE OF dcdeltb, + action_tab TYPE dctablrestab, + lv_logname TYPE ddmass-logname. FIELD-SYMBOLS: LIKE LINE OF gt_objects. @@ -256,18 +260,24 @@ CLASS lcl_objects_activation IMPLEMENTATION. IF lt_gentab IS NOT INITIAL. + lv_logname = |ABAPGIT_{ sy-datum }_{ sy-uzeit }|. + CALL FUNCTION 'DD_MASS_ACT_C3' EXPORTING ddmode = 'C' - medium = space - write_log = space - log_head_tail = space + medium = 'T' + device = 'T' + logname = lv_logname + write_log = abap_true + log_head_tail = abap_true t_on = space + prid = 1 IMPORTING act_rc = lv_rc TABLES gentab = lt_gentab deltab = lt_deltab + cnvtab = action_tab EXCEPTIONS access_failure = 1 no_objects = 2 @@ -279,10 +289,54 @@ CLASS lcl_objects_activation IMPLEMENTATION. zcx_abapgit_exception=>raise( 'error from DD_MASS_ACT_C3' ). ENDIF. + IF lv_rc > 0. + + show_activation_errors( lv_logname ). + + ENDIF. + ENDIF. ENDMETHOD. + + METHOD show_activation_errors. + + DATA: lt_lines TYPE STANDARD TABLE OF trlog, + lv_logname_db TYPE ddprh-protname, + lo_log TYPE REF TO zcl_abapgit_log. + + FIELD-SYMBOLS: LIKE LINE OF lt_lines. + + lv_logname_db = iv_logname. + + CALL FUNCTION 'TR_READ_LOG' + EXPORTING + iv_log_type = 'DB' + iv_logname_db = lv_logname_db + TABLES + et_lines = lt_lines + EXCEPTIONS + invalid_input = 1 + access_error = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( 'error from TR_READ_LOG' ). + ENDIF. + + DELETE lt_lines WHERE severity <> 'E'. + + CREATE OBJECT lo_log. + + LOOP AT lt_lines ASSIGNING . + lo_log->add( -line ). + ENDLOOP. + + lo_log->show( ). + + ENDMETHOD. + ENDCLASS. "lcl_objects_activation IMPLEMENTATION "Null Object Pattern