* http://havliczech.blogspot.com/2014/07/local-exception-class-message.html
* lokale Exceptionklasse
CLASS lcx_my_exception DEFINITION INHERITING FROM cx_static_check FINAL CREATE PUBLIC.
PUBLIC SECTION.
* von Interface if_t100_message ableiten
INTERFACES if_t100_message.
DATA: methname TYPE string READ-ONLY ##NEEDED.
DATA: msg TYPE string READ-ONLY ##NEEDED.
DATA: code TYPE char2 READ-ONLY ##NEEDED.
METHODS constructor
IMPORTING methname TYPE sys_calls-eventname
msg TYPE string
code TYPE char2.
ENDCLASS.
CLASS lcx_my_exception IMPLEMENTATION.
* Übergabe der Parameter erfolgt im Conructor
METHOD constructor.
super->constructor( ).
me->methname = methname.
me->msg = msg.
me->code = code.
* Standard Message-Typ verwenden: & & & &
me->if_t100_message~t100key-msgid = 'SY'.
me->if_t100_message~t100key-msgno = '499'.
me->if_t100_message~t100key-attr1 = 'METHNAME'.
me->if_t100_message~t100key-attr2 = 'MSG'.
me->if_t100_message~t100key-attr3 = 'CODE'.
me->if_t100_message~t100key-attr4 = ''.
ENDMETHOD.
ENDCLASS.
* Testklasse zum Auslösen der Exception
CLASS lcl_demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
div
IMPORTING i_val1 TYPE f
i_val2 TYPE f
RETURNING VALUE(rv_ret) TYPE f
* Propagieren der Exception
RAISING lcx_my_exception.
ENDCLASS.
CLASS lcl_demo IMPLEMENTATION.
METHOD div.
IF i_val2 = '0.0'.
* Wenn durch 0.0 geteilt werden soll: Auslösen der lokalen Exception, zusätzlichen Parameter übergeben
RAISE EXCEPTION TYPE lcx_my_exception
EXPORTING
methname = 'DIV'
msg = 'Division durch 0'
code = 'DD'.
ELSE.
rv_ret = i_val1 / i_val2.
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
TRY.
* durch 0.0 teilen -> Exception wird ausgelöst
WRITE: / lcl_demo=>div( i_val1 = '1.1'
i_val2 = '0.0' ).
* Abfangen der lokalen Exception
CATCH lcx_my_exception INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.