Improved error message when uninstalling DDIC objects (#3562)

* Update zcl_abapgit_object_doma.clas.abap

* Uninstall DDIC

* DDIC uninstall

* Pretty print

* DOMA delete append

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2020-07-07 15:36:13 +02:00 committed by GitHub
parent e0c93b0d7c
commit 4f0a5480a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 116 additions and 190 deletions

View File

@ -38,7 +38,7 @@ ENDCLASS.
CLASS zcl_abapgit_object_doma IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
METHOD deserialize_texts.
@ -201,47 +201,13 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
* see class CL_WB_DDIC
DATA: lv_objname TYPE rsedd0-ddobjname.
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
lv_objname = ms_item-obj_name.
TRY.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'D'
no_ask_delete_append = abap_true
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'D'
* no_ask_delete_append = abap_true parameter not available in lower NW versions
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
ENDTRY.
delete_ddic( iv_objtype = 'D'
iv_no_ask_delete_append = abap_true ).
delete_longtexts( c_longtext_id_doma ).

View File

@ -157,25 +157,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'E'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DTEL,' && sy-subrc ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'E' ).
delete_longtexts( c_longtext_id_dtel ).
ENDMETHOD.

View File

@ -31,25 +31,12 @@ CLASS ZCL_ABAPGIT_OBJECT_ENQU IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'L'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, ENQU' ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'L' ).
ENDMETHOD.

View File

@ -27,25 +27,12 @@ CLASS ZCL_ABAPGIT_OBJECT_SHLP IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'H'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, SHLP' ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'H' ).
ENDMETHOD.

View File

@ -418,14 +418,14 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
AND as4vers = '0000'.
IF sy-subrc = 0 AND lv_tabclass = 'TRANSP'.
* Avoid dump in dynamic SELECT in case the table does not exist on database
" Avoid dump in dynamic SELECT in case the table does not exist on database
CALL FUNCTION 'DB_EXISTS_TABLE'
EXPORTING
tabname = lv_objname
IMPORTING
subrc = lv_subrc.
IF lv_subrc = 0.
* it cannot delete table with table without asking
" it cannot delete table with data without asking
CREATE DATA lr_data TYPE (lv_objname).
ASSIGN lr_data->* TO <lg_data>.
SELECT SINGLE * FROM (lv_objname) INTO <lg_data>.
@ -435,19 +435,8 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
ENDIF.
ENDIF.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = lv_no_ask
objname = lv_objname
objtype = 'T'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, TABL,' && sy-subrc ).
ENDIF.
delete_ddic( iv_objtype = 'T'
iv_no_ask = lv_no_ask ).
delete_longtexts( c_longtext_id_tabl ).

View File

@ -27,27 +27,11 @@ CLASS ZCL_ABAPGIT_OBJECT_TTYP IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'A'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
delete_ddic( 'A' ).
ENDMETHOD.

View File

@ -23,7 +23,7 @@ ENDCLASS.
CLASS zcl_abapgit_object_type IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_TYPE IMPLEMENTATION.
METHOD create.
@ -103,27 +103,12 @@ CLASS zcl_abapgit_object_type IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'G'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error deleting TYPE' ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'G' ).
ENDMETHOD.

View File

@ -46,6 +46,35 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
METHOD read_view.
DATA: lv_name TYPE ddobjname.
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_VIEW_GET'
EXPORTING
name = lv_name
state = 'A'
langu = mv_language
IMPORTING
dd25v_wa = es_dd25v
dd09l_wa = es_dd09l
TABLES
dd26v_tab = et_dd26v
dd27p_tab = et_dd27p
dd28j_tab = et_dd28j
dd28v_tab = et_dd28v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_VIEW_GET' ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE as4user FROM dd25l INTO rv_user
@ -61,25 +90,12 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_objname TYPE rsedd0-ddobjname.
lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'V'
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, VIEW' ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
delete_ddic( 'V' ).
ENDMETHOD.
@ -298,33 +314,4 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
iv_name = 'DD28V_TABLE' ).
ENDMETHOD.
METHOD read_view.
DATA: lv_name TYPE ddobjname.
lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_VIEW_GET'
EXPORTING
name = lv_name
state = 'A'
langu = mv_language
IMPORTING
dd25v_wa = es_dd25v
dd09l_wa = es_dd09l
TABLES
dd26v_tab = et_dd26v
dd27p_tab = et_dd27p
dd28j_tab = et_dd28j
dd28v_tab = et_dd28v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_VIEW_GET' ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -84,7 +84,13 @@ CLASS zcl_abapgit_objects_super DEFINITION PUBLIC ABSTRACT.
VALUE(rv_active) TYPE abap_bool
RAISING
zcx_abapgit_exception .
METHODS delete_ddic
IMPORTING
VALUE(iv_objtype) TYPE string
VALUE(iv_no_ask) TYPE abap_bool DEFAULT abap_true
VALUE(iv_no_ask_delete_append) TYPE abap_bool DEFAULT abap_false
RAISING
zcx_abapgit_exception .
PRIVATE SECTION.
ENDCLASS.
@ -160,6 +166,54 @@ CLASS ZCL_ABAPGIT_OBJECTS_SUPER IMPLEMENTATION.
ENDMETHOD.
METHOD delete_ddic.
DATA: lv_objname TYPE rsedd0-ddobjname,
lv_objtype TYPE rsedd0-ddobjtype.
lv_objname = ms_item-obj_name.
lv_objtype = iv_objtype.
TRY.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = iv_no_ask
objname = lv_objname
objtype = lv_objtype
no_ask_delete_append = iv_no_ask_delete_append
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
CATCH cx_sy_dyn_call_param_not_found.
" no_ask_delete_append not available in lower releases
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = iv_no_ask
objname = lv_objname
objtype = lv_objtype
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
ENDTRY.
IF sy-subrc = 5.
zcx_abapgit_exception=>raise( |Object { ms_item-obj_type } { ms_item-obj_name
} has dependencies and must be deleted manually| ).
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error deleting { ms_item-obj_type } { ms_item-obj_name }| ).
ENDIF.
ENDMETHOD.
METHOD delete_longtexts.
zcl_abapgit_factory=>get_longtexts( )->delete(