diff --git a/src/ui/zcl_abapgit_gui.clas.abap b/src/ui/zcl_abapgit_gui.clas.abap index 2c1209124..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->get_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/zcx_abapgit_exception.clas.abap b/src/zcx_abapgit_exception.clas.abap index 500d4cac3..17d492374 100644 --- a/src/zcx_abapgit_exception.clas.abap +++ b/src/zcx_abapgit_exception.clas.abap @@ -7,20 +7,13 @@ CLASS zcx_abapgit_exception DEFINITION PUBLIC SECTION. 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 + "! @parameter ix_previous | Previous exception "! @raising zcx_abapgit_exception | Exception - raise IMPORTING iv_text TYPE clike + raise IMPORTING iv_text TYPE clike + ix_previous TYPE REF TO cx_root OPTIONAL RAISING zcx_abapgit_exception, "! Raise exception with T100 message "!

@@ -43,15 +36,11 @@ CLASS zcx_abapgit_exception DEFINITION 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. + msgv4 TYPE syst_msgv OPTIONAL. DATA: - text TYPE string READ-ONLY, subrc TYPE syst_subrc READ-ONLY, msgv1 TYPE syst_msgv READ-ONLY, msgv2 TYPE syst_msgv READ-ONLY, @@ -65,12 +54,10 @@ ENDCLASS. -CLASS zcx_abapgit_exception IMPLEMENTATION. +CLASS ZCX_ABAPGIT_EXCEPTION IMPLEMENTATION. METHOD constructor ##ADT_SUPPRESS_GENERATION. super->constructor( previous = previous ). - me->text = text. - me->subrc = subrc. me->msgv1 = msgv1. me->msgv2 = msgv2. me->msgv3 = msgv3. @@ -84,45 +71,45 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. 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. + DATA: lv_msgv1 TYPE symsgv, + lv_msgv2 TYPE symsgv, + lv_msgv3 TYPE symsgv, + lv_msgv4 TYPE symsgv, + ls_t100_key TYPE scx_t100key, + lv_text TYPE string. + + IF iv_text IS INITIAL. + lv_text = gc_generic_error_msg. + ELSE. + lv_text = iv_text. + ENDIF. + + cl_message_helper=>set_msg_vars_for_clike( lv_text ). + + ls_t100_key-msgid = sy-msgid. + ls_t100_key-msgno = sy-msgno. + ls_t100_key-attr1 = 'MSGV1'. + ls_t100_key-attr2 = 'MSGV2'. + ls_t100_key-attr3 = 'MSGV3'. + ls_t100_key-attr4 = 'MSGV4'. + lv_msgv1 = sy-msgv1. + lv_msgv2 = sy-msgv2. + lv_msgv3 = sy-msgv3. + lv_msgv4 = sy-msgv4. + RAISE EXCEPTION TYPE zcx_abapgit_exception EXPORTING - text = iv_text. + textid = ls_t100_key + msgv1 = lv_msgv1 + msgv2 = lv_msgv2 + msgv3 = lv_msgv3 + msgv4 = lv_msgv4 + previous = ix_previous. 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. + DATA: ls_t100_key TYPE scx_t100key. ls_t100_key-msgid = iv_msgid. ls_t100_key-msgno = iv_msgno. @@ -131,7 +118,7 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. ls_t100_key-attr3 = 'MSGV3'. ls_t100_key-attr4 = 'MSGV4'. - IF iv_msgid IS INITIAL OR iv_msgno IS INITIAL. + IF iv_msgid IS INITIAL. CLEAR ls_t100_key. ENDIF. @@ -141,7 +128,6 @@ CLASS zcx_abapgit_exception IMPLEMENTATION. msgv1 = iv_msgv1 msgv2 = iv_msgv2 msgv3 = iv_msgv3 - msgv4 = iv_msgv4 - subrc = lv_subrc. + msgv4 = iv_msgv4. ENDMETHOD. ENDCLASS. diff --git a/src/zcx_abapgit_exception.clas.testclasses.abap b/src/zcx_abapgit_exception.clas.testclasses.abap index f33dfa878..7211a7929 100644 --- a/src/zcx_abapgit_exception.clas.testclasses.abap +++ b/src/zcx_abapgit_exception.clas.testclasses.abap @@ -23,6 +23,8 @@ CLASS ltcl_test DEFINITION msgv4 TYPE syst_msgv, END OF gty_t100_message. CLASS-METHODS: + get_exc_text IMPORTING ix_ex TYPE REF TO cx_root + RETURNING VALUE(rv_text) TYPE string, get_t100_text IMPORTING is_message TYPE gty_t100_message RETURNING VALUE(rv_text) TYPE string. ENDCLASS. @@ -34,36 +36,22 @@ CLASS ltcl_test IMPLEMENTATION. DATA: lx_ex TYPE REF TO zcx_abapgit_exception, lx_previous TYPE REF TO cx_root. - CREATE OBJECT lx_ex - EXPORTING - text = lc_text1. + TRY. + 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'. - cl_abap_unit_assert=>assert_equals( act = lx_ex->get_text( ) exp = lc_text1 ). + zcx_abapgit_exception=>raise( iv_text = lx_previous->get_text( ) + ix_previous = lx_previous ). + cl_abap_unit_assert=>fail( ). - 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( ) ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) + exp = lx_previous->get_text( ) ). + cl_abap_unit_assert=>assert_equals( act = lx_ex->previous exp = lx_previous ). + ENDTRY. FREE: lx_ex, lx_previous. @@ -71,7 +59,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lc_text1 ). ENDTRY. FREE lx_ex. @@ -80,8 +68,9 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( + act = get_exc_text( lx_ex ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). ENDTRY. FREE lx_ex. @@ -90,10 +79,14 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + TRY. + zcx_abapgit_exception=>raise( space ). + cl_abap_unit_assert=>fail( ). + CATCH zcx_abapgit_exception INTO lx_ex. + cl_abap_unit_assert=>assert_equals( + act = get_exc_text( lx_ex ) + exp = zcx_abapgit_exception=>gc_generic_error_msg ). + ENDTRY. ENDMETHOD. METHOD test_t100_text. @@ -160,15 +153,7 @@ CLASS ltcl_test IMPLEMENTATION. 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. + END OF lc_msg8. DATA: lx_ex TYPE REF TO zcx_abapgit_exception, lv_text TYPE string. @@ -177,7 +162,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -188,7 +173,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -199,7 +184,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -210,7 +195,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -221,7 +206,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -232,7 +217,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -243,7 +228,7 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. @@ -254,23 +239,18 @@ CLASS ltcl_test IMPLEMENTATION. 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 ). + cl_abap_unit_assert=>assert_equals( act = get_exc_text( lx_ex ) exp = lv_text ). ENDTRY. CLEAR lv_text. FREE lx_ex. + ENDMETHOD. - 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. + METHOD get_exc_text. + cl_message_helper=>set_msg_vars_for_if_msg( ix_ex ). + MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 + INTO rv_text. ENDMETHOD. METHOD get_t100_text.