diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index dd8377393..29ffa0260 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -31,6 +31,24 @@ 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 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. ENDCLASS. "lcl_objects_activation DEFINITION @@ -53,21 +71,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 +166,177 @@ 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. + + IF gt_objects IS INITIAL. + RETURN. + ENDIF. + + IF iv_ddic = abap_true. + + zcl_abapgit_progress=>show( iv_key = 'Activating DDIC' + iv_current = '98' + iv_total = '100' + iv_text = '...' ). + + activate_ddic( ). + + ELSE. + + zcl_abapgit_progress=>show( iv_key = 'Activating non DDIC' + iv_current = '98' + iv_total = '100' + iv_text = '...' ). + + activate_old( ). + + 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 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, + action_tab TYPE dctablrestab, + lv_logname TYPE ddmass-logname. + + FIELD-SYMBOLS: LIKE LINE OF gt_objects. + + LOOP AT gt_objects ASSIGNING . + + ls_gentab-name = -obj_name. + ls_gentab-type = -object. + INSERT ls_gentab INTO TABLE lt_gentab. + + ENDLOOP. + + IF lt_gentab IS NOT INITIAL. + + lv_logname = |ABAPGIT_{ sy-datum }_{ sy-uzeit }|. + + CALL FUNCTION 'DD_MASS_ACT_C3' + EXPORTING + ddmode = 'C' + 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 + locked = 3 + internal_error = 4 + OTHERS = 5. + + IF sy-subrc <> 0. + 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