XINX delete: remove UI call

This commit is contained in:
Christian Guenter 2019-04-22 18:42:17 +02:00 committed by Lars Hvam
parent 94604a7db5
commit 4799230514

View File

@ -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,
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
not_executed = 1
error_occured = 2
permission_failure = 3
action_cancelled = 4
OTHERS = 5.
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.