Merge pull request #1151 from christianguenter2/exp_DD_MASS_ACT_C3

Use DD_MASS_ACT_C3 for DDIC activation
This commit is contained in:
Lars Hvam 2018-01-17 19:35:21 +01:00 committed by GitHub
commit 75bdf51fd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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: <ls_object> LIKE LINE OF gt_objects.
LOOP AT gt_objects ASSIGNING <ls_object>.
ls_gentab-name = <ls_object>-obj_name.
ls_gentab-type = <ls_object>-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: <ls_line> 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 <ls_line>.
lo_log->add( <ls_line>-line ).
ENDLOOP.
lo_log->show( ).
ENDMETHOD.
ENDCLASS. "lcl_objects_activation IMPLEMENTATION
"Null Object Pattern