CHAR: catch exceptions and implement is_locked

Before this commit is applied we get shortdumps when the object
is locked during deserialization or deletions.
This commit is contained in:
Christian Guenter 2018-07-25 18:33:03 +00:00 committed by Lars Hvam
parent 9966bf4c86
commit 494cc5a8f8

View File

@ -58,7 +58,10 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
IF lv_new = abap_false.
TRY.
ro_char->if_pak_wb_object~lock_and_refresh( ).
CATCH cx_pak_wb_object_locked.
CATCH cx_pak_invalid_data
cx_pak_not_authorized
cx_pak_invalid_state
cx_pak_wb_object_locked.
zcx_abapgit_exception=>raise( |Could not aquire lock, CHAR { lv_name }| ).
ENDTRY.
ENDIF.
@ -93,7 +96,9 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
METHOD zif_abapgit_object~delete.
DATA: lo_char TYPE REF TO cl_cls_attribute,
lv_type_group TYPE cls_attribute-type_group.
lv_type_group TYPE cls_attribute-type_group,
lx_pak_error TYPE REF TO cx_root,
lv_text TYPE string.
SELECT SINGLE type_group FROM cls_attribute INTO lv_type_group
@ -102,12 +107,18 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
lo_char = instantiate_char( lv_type_group ).
TRY.
lo_char->if_pak_wb_object~delete( ).
lo_char->if_pak_wb_object~save( ).
lo_char->if_pak_wb_object_internal~unlock( ).
CATCH cx_pak_invalid_state cx_pak_invalid_data cx_pak_not_authorized INTO lx_pak_error.
lv_text = lx_pak_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
@ -116,7 +127,9 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
DATA: ls_char TYPE ty_char,
lv_request TYPE trkorr,
ls_description LIKE LINE OF ls_char-cls_attributet,
lo_char TYPE REF TO cl_cls_attribute.
lo_char TYPE REF TO cl_cls_attribute,
lx_pak_error TYPE REF TO cx_root,
lv_text TYPE string.
FIELD-SYMBOLS: <ls_value> LIKE LINE OF ls_char-cls_attr_value,
<ls_valuet> LIKE LINE OF ls_char-cls_attr_value.
@ -129,6 +142,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
lo_char = instantiate_char( ls_char-cls_attribute-type_group ).
TRY.
lo_char->if_cls_attribute~set_kind( ls_char-cls_attribute-kind ).
lo_char->if_cls_attribute~set_single_valued( ls_char-cls_attribute-is_single_valued ).
lo_char->if_cls_attribute~set_aspect(
@ -181,6 +195,11 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
lo_char->if_pak_wb_object_internal~unlock( ).
CATCH cx_pak_invalid_state cx_pak_invalid_data cx_pak_not_authorized INTO lx_pak_error.
lv_text = lx_pak_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
@ -202,7 +221,10 @@ CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ECLS_ATTRIBUTE'
iv_argument = |{ ms_item-obj_name }*| ).
ENDMETHOD.