From 9e0161f097042c92f7d6ffa5493a8f2641ce2f7b Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Tue, 2 Oct 2018 20:56:22 +0200 Subject: [PATCH] SUSO: Downport delete to 702 --- src/objects/zcl_abapgit_object_suso.clas.abap | 411 ++++++++++-------- 1 file changed, 228 insertions(+), 183 deletions(-) diff --git a/src/objects/zcl_abapgit_object_suso.clas.abap b/src/objects/zcl_abapgit_object_suso.clas.abap index e8ecab15b..3038f1daa 100644 --- a/src/objects/zcl_abapgit_object_suso.clas.abap +++ b/src/objects/zcl_abapgit_object_suso.clas.abap @@ -16,13 +16,20 @@ CLASS zcl_abapgit_object_suso DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS: delete_documentation + RAISING + zcx_abapgit_exception, + + pre_check RAISING zcx_abapgit_exception. ENDCLASS. + + CLASS zcl_abapgit_object_suso IMPLEMENTATION. + METHOD constructor. super->constructor( is_item = is_item @@ -32,18 +39,208 @@ CLASS zcl_abapgit_object_suso IMPLEMENTATION. ENDMETHOD. - METHOD zif_abapgit_object~has_changed_since. - rv_changed = abap_true. + + METHOD delete_documentation. + + DATA: + lv_docu_obj TYPE dokhl-object, + lv_dummy TYPE sy-langu. + + lv_docu_obj = mv_objectname. + + SELECT SINGLE langu + FROM dokil INTO lv_dummy + WHERE id = 'UO' "#EC CI_GENBUFF + AND object = lv_docu_obj. + + IF sy-subrc = 0. + + CALL FUNCTION 'DOKU_DELETE_ALL' + EXPORTING + doku_id = 'UO' + doku_object = lv_docu_obj + suppress_transport = space + EXCEPTIONS + header_without_text = 1 + index_without_header = 2 + no_authority_for_devclass_xxxx = 3 + no_docu_found = 4 + object_is_already_enqueued = 5 + object_is_enqueued_by_corr = 6 + techn_enqueue_problem = 7 + user_break = 8 + OTHERS = 9. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ENDIF. + ENDMETHOD. + + METHOD pre_check. + + CONSTANTS: + co_act_delete TYPE activ_auth VALUE '06'. + + DATA: + lv_act_head TYPE activ_auth, + lv_dummy TYPE string, + lo_suso TYPE REF TO object, + lv_failed TYPE abap_bool, + lv_suso_collect_in_cts TYPE i, + lv_clskey TYPE seoclskey. + + " Downport: CL_SUSO_GEN doesn't exist in 702 + lv_clskey-clsname = |CL_SUSO_GEN|. + + CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK' + EXPORTING + clskey = lv_clskey + EXCEPTIONS + not_specified = 1 + not_existing = 2 + is_interface = 3 + no_text = 4 + inconsistent = 5 + OTHERS = 6. + + IF sy-subrc = 0. + + " so these check are not executed in 702 + + CREATE OBJECT lo_suso + TYPE + ('CL_SUSO_GEN'). + + CALL METHOD lo_suso->('SUSO_LOAD_FROM_DB') + EXPORTING + id_object = mv_objectname + RECEIVING + ed_failed = lv_failed. + + IF lv_failed = abap_true. + " Object & does not exist; choose an existing object + MESSAGE s111(01) WITH mv_objectname INTO lv_dummy. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL METHOD lo_suso->('GET_SUSO_EDIT_MODE') + EXPORTING + id_object = mv_objectname + id_planed_act = co_act_delete + IMPORTING + ed_mode_head = lv_act_head. + + IF lv_act_head <> co_act_delete. + zcx_abapgit_exception=>raise( |AUTH { mv_objectname }: Delete not allowed| ). + ENDIF. + + CALL METHOD lo_suso->('SUSO_COLLECT_IN_CTS') + EXPORTING + id_object = mv_objectname + RECEIVING + ed_result = lv_suso_collect_in_cts. + + IF lv_suso_collect_in_cts IS NOT INITIAL. + zcx_abapgit_exception=>raise( |AUTH { mv_objectname }: Cannot delete| ). + ENDIF. + + ENDIF. + + ENDMETHOD. + + METHOD zif_abapgit_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. - METHOD zif_abapgit_object~get_metadata. - rs_metadata = get_metadata( ). + + METHOD zif_abapgit_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. ENDMETHOD. + + METHOD zif_abapgit_object~delete. + + " FM SUSR_DELETE_OBJECT calls the UI. Therefore we reimplement it here. + " As the class CL_SUSO_GEN isn't present in 702, we call dynamically and + " skip the pre checks on 702 system. That seems ok. + + pre_check( ). + + delete_documentation( ). + + DELETE FROM tobj WHERE objct = mv_objectname. + DELETE FROM tobjt WHERE object = mv_objectname. + DELETE FROM tactz WHERE brobj = mv_objectname. + + CALL FUNCTION 'SUPV_DELETE_OBJECT_ASSIGNMENTS' + EXPORTING + object_name = mv_objectname + all_releases = abap_true. + + CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' + EXPORTING + object = mv_objectname + type = 'SUSO' + operation = 'DELETE'. + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. +* see function group SUSA + + DATA: lv_objectname TYPE trobj_name, + ls_tobj TYPE tobj, + ls_tobjt TYPE tobjt, + ls_tobjvorflg TYPE tobjvorflg, + lt_tactz TYPE TABLE OF tactz, + lt_tobjvordat TYPE TABLE OF tobjvordat, + lt_tobjvor TYPE TABLE OF tobjvor. + + + ASSERT NOT ms_item-obj_name IS INITIAL. + + io_xml->read( EXPORTING iv_name = 'TOBJ' + CHANGING cg_data = ls_tobj ). + ls_tobj-bname = sy-uname. + io_xml->read( EXPORTING iv_name = 'TOBJT' + CHANGING cg_data = ls_tobjt ). + io_xml->read( EXPORTING iv_name = 'TOBJVORFLG' + CHANGING cg_data = ls_tobjvorflg ). + io_xml->read( EXPORTING iv_name = 'TACTZ' + CHANGING cg_data = lt_tactz ). + io_xml->read( EXPORTING iv_name = 'TOBJVORDAT' + CHANGING cg_data = lt_tobjvordat ). + io_xml->read( EXPORTING iv_name = 'TOBJVOR' + CHANGING cg_data = lt_tobjvor ). + + tadir_insert( iv_package ). + + lv_objectname = mv_objectname. + + CALL FUNCTION 'SUSR_COMMEDITCHECK' + EXPORTING + objectname = lv_objectname + transobjecttype = 'O'. + + MODIFY tobj FROM ls_tobj. "#EC CI_SUBRC + MODIFY tobjt FROM ls_tobjt. "#EC CI_SUBRC + MODIFY tobjvorflg FROM ls_tobjvorflg. "#EC CI_SUBRC + DELETE FROM tactz WHERE brobj = ms_item-obj_name. "#EC CI_SUBRC + INSERT tactz FROM TABLE lt_tactz. "#EC CI_SUBRC + DELETE FROM tobjvordat WHERE objct = ms_item-obj_name. "#EC CI_SUBRC + INSERT tobjvordat FROM TABLE lt_tobjvordat. "#EC CI_SUBRC + DELETE FROM tobjvor WHERE objct = ms_item-obj_name. "#EC CI_SUBRC + INSERT tobjvor FROM TABLE lt_tobjvor. "#EC CI_SUBRC + + ENDMETHOD. + + METHOD zif_abapgit_object~exists. DATA: lv_objct TYPE tobj-objct. @@ -55,6 +252,33 @@ CLASS zcl_abapgit_object_suso IMPLEMENTATION. ENDMETHOD. + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + + rv_is_locked = abap_false. + + ENDMETHOD. + + + METHOD zif_abapgit_object~jump. + + CALL FUNCTION 'SUSR_SHOW_OBJECT' + EXPORTING + object = mv_objectname. + + ENDMETHOD. + + METHOD zif_abapgit_object~serialize. DATA: ls_tobj TYPE tobj, @@ -109,183 +333,4 @@ CLASS zcl_abapgit_object_suso IMPLEMENTATION. iv_name = 'TOBJVOR' ). ENDMETHOD. - - METHOD zif_abapgit_object~deserialize. -* see function group SUSA - - DATA: lv_objectname TYPE trobj_name, - ls_tobj TYPE tobj, - ls_tobjt TYPE tobjt, - ls_tobjvorflg TYPE tobjvorflg, - lt_tactz TYPE TABLE OF tactz, - lt_tobjvordat TYPE TABLE OF tobjvordat, - lt_tobjvor TYPE TABLE OF tobjvor. - - - ASSERT NOT ms_item-obj_name IS INITIAL. - - io_xml->read( EXPORTING iv_name = 'TOBJ' - CHANGING cg_data = ls_tobj ). - ls_tobj-bname = sy-uname. - io_xml->read( EXPORTING iv_name = 'TOBJT' - CHANGING cg_data = ls_tobjt ). - io_xml->read( EXPORTING iv_name = 'TOBJVORFLG' - CHANGING cg_data = ls_tobjvorflg ). - io_xml->read( EXPORTING iv_name = 'TACTZ' - CHANGING cg_data = lt_tactz ). - io_xml->read( EXPORTING iv_name = 'TOBJVORDAT' - CHANGING cg_data = lt_tobjvordat ). - io_xml->read( EXPORTING iv_name = 'TOBJVOR' - CHANGING cg_data = lt_tobjvor ). - - tadir_insert( iv_package ). - - lv_objectname = mv_objectname. - - CALL FUNCTION 'SUSR_COMMEDITCHECK' - EXPORTING - objectname = lv_objectname - transobjecttype = 'O'. - - MODIFY tobj FROM ls_tobj. "#EC CI_SUBRC - MODIFY tobjt FROM ls_tobjt. "#EC CI_SUBRC - MODIFY tobjvorflg FROM ls_tobjvorflg. "#EC CI_SUBRC - DELETE FROM tactz WHERE brobj = ms_item-obj_name. "#EC CI_SUBRC - INSERT tactz FROM TABLE lt_tactz. "#EC CI_SUBRC - DELETE FROM tobjvordat WHERE objct = ms_item-obj_name. "#EC CI_SUBRC - INSERT tobjvordat FROM TABLE lt_tobjvordat. "#EC CI_SUBRC - DELETE FROM tobjvor WHERE objct = ms_item-obj_name. "#EC CI_SUBRC - INSERT tobjvor FROM TABLE lt_tobjvor. "#EC CI_SUBRC - - ENDMETHOD. - - METHOD zif_abapgit_object~delete. - - " FM SUSR_DELETE_OBJECT calls the UI. Therefore we reimplement it here. - - CONSTANTS: - co_act_delete TYPE activ_auth VALUE '06'. - - DATA: - lv_act_head TYPE activ_auth, - lv_dummy TYPE string, - lo_suso TYPE REF TO object, - lv_failed TYPE abap_bool, - lv_suso_collect_in_cts TYPE i. - - " Downport: CL_SUSO_GEN doesn't exist in 702 - CREATE OBJECT lo_suso - TYPE - ('CL_SUSO_GEN'). - - CALL METHOD lo_suso->('SUSO_LOAD_FROM_DB') - EXPORTING - id_object = mv_objectname - RECEIVING - ed_failed = lv_failed. - - IF lv_failed = abap_true. - " Object & does not exist; choose an existing object - MESSAGE s111(01) WITH mv_objectname INTO lv_dummy. - zcx_abapgit_exception=>raise_t100( ). - ENDIF. - - CALL METHOD lo_suso->('GET_SUSO_EDIT_MODE') - EXPORTING - id_object = mv_objectname - id_planed_act = co_act_delete - IMPORTING - ed_mode_head = lv_act_head. - - IF lv_act_head <> co_act_delete. - zcx_abapgit_exception=>raise( |AUTH { mv_objectname }: Delete not allowed| ). - ENDIF. - - CALL METHOD lo_suso->('SUSO_COLLECT_IN_CTS') - EXPORTING - id_object = mv_objectname - RECEIVING - ed_result = lv_suso_collect_in_cts. - - IF lv_suso_collect_in_cts IS NOT INITIAL. - RETURN. - ENDIF. - - delete_documentation( ). - - DELETE FROM tobj WHERE objct = mv_objectname. - DELETE FROM tobjt WHERE object = mv_objectname. - DELETE FROM tactz WHERE brobj = mv_objectname. - - CALL FUNCTION 'SUPV_DELETE_OBJECT_ASSIGNMENTS' - EXPORTING - object_name = mv_objectname - all_releases = abap_true. - - CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' - EXPORTING - object = mv_objectname - type = 'SUSO' - operation = 'DELETE'. - - ENDMETHOD. - - METHOD delete_documentation. - - DATA: - lv_docu_obj TYPE dokhl-object, - lv_dummy TYPE sy-langu. - - lv_docu_obj = mv_objectname. - - SELECT SINGLE langu - FROM dokil INTO lv_dummy - WHERE id = 'UO' "#EC CI_GENBUFF - AND object = lv_docu_obj. - - IF sy-subrc = 0. - - CALL FUNCTION 'DOKU_DELETE_ALL' - EXPORTING - doku_id = 'UO' - doku_object = lv_docu_obj - suppress_transport = space - EXCEPTIONS - header_without_text = 1 - index_without_header = 2 - no_authority_for_devclass_xxxx = 3 - no_docu_found = 4 - object_is_already_enqueued = 5 - object_is_enqueued_by_corr = 6 - techn_enqueue_problem = 7 - user_break = 8 - OTHERS = 9. - - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise_t100( ). - ENDIF. - - ENDIF. - - ENDMETHOD. - - - METHOD zif_abapgit_object~jump. - - CALL FUNCTION 'SUSR_SHOW_OBJECT' - EXPORTING - object = mv_objectname. - - ENDMETHOD. - - METHOD zif_abapgit_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. - ENDMETHOD. - - METHOD zif_abapgit_object~is_locked. - - rv_is_locked = abap_false. - - ENDMETHOD. - ENDCLASS.