Generic Exception handling (BAPIRET2) in OData

Function

  CLASS-METHODS check_msg_and_raise_exceptions
      IMPORTING
        !it_messages         TYPE bapiret2_t
        !i_message_container TYPE REF TO /iwbep/if_message_container
      RAISING
        /iwbep/cx_mgw_busi_exception
        /iwbep/cx_mgw_tech_exception .

  METHOD check_msg_and_raise_exceptions.

    DATA: lt_messages TYPE bapiret2_t.

    lt_messages = it_messages.

    READ TABLE lt_messages WITH KEY type = 'E' TRANSPORTING NO FIELDS.
    IF sy-subrc EQ 0.
      DELETE lt_messages WHERE type EQ 'I' OR type EQ 'S'.
    ELSE.
      DELETE lt_messages WHERE type EQ 'I' OR type EQ 'S' OR type EQ 'W'.
    ENDIF.



    IF lt_messages IS NOT INITIAL.
      i_message_container->add_messages_from_bapi(
            it_bapi_messages         = lt_messages
            iv_determine_leading_msg = /iwbep/if_message_container=>gcs_leading_msg_search_option-first ).

      RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
        EXPORTING
          message_container = i_message_container.
    ENDIF.

  ENDMETHOD.

Example

  METHOD <ENTITY>set_get_entity.

    DATA: lo_message_container TYPE REF TO /iwbep/if_message_container.
    DATA: lt_return            TYPE bapiret2_t.
    DATA: ls_return            TYPE bapiret2.

*--- Access message container
    lo_message_container = mo_context->get_message_container( ).

*--- do sth.
    MESSAGE e001(zxxx) WITH sy-datum INTO DATA(lv_msg).
    ls_return = VALUE #( type = sy-msgty id = sy-msgid number = sy-msgno message = lv_msg ).
    APPEND ls_return TO lt_return.

*--- check for errors
    check_msg_and_raise_exceptions(
      EXPORTING
        it_messages         = lt_return
        i_message_container = lo_message_container
    ).

  ENDMETHOD.

Related Information

Leave a Reply

Your email address will not be published. Required fields are marked *