mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Fix exception texts (fixes #1242)
This commit is contained in:
parent
7b002c66da
commit
eac56ae802
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
"! <p>
|
||||
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user