Issue#1878 popup deleting msag (#1918)

* removed popup saving msag

* fixed capitalization

* refactored with variable prefixes

* refactored exceptions and split methods

also removed S messages.
Previous code was mostly copy %26 paste of the original

* Cleaned up

* more cleanup
This commit is contained in:
Marcello Urbani 2018-09-21 08:19:44 +01:00 committed by Lars Hvam
parent 46da683d7b
commit 3c86342bef

View File

@ -31,13 +31,20 @@ CLASS zcl_abapgit_object_msag DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
serialize_longtexts_msag
IMPORTING it_t100 TYPE zcl_abapgit_object_msag=>tty_t100
io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception.
RAISING zcx_abapgit_exception,
delete_msgid IMPORTING iv_message_id TYPE arbgb,
free_access_permission
IMPORTING
i_message_id TYPE arbgb,
delete_documentation
IMPORTING
iv_message_id TYPE arbgb.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_MSAG IMPLEMENTATION.
CLASS zcl_abapgit_object_msag IMPLEMENTATION.
METHOD deserialize_texts.
@ -179,18 +186,63 @@ CLASS ZCL_ABAPGIT_OBJECT_MSAG IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lv_t100a TYPE t100a,
lv_frozen TYPE flag,
lv_message_id TYPE arbgb,
lv_access_granted TYPE abap_bool.
* parameter SUPPRESS_DIALOG doesnt exist in all versions
CALL FUNCTION 'RS_DELETE_MESSAGE_ID'
* parameter SUPPRESS_DIALOG doesnt exist in all versions of FM RS_DELETE_MESSAGE_ID
* replaced with a copy
lv_message_id = ms_item-obj_name.
IF ms_item-obj_name EQ space.
zcx_abapgit_exception=>raise( 'Error from (copy of) RS_DELETE_MESSAGE_ID' )."blank message id
ENDIF.
SELECT SINGLE * FROM t100a INTO lv_t100a WHERE arbgb = ms_item-obj_name.
IF sy-subrc NE 0.
zcx_abapgit_exception=>raise( 'Error from (copy of) RS_DELETE_MESSAGE_ID' )."not found
ENDIF.
CLEAR lv_frozen.
CALL FUNCTION 'RS_ACCESS_PERMISSION'
EXPORTING
nachrichtenklasse = ms_item-obj_name
authority_check = 'X'
global_lock = 'X'
mode = 'MODIFY'
object = lv_message_id
object_class = 'T100'
IMPORTING
frozen = lv_frozen
EXCEPTIONS
not_executed = 1
not_found = 2
no_permission = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error from RS_DELETE_MESSAGE_ID' ).
OTHERS = 1.
IF sy-subrc NE 0 OR lv_frozen NE space.
zcx_abapgit_exception=>raise( 'Error from (copy of) RS_DELETE_MESSAGE_ID' )."can't access
ENDIF.
lv_access_granted = abap_true.
CALL FUNCTION 'RS_CORR_INSERT'
EXPORTING
global_lock = 'X'
object = lv_message_id
object_class = 'MSAG'
mode = 'D'
EXCEPTIONS
cancelled = 01
permission_failure = 02.
IF sy-subrc NE 0.
IF lv_access_granted = abap_true.
free_access_permission( lv_message_id ).
ENDIF.
zcx_abapgit_exception=>raise( 'Error from (copy of) RS_DELETE_MESSAGE_ID' )."can't access
ENDIF.
delete_msgid( lv_message_id ).
IF lv_access_granted = abap_true.
free_access_permission( lv_message_id ).
ENDIF.
ENDMETHOD.
@ -365,4 +417,70 @@ CLASS ZCL_ABAPGIT_OBJECT_MSAG IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD.
METHOD delete_msgid.
delete_documentation( iv_message_id ).
DELETE FROM t100a WHERE arbgb = iv_message_id.
IF sy-subrc = 0 OR sy-subrc = 4.
CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT'
EXPORTING
object = iv_message_id
operation = 'DELETE'
program = space
type = 'CN'.
DELETE FROM t100o WHERE arbgb = iv_message_id.
DELETE FROM t100t WHERE arbgb = iv_message_id. "#EC CI_NOFIRST
DELETE FROM t100u WHERE arbgb = iv_message_id.
DELETE FROM t100x WHERE arbgb = iv_message_id.
DELETE FROM t100 WHERE arbgb = iv_message_id.
ENDIF.
ENDMETHOD.
METHOD free_access_permission.
CALL FUNCTION 'RS_ACCESS_PERMISSION'
EXPORTING
mode = 'FREE'
object = i_message_id
object_class = 'T100'.
ENDMETHOD.
METHOD delete_documentation.
DATA: lv_key_s TYPE dokhl-object.
CLEAR lv_key_s.
CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
EXPORTING
docu_id = 'NA'
element = iv_message_id
addition = ' '
IMPORTING
object = lv_key_s
EXCEPTIONS
OTHERS = 0.
CALL FUNCTION 'DOKU_DELETE_ALL'
EXPORTING
doku_id = 'NA'
doku_object = lv_key_s
generic_use = 'X'
suppress_authority = space
suppress_enqueue = space
suppress_transport = space
EXCEPTIONS
header_without_text = 01
index_without_header = 02
no_authority_for_devclass_xxxx = 03
no_docu_found = 04
object_is_already_enqueued = 05
object_is_enqueued_by_corr = 06
user_break = 07.
ENDMETHOD.
ENDCLASS.