From 479923051459d070173631963ae7123a67d4ddc3 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Mon, 22 Apr 2019 18:42:17 +0200 Subject: [PATCH] XINX delete: remove UI call --- src/objects/zcl_abapgit_object_xinx.clas.abap | 189 ++++++++++++++++-- 1 file changed, 172 insertions(+), 17 deletions(-) diff --git a/src/objects/zcl_abapgit_object_xinx.clas.abap b/src/objects/zcl_abapgit_object_xinx.clas.abap index 6c5da9d35..79c44c847 100644 --- a/src/objects/zcl_abapgit_object_xinx.clas.abap +++ b/src/objects/zcl_abapgit_object_xinx.clas.abap @@ -11,20 +11,31 @@ CLASS zcl_abapgit_object_xinx DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje PROTECTED SECTION. PRIVATE SECTION. - TYPES: BEGIN OF ty_extension_index, - dd12v TYPE dd12v, - t_dd17v TYPE STANDARD TABLE OF dd17v - WITH NON-UNIQUE DEFAULT KEY, - END OF ty_extension_index. + TYPES: + BEGIN OF ty_extension_index, + dd12v TYPE dd12v, + t_dd17v TYPE STANDARD TABLE OF dd17v + WITH NON-UNIQUE DEFAULT KEY, + END OF ty_extension_index. + + CONSTANTS: + c_objtype_extension_index TYPE trobjtype VALUE 'XINX'. + DATA: mv_name TYPE ddobjname, mv_id TYPE ddobjectid. + METHODS: + xinx_delete_docu + IMPORTING + iv_objname TYPE ddobjname + iv_id TYPE ddobjectid. + ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECT_XINX IMPLEMENTATION. +CLASS zcl_abapgit_object_xinx IMPLEMENTATION. METHOD constructor. @@ -56,24 +67,131 @@ CLASS ZCL_ABAPGIT_OBJECT_XINX IMPLEMENTATION. METHOD zif_abapgit_object~delete. - " RS_DD_INDX_DELETE calls the GUI. Someday we need a better solution + " Reimplement FM RS_DD_INDX_DELETE as it calls the UI - CALL FUNCTION 'RS_DD_INDX_DELETE' + DATA: lv_enqueue TYPE ddenqs, + lv_protname TYPE tstrf01-file, + lv_del_concname LIKE lv_enqueue-objname, + lv_concname TYPE rsdxx-objname, + lv_transp_key TYPE trkey, + ls_e071 TYPE e071, + lv_clm_corrnum TYPE e070-trkorr, + lv_message TYPE string. + + CONCATENATE mv_name '-' mv_id INTO lv_concname. + lv_enqueue-objtype = c_objtype_extension_index. + + CALL FUNCTION 'INT_INDX_DEL_LOCK' EXPORTING - objname = mv_name - indexname = mv_id - extension = abap_true + i_trobjtype = lv_enqueue-objtype + i_tabname = mv_name + i_indexname = mv_id EXCEPTIONS - object_not_found = 1 - object_not_specified = 2 - permission_failure = 3 - action_cancelled = 4 - OTHERS = 5. + not_executed = 1 + error_occured = 2 + permission_failure = 3 + OTHERS = 4. IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from RS_DD_INDX_DELETE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. + lv_enqueue-objname = mv_name. + lv_enqueue-secname = mv_id. + CALL FUNCTION 'RS_CORR_INSERT' + EXPORTING + object = lv_enqueue + object_class = 'DICT' + mode = 'DELETE' + IMPORTING + transport_key = lv_transp_key + EXCEPTIONS + OTHERS = 1. + + IF sy-subrc <> 0. + " & was not deleted (correction entry not possible or canceled) + MESSAGE s015(e2) WITH lv_concname INTO lv_message. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + CALL FUNCTION 'DD_LOGNPROT_NAME_GET' + EXPORTING + task = 'DEL' + obj_type = lv_enqueue-objtype + obj_name = lv_enqueue-objname + ind_name = lv_enqueue-secname + IMPORTING + protname = lv_protname + EXCEPTIONS + input_error = 0. + + PERFORM logdelete IN PROGRAM rddu0001 USING lv_protname. + + lv_del_concname = lv_enqueue-objname. + lv_del_concname+16 = lv_enqueue-secname. + CALL FUNCTION 'DD_OBJ_DEL' + EXPORTING + object_name = lv_del_concname + object_type = lv_enqueue-objtype + del_state = 'M' + EXCEPTIONS + OTHERS = 1. + + IF sy-subrc <> 0. + RETURN. + ENDIF. + + CALL FUNCTION 'DD_DD_TO_E071' + EXPORTING + type = lv_enqueue-objtype + name = lv_enqueue-objname + id = lv_enqueue-secname + IMPORTING + obj_name = ls_e071-obj_name + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + + IF sy-subrc <> 0. + " Internal error & in & (contact person in charge) + MESSAGE i008(e2) WITH 'DD_DD_TO_E071' 'RS_DD_INDX_DELETE' INTO lv_message. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + ls_e071-object = lv_enqueue-objtype. + CALL FUNCTION 'RS_DELETE_FROM_WORKING_AREA' + EXPORTING + object = ls_e071-object + obj_name = ls_e071-obj_name + immediate = 'X' + actualize_working_area = 'X'. + + xinx_delete_docu( + iv_objname = mv_name + iv_id = mv_id ). + + CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' + EXPORTING + object = ls_e071-obj_name + operation = 'DELETE' + type = c_objtype_extension_index. + + IF mv_id(1) CA 'YZ'. + CALL FUNCTION 'CLM_INDX_MODIFICATION_DELETE' + EXPORTING + idxobj_name = lv_enqueue-objname + idx_type = lv_enqueue-objtype + idx_name = mv_id + transport_key = lv_transp_key + corrnum = lv_clm_corrnum. + ENDIF. + + CALL FUNCTION 'RS_DD_DEQUEUE' + EXPORTING + objtype = lv_enqueue-objtype + objname = lv_enqueue-objname + secname = lv_enqueue-secname. + ENDMETHOD. @@ -236,4 +354,41 @@ CLASS ZCL_ABAPGIT_OBJECT_XINX IMPLEMENTATION. ig_data = ls_extension_index ). ENDMETHOD. + + METHOD xinx_delete_docu. + + DATA: lv_docuid TYPE dokhl-id, + lv_doctype TYPE dokhl-typ, + lv_docname TYPE dokhl-object. + + lv_docname = iv_objname. + lv_docname+30 = iv_id. + CALL FUNCTION 'INTERN_DD_DOCU_ID_MATCH' + EXPORTING + p_trobjtype = c_objtype_extension_index + IMPORTING + p_docu_id = lv_docuid + p_doctype = lv_doctype + EXCEPTIONS + illegal_type = 1 + OTHERS = 2. + + IF sy-subrc <> 0. + RETURN. + ENDIF. + + CALL FUNCTION 'DOKU_DELETE_ALL' + EXPORTING + doku_id = lv_docuid + doku_object = lv_docname + doku_typ = lv_doctype + suppress_authority = 'X' + suppress_enqueue = 'X' + suppress_transport = 'X' + EXCEPTIONS + no_docu_found = 1 + OTHERS = 2. + + ENDMETHOD. + ENDCLASS.