Programlardaki istisnai durumları yönetebilmek bazen güç olabilir. Özellikle kullanıcının kırmızı bir ekranla karşılaşması yerine bir uyarı mesajı ile karşılaşması programı daha güvenli hissettirebilir. Ben de istisnai durumların yönetimini biraz modüler hale getirmek için lokal ya da global sınıflar oluşturarak programlarımı geliştirmeye başladım. Aşağıda anlaşılır olması açısından kullanımlarına ilişkin iki basit örnek paylaştım.

İlk istisna sınıfı, CX_STATIC_CHECK. Bu sınıf daha çok minimal programlarda kullanabilir.

Z_STLOG_NET_005

*&---------------------------------------------------------------------*
*& Report Z_STLOG_NET_005
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_stlog_net_005.

INCLUDE z_stlog_net_005_class_def.
INCLUDE z_stlog_net_005_class_imp.

START-OF-SELECTION .

  TRY .
      DATA(v_val) = CONV string( lcl_try=>get_instance( )->mtest( ) ) .
    CATCH lcx_exception INTO DATA(lclexception) .
      MESSAGE lclexception->local_text TYPE 'I' .
  ENDTRY. 

Z_STLOG_NET_005_CLASS_DEF

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_005_CLASS_DEF
*&---------------------------------------------------------------------*

CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check .

  PUBLIC SECTION .
    DATA local_text TYPE string.

    METHODS constructor IMPORTING situation TYPE string.

ENDCLASS .

CLASS lcl_try DEFINITION .

  PUBLIC SECTION .

    CLASS-DATA    : gr_object TYPE REF TO lcl_try .

    CLASS-METHODS   get_instance RETURNING VALUE(r_result) TYPE REF TO lcl_try .

    METHODS       :
      mtest RETURNING VALUE(rv_val) TYPE string RAISING lcx_exception .


ENDCLASS . 

Z_STLOG_NET_005_CLASS_IMP

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_005_CLASS_IMP
*&---------------------------------------------------------------------*

CLASS lcx_exception IMPLEMENTATION .
  METHOD constructor .
    super->constructor( ).
    local_text = situation .
  ENDMETHOD .
ENDCLASS .


CLASS lcl_try IMPLEMENTATION .
  METHOD get_instance .
    IF gr_object IS INITIAL .
      gr_object = NEW #( ).
    ENDIF.
    r_result = gr_object .
  ENDMETHOD .

  METHOD mtest .

    DATA lt_tab TYPE filetable.
    DATA lv_rc TYPE i.

    TRY .

        rv_val = lt_tab[ 1 ]-filename .



      CATCH cx_root INTO DATA(oref).
        RAISE EXCEPTION TYPE lcx_exception
          EXPORTING
            situation = 'mtest metotunda istisnai durum oluştu!'.
    ENDTRY.

  ENDMETHOD .
ENDCLASS . 

Diğer bir istisna sınıf ise, CX_SY_ARITHMETIC_ERROR .

Z_STLOG_NET_006

*&---------------------------------------------------------------------*
*& Report Z_STLOG_NET_006
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_stlog_net_006.

INCLUDE z_stlog_net_006_class_def .
INCLUDE z_stlog_net_006_class_imp .

START-OF-SELECTION .

  TRY .
    DATA(v_val) = CONV string( lcl_try=>get_instance( )->mtest( ) ) .
    CATCH lcx_exception INTO DATA(lclexception) .
      MESSAGE lclexception->get_text( ) TYPE 'I' .
  ENDTRY. 

Z_STLOG_NET_006_CLASS_DEF

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_006_CLASS_DEF
*&---------------------------------------------------------------------*

CLASS lcx_exception DEFINITION INHERITING FROM cx_sy_arithmetic_error .

  PUBLIC SECTION .
    METHODS constructor IMPORTING situation TYPE string.

ENDCLASS .

CLASS lcl_try DEFINITION .

  PUBLIC SECTION .

    CLASS-DATA    : gr_object TYPE REF TO lcl_try .

    CLASS-METHODS   get_instance RETURNING VALUE(r_result) TYPE REF TO lcl_try .

    METHODS       :
      mtest RETURNING VALUE(rv_val) TYPE string RAISING lcx_exception .

ENDCLASS . 

Z_STLOG_NET_006_CLASS_IMP

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_006_CLASS_IMP
*&---------------------------------------------------------------------*

CLASS lcx_exception IMPLEMENTATION .
  METHOD constructor .
    super->constructor( operation = situation ).
  ENDMETHOD .
ENDCLASS .


CLASS lcl_try IMPLEMENTATION .
  METHOD get_instance .
    IF gr_object IS INITIAL .
      gr_object = NEW #( ).
    ENDIF.
    r_result = gr_object .
  ENDMETHOD .

  METHOD mtest .

    DATA lt_tab TYPE filetable.
    DATA lv_rc TYPE i.

    TRY .

        rv_val = lt_tab[ 1 ]-filename .



      CATCH cx_root INTO DATA(oref).
        RAISE EXCEPTION TYPE lcx_exception
          EXPORTING
            situation = 'mtest metotunda istisnai durum oluştu!'.
    ENDTRY.

  ENDMETHOD .
ENDCLASS . 

2+