From 889106b68bfd28f76c6682a0265882fd6f7dea21 Mon Sep 17 00:00:00 2001 From: Fabian Lupa Date: Sat, 10 Mar 2018 13:27:09 +0100 Subject: [PATCH] Improve error messages (#1213) * Add T100 support to ZCX_ABAPGIT_EXCEPTION * Use T100 error messages in DEVC * Replace zcx_abapgit_exception->text with get_text * Use SE24 generated constructor in T100 exception --- src/objects/zcl_abapgit_object_devc.clas.abap | 45 ++- src/ui/zcl_abapgit_gui.clas.abap | 2 +- src/ui/zcl_abapgit_gui_chunk_lib.clas.abap | 2 +- src/zabapgit_forms.prog.abap | 6 +- src/zcl_abapgit_migrations.clas.abap | 2 +- src/zcl_abapgit_repo.clas.abap | 2 +- src/zcx_abapgit_exception.clas.abap | 148 +++++++-- ...cx_abapgit_exception.clas.testclasses.abap | 281 ++++++++++++++++++ src/zcx_abapgit_exception.clas.xml | 1 + 9 files changed, 434 insertions(+), 55 deletions(-) create mode 100644 src/zcx_abapgit_exception.clas.testclasses.abap diff --git a/src/objects/zcl_abapgit_object_devc.clas.abap b/src/objects/zcl_abapgit_object_devc.clas.abap index 868d08d28..dd860ca56 100644 --- a/src/objects/zcl_abapgit_object_devc.clas.abap +++ b/src/objects/zcl_abapgit_object_devc.clas.abap @@ -27,7 +27,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. +CLASS zcl_abapgit_object_devc IMPLEMENTATION. METHOD constructor. @@ -55,7 +55,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. IF sy-subrc = 1. RETURN. ELSEIF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from CL_PACKAGE_FACTORY=>LOAD_PACKAGE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDIF. ENDMETHOD. @@ -82,7 +82,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. unexpected_error = 10 OTHERS = 11 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_CHANGEABLE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDIF. @@ -104,7 +104,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. IF ( sy-subrc = 1 AND iv_lock = abap_true ) OR ( sy-subrc = 2 AND iv_lock = abap_false ). " There's no getter to find out beforehand... ELSEIF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_PERMISSIONS_CHANGEABLE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDMETHOD. @@ -126,7 +126,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. unexpected_error = 2 OTHERS = 3 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE=>GET_PERMISSIONS_TO_USE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ls_data_sign-err_sever = abap_true. @@ -151,8 +151,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. intern_err = 3 OTHERS = 4 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( - |Error from IF_PACKAGE_PERMISSION_TO_USE->SET_ALL_ATTRIBUTES { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ELSE. @@ -169,7 +168,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. unexpected_error = 5 OTHERS = 6 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->ADD_PERMISSION_TO_USE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDIF. @@ -192,7 +191,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. intern_err = 4 OTHERS = 5 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->DELETE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDLOOP. ENDMETHOD. @@ -218,11 +217,11 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. - DATA: li_package TYPE REF TO if_package, - ls_package_data TYPE scompkdtln, - ls_data_sign TYPE scompksign, - lt_usage_data TYPE scomppdata, - ls_save_sign TYPE paksavsign. + DATA: li_package TYPE REF TO if_package, + ls_package_data TYPE scompkdtln, + ls_data_sign TYPE scompksign, + lt_usage_data TYPE scomppdata, + ls_save_sign TYPE paksavsign. FIELD-SYMBOLS: TYPE scomppdtln. @@ -301,7 +300,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. superpackage_invalid = 17 OTHERS = 18 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_ALL_ATTRIBUTES { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. * " If the application component was cleared SET_ALL_ATTRIBUTES doesn't change it @@ -341,7 +340,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. * error_in_cts_checks = 21 downport, does not exist in 7.31 OTHERS = 22 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from CL_PACKAGE_FACTORY=>CREATE_NEW_PACKAGE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDIF. @@ -374,7 +373,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. object_invalid = 4 OTHERS = 5 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SAVE_GENERIC { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. set_lock( ii_package = li_package iv_lock = abap_false ). @@ -382,7 +381,6 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. METHOD zif_abapgit_object~exists. - " Check remote package if deserialize has not been called before this IF mv_local_devclass IS INITIAL. rv_bool = abap_false. @@ -396,7 +394,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. intern_err = 1 OTHERS = 2 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from CL_PACKAGE_HELPER=>CHECK_PACKAGE_EXISTENCE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDIF. ENDMETHOD. @@ -424,7 +422,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. invalid_object_type = 2 OTHERS = 3. IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from RS_TOOL_ACCESS, DEVC| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDMETHOD. @@ -454,7 +452,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. intern_err = 3 OTHERS = 4 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->GET_ALL_ATTRIBUTES { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. CLEAR: ls_package_data-devclass, @@ -508,7 +506,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. unexpected_error = 2 OTHERS = 3 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->GET_PERMISSION_TO_USE { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. LOOP AT lt_intf_usages INTO li_usage. @@ -520,8 +518,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION. intern_err = 2 OTHERS = 3 ). IF sy-subrc <> 0. - zcx_abapgit_exception=>raise( - |Error from IF_PACKAGE_PERMISSION_TO_USE->GET_ALL_ATTRIBUTES { sy-subrc }| ). + zcx_abapgit_exception=>raise_t100( ). ENDIF. CLEAR: ls_usage_data-pack_name, ls_usage_data-client_pak. diff --git a/src/ui/zcl_abapgit_gui.clas.abap b/src/ui/zcl_abapgit_gui.clas.abap index 41861144a..04db68144 100644 --- a/src/ui/zcl_abapgit_gui.clas.abap +++ b/src/ui/zcl_abapgit_gui.clas.abap @@ -270,7 +270,7 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION. CATCH zcx_abapgit_exception INTO lx_exception. ROLLBACK WORK. - MESSAGE lx_exception->text TYPE 'S' DISPLAY LIKE 'E'. + MESSAGE lx_exception TYPE 'S' DISPLAY LIKE 'E'. CATCH zcx_abapgit_cancel ##NO_HANDLER. " Do nothing = gc_event_state-no_more_act ENDTRY. diff --git a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap index e0209799a..62bc37e66 100644 --- a/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap +++ b/src/ui/zcl_abapgit_gui_chunk_lib.clas.abap @@ -83,7 +83,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION. CREATE OBJECT ro_html. IF ix_error IS BOUND. - lv_error = ix_error->text. + lv_error = ix_error->get_text( ). ELSE. lv_error = iv_error. ENDIF. diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 38290b371..5bd54503c 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -24,7 +24,7 @@ FORM run. zcl_abapgit_migrations=>run( ). PERFORM open_gui. CATCH zcx_abapgit_exception INTO lx_exception. - MESSAGE lx_exception->text TYPE 'E'. + MESSAGE lx_exception TYPE 'E'. ENDTRY. ENDFORM. "run @@ -73,7 +73,7 @@ FORM branch_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt cv_show_popup = cv_show_popup ). CATCH zcx_abapgit_exception INTO lx_error. - MESSAGE lx_error->text TYPE 'S' DISPLAY LIKE 'E'. + MESSAGE lx_error TYPE 'S' DISPLAY LIKE 'E'. ENDTRY. ENDFORM. "branch_popup @@ -97,7 +97,7 @@ FORM package_popup TABLES tt_fields TYPE zif_abapgit_definitions=>ty_sval_tt cv_show_popup = cv_show_popup ). CATCH zcx_abapgit_exception INTO lx_error. - MESSAGE lx_error->text TYPE 'S' DISPLAY LIKE 'E'. + MESSAGE lx_error TYPE 'S' DISPLAY LIKE 'E'. ENDTRY. ENDFORM. "package_popup diff --git a/src/zcl_abapgit_migrations.clas.abap b/src/zcl_abapgit_migrations.clas.abap index ee4d5d419..2fa219079 100644 --- a/src/zcl_abapgit_migrations.clas.abap +++ b/src/zcl_abapgit_migrations.clas.abap @@ -58,7 +58,7 @@ CLASS ZCL_ABAPGIT_MIGRATIONS IMPLEMENTATION. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = 'Migration has failed' - txt1 = lx_exception->text + txt1 = lx_exception->get_text( ) txt2 = lv_msg txt3 = 'You will be prompted to migrate the repository every time you run abapGit.' txt4 = 'You can safely remove the repository in its ''Advanced -> Remove'' menu.'. diff --git a/src/zcl_abapgit_repo.clas.abap b/src/zcl_abapgit_repo.clas.abap index 71ec9e6c4..c2c42da57 100644 --- a/src/zcl_abapgit_repo.clas.abap +++ b/src/zcl_abapgit_repo.clas.abap @@ -161,7 +161,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. " ensure to reset default transport request task zcl_abapgit_default_task=>get_instance( )->reset( ). - zcx_abapgit_exception=>raise( lx_error->text ). + RAISE EXCEPTION lx_error. ENDTRY. diff --git a/src/zcx_abapgit_exception.clas.abap b/src/zcx_abapgit_exception.clas.abap index ea51cfd5f..500d4cac3 100644 --- a/src/zcx_abapgit_exception.clas.abap +++ b/src/zcx_abapgit_exception.clas.abap @@ -1,47 +1,147 @@ +"! abapGit general error CLASS zcx_abapgit_exception DEFINITION PUBLIC INHERITING FROM cx_static_check - CREATE PUBLIC . + CREATE PUBLIC. PUBLIC SECTION. - - DATA text TYPE string . - - METHODS constructor - IMPORTING - !textid LIKE textid OPTIONAL - !previous LIKE previous OPTIONAL - !text TYPE string OPTIONAL. - - CLASS-METHODS raise - IMPORTING - !iv_text TYPE clike - RAISING - zcx_abapgit_exception. - + INTERFACES: + if_t100_message. + CONSTANTS: + BEGIN OF dummy, + msgid TYPE symsgid VALUE '02', + msgno TYPE symsgno VALUE '004', + attr1 TYPE scx_attrname VALUE 'MSGV1', + attr2 TYPE scx_attrname VALUE 'MSGV2', + attr3 TYPE scx_attrname VALUE 'MSGV3', + attr4 TYPE scx_attrname VALUE 'MSGV4', + END OF dummy. + CLASS-METHODS: + "! Raise exception with text + "! @parameter iv_text | Text + "! @raising zcx_abapgit_exception | Exception + raise IMPORTING iv_text TYPE clike + RAISING zcx_abapgit_exception, + "! Raise exception with T100 message + "!

+ "! Will default to sy-msg* variables. These need to be set right before calling this method. + "!

+ "! @parameter iv_msgid | Message ID + "! @parameter iv_msgno | Message number + "! @parameter iv_msgv1 | Message variable 1 + "! @parameter iv_msgv2 | Message variable 2 + "! @parameter iv_msgv3 | Message variable 3 + "! @parameter iv_msgv4 | Message variable 4 + "! @raising zcx_abapgit_exception | Exception + raise_t100 IMPORTING VALUE(iv_msgid) TYPE syst_msgid DEFAULT sy-msgid + VALUE(iv_msgno) TYPE syst_msgno DEFAULT sy-msgno + VALUE(iv_msgv1) TYPE syst_msgv DEFAULT sy-msgv1 + VALUE(iv_msgv2) TYPE syst_msgv DEFAULT sy-msgv2 + VALUE(iv_msgv3) TYPE syst_msgv DEFAULT sy-msgv3 + VALUE(iv_msgv4) TYPE syst_msgv DEFAULT sy-msgv4 + RAISING zcx_abapgit_exception . + METHODS: + constructor IMPORTING textid LIKE if_t100_message=>t100key OPTIONAL + previous LIKE previous OPTIONAL + text TYPE string OPTIONAL + subrc TYPE syst_subrc OPTIONAL + msgv1 TYPE syst_msgv OPTIONAL + msgv2 TYPE syst_msgv OPTIONAL + msgv3 TYPE syst_msgv OPTIONAL + msgv4 TYPE syst_msgv OPTIONAL, + if_message~get_text REDEFINITION. + DATA: + text TYPE string READ-ONLY, + subrc TYPE syst_subrc READ-ONLY, + msgv1 TYPE syst_msgv READ-ONLY, + msgv2 TYPE syst_msgv READ-ONLY, + msgv3 TYPE syst_msgv READ-ONLY, + msgv4 TYPE syst_msgv READ-ONLY. + PROTECTED SECTION. + PRIVATE SECTION. + CONSTANTS: + gc_generic_error_msg TYPE string VALUE `An error occured (ZCX_ABAPGIT_EXCEPTION)` ##NO_TEXT. ENDCLASS. CLASS zcx_abapgit_exception IMPLEMENTATION. - METHOD constructor ##ADT_SUPPRESS_GENERATION. + super->constructor( previous = previous ). - CALL METHOD super->constructor - EXPORTING - textid = textid - previous = previous. + me->text = text. + me->subrc = subrc. + me->msgv1 = msgv1. + me->msgv2 = msgv2. + me->msgv3 = msgv3. + me->msgv4 = msgv4. - me->text = text . + CLEAR me->textid. + IF textid IS INITIAL. + if_t100_message~t100key = if_t100_message=>default_textid. + ELSE. + if_t100_message~t100key = textid. + ENDIF. + ENDMETHOD. + METHOD if_message~get_text. + " The standard implementation of this method always uses T100 messages, if IF_T100_MESSAGE is + " implemented. Since this is a 'hybrid' exception of IF_MESSAGE and IF_T100_MESSAGE the normal + " get_text() is only called if a T100 message is used. + " Otherwise try to get a meaningful error text for the user in this order: + " mv_text variable, previous exception's text, generic error message + + IF if_t100_message~t100key IS INITIAL OR + if_t100_message~t100key = if_t100_message=>default_textid. + IF text IS NOT INITIAL. + result = text. + ELSEIF previous IS NOT INITIAL. + result = previous->get_text( ). + ELSE. + IF sy-subrc IS NOT INITIAL. + result = |{ gc_generic_error_msg } ({ subrc })|. + ELSE. + result = gc_generic_error_msg. + ENDIF. + ENDIF. + + ELSE. + result = super->get_text( ). + ENDIF. ENDMETHOD. METHOD raise. - RAISE EXCEPTION TYPE zcx_abapgit_exception EXPORTING text = iv_text. - ENDMETHOD. + METHOD raise_t100. + DATA: ls_t100_key TYPE scx_t100key, + lv_subrc TYPE syst_subrc. + + " If this method is called right in the sy-subrc handling of a method or function module + " sy-subrc should still contain the id from that. + lv_subrc = sy-subrc. + + ls_t100_key-msgid = iv_msgid. + ls_t100_key-msgno = iv_msgno. + ls_t100_key-attr1 = 'MSGV1'. + ls_t100_key-attr2 = 'MSGV2'. + ls_t100_key-attr3 = 'MSGV3'. + ls_t100_key-attr4 = 'MSGV4'. + + IF iv_msgid IS INITIAL OR iv_msgno IS INITIAL. + CLEAR ls_t100_key. + ENDIF. + + RAISE EXCEPTION TYPE zcx_abapgit_exception + EXPORTING + textid = ls_t100_key + msgv1 = iv_msgv1 + msgv2 = iv_msgv2 + msgv3 = iv_msgv3 + msgv4 = iv_msgv4 + subrc = lv_subrc. + ENDMETHOD. ENDCLASS. diff --git a/src/zcx_abapgit_exception.clas.testclasses.abap b/src/zcx_abapgit_exception.clas.testclasses.abap new file mode 100644 index 000000000..f33dfa878 --- /dev/null +++ b/src/zcx_abapgit_exception.clas.testclasses.abap @@ -0,0 +1,281 @@ +CLASS ltcl_test DEFINITION DEFERRED. +CLASS zcx_abapgit_exception DEFINITION LOCAL FRIENDS ltcl_test. + +CLASS ltcl_test DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + METHODS: + test_direct_text FOR TESTING, + test_t100_text FOR TESTING, + test_no_text FOR TESTING. + PROTECTED SECTION. + PRIVATE SECTION. + TYPES: + BEGIN OF gty_t100_message, + msgid TYPE syst_msgid, + msgno TYPE syst_msgno, + msgv1 TYPE syst_msgv, + msgv2 TYPE syst_msgv, + msgv3 TYPE syst_msgv, + msgv4 TYPE syst_msgv, + END OF gty_t100_message. + CLASS-METHODS: + get_t100_text IMPORTING is_message TYPE gty_t100_message + RETURNING VALUE(rv_text) TYPE string. +ENDCLASS. + +CLASS ltcl_test IMPLEMENTATION. + METHOD test_direct_text. + CONSTANTS: lc_text1 TYPE string VALUE `This is a test error message.`, + lc_text2 TYPE string VALUE ``. + DATA: lx_ex TYPE REF TO zcx_abapgit_exception, + lx_previous TYPE REF TO cx_root. + + CREATE OBJECT lx_ex + EXPORTING + text = lc_text1. + + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lc_text1 ). + + FREE lx_ex. + + CREATE OBJECT lx_ex + EXPORTING + text = lc_text2. + + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). + + FREE lx_ex. + + CREATE OBJECT lx_previous TYPE cx_sy_dyn_call_illegal_method + EXPORTING + textid = cx_sy_dyn_call_illegal_method=>private_method + classname = 'CLASS' + methodname = 'METHOD'. + + CREATE OBJECT lx_ex + EXPORTING + text = lc_text2 + previous = lx_previous. + + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) + exp = lx_previous->get_text( ) ). + + FREE: lx_ex, lx_previous. + + TRY. + zcx_abapgit_exception=>raise( lc_text1 ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lc_text1 ). + ENDTRY. + + FREE lx_ex. + + TRY. + zcx_abapgit_exception=>raise( lc_text2 ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). + ENDTRY. + + FREE lx_ex. + ENDMETHOD. + + METHOD test_no_text. + DATA: lx_ex TYPE REF TO zcx_abapgit_exception. + + CREATE OBJECT lx_ex. + + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). + ENDMETHOD. + + METHOD test_t100_text. + CONSTANTS: BEGIN OF lc_msg1, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '001', + msgv1 TYPE syst_msgv VALUE IS INITIAL, + msgv2 TYPE syst_msgv VALUE IS INITIAL, + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg1, + BEGIN OF lc_msg2, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '001', + msgv1 TYPE syst_msgv VALUE 'Variable 1', + msgv2 TYPE syst_msgv VALUE IS INITIAL, + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg2, + BEGIN OF lc_msg3, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '001', + msgv1 TYPE syst_msgv VALUE 'Variable 1', + msgv2 TYPE syst_msgv VALUE 'Variable 2', + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg3, + BEGIN OF lc_msg4, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '001', + msgv1 TYPE syst_msgv VALUE 'Variable 1', + msgv2 TYPE syst_msgv VALUE 'Variable 2', + msgv3 TYPE syst_msgv VALUE'Variable 3', + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg4, + BEGIN OF lc_msg5, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '001', + msgv1 TYPE syst_msgv VALUE 'Variable 1', + msgv2 TYPE syst_msgv VALUE 'Variable 2', + msgv3 TYPE syst_msgv VALUE 'Variable 3', + msgv4 TYPE syst_msgv VALUE 'Variable 4', + END OF lc_msg5, + BEGIN OF lc_msg6, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '003', + msgv1 TYPE syst_msgv VALUE 'Variable 1', + msgv2 TYPE syst_msgv VALUE 'Variable 2', + msgv3 TYPE syst_msgv VALUE 'Variable 3', + msgv4 TYPE syst_msgv VALUE 'Variable 4', + END OF lc_msg6, + BEGIN OF lc_msg7, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '003', + msgv1 TYPE syst_msgv VALUE IS INITIAL, + msgv2 TYPE syst_msgv VALUE IS INITIAL, + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg7, + BEGIN OF lc_msg8, + msgid TYPE syst_msgid VALUE '00', + msgno TYPE syst_msgno VALUE '002', + msgv1 TYPE syst_msgv VALUE IS INITIAL, + msgv2 TYPE syst_msgv VALUE IS INITIAL, + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg8, + BEGIN OF lc_msg9, + msgid TYPE syst_msgid VALUE '!"(/&&(%!)"(', + msgno TYPE syst_msgno VALUE '000', + msgv1 TYPE syst_msgv VALUE IS INITIAL, + msgv2 TYPE syst_msgv VALUE IS INITIAL, + msgv3 TYPE syst_msgv VALUE IS INITIAL, + msgv4 TYPE syst_msgv VALUE IS INITIAL, + END OF lc_msg9. + DATA: lx_ex TYPE REF TO zcx_abapgit_exception, + lv_text TYPE string. + + TRY. + lv_text = get_t100_text( lc_msg1 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg2 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg3 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg4 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg5 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg6 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg7 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg8 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lv_text ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + + TRY. + lv_text = get_t100_text( lc_msg9 ). + zcx_abapgit_exception=>raise_t100( ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). + ENDTRY. + + CLEAR lv_text. + FREE lx_ex. + ENDMETHOD. + + METHOD get_t100_text. + MESSAGE ID is_message-msgid TYPE 'S' NUMBER is_message-msgno + WITH is_message-msgv1 is_message-msgv2 is_message-msgv3 is_message-msgv4 + INTO rv_text. + ENDMETHOD. +ENDCLASS. diff --git a/src/zcx_abapgit_exception.clas.xml b/src/zcx_abapgit_exception.clas.xml index 8c579868b..567ebfad2 100644 --- a/src/zcx_abapgit_exception.clas.xml +++ b/src/zcx_abapgit_exception.clas.xml @@ -13,6 +13,7 @@ X X X + X