Supported by
Supported by Inetum

It's now so simple to convert a MESSAGE into an EXCEPTION

images/thumbnail.jpg - Thumbnail

Some years agor I showed how to convert a normal MESSAGE into a typified exception. Meanwhile ABAP evolved a lot and now, since version 7.40, that complex solution is no longer needed.

Now the EXCEPTION command allows you to directly create an exception from a MESSAGE.

The most obvious scenario: when in a method you need to call a standard function module, most times the function module returns a exception code with a MESSAGE in SYST. But the method needs to return an exception so we need to convert the former into the latter. Now, it couldn’t be simpler:

Look at the following function which generates a MESSAGE when it returns an error:

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
      IMPORTING
        bin_file              = r_pdf
      TABLES
        otf                   = it_otf
        lines                 = t_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

Belive it or not, you just need to add a single line to convert the MESSAGE into an EXCEPTION:

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
      IMPORTING
        bin_file              = r_pdf
      TABLES
        otf                   = it_otf
        lines                 = t_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
        <b>RAISE EXCEPTION TYPE zcx_proj1</b>
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

This works because RAISE EXCEPTION TYPE now accepts MESSAGE as a parameter with the exact same syntax as the MESSAGE command.

Greetings from Abapinho.