"
Supported by

Always use message classes in exception classes.

Exception classes let you state multiple texts describing the different possible errors that they can represent.

However, there exists an option to associate it with a message class (SE91). This allows texts to be defined as classic SE91 messages instead of being defined directly in the exception class. And it has advantages.

At first, defining texts directly in the exception class sounds easier. This is what I used to do, up until recently, when I discovered the benefits of the association between the two.

For example, instead of having to use the GET_TEXT() method, put the result in a string and then doing a MESSAGE of this string, you can use the exception’s instance directly with the MESSAGE command. Isn’t this great?

In other words, instead of:


DATA: text TYPE string.
TRY.
    RAISE EXCEPTION TYPE zcx_abapinho.
  CATCH zcx_abapinho INTO o_exc.
    text = o_exc->get_text( ).
    MESSAGE text TYPE 'I'.
ENDTRY.

You can just do this:


TRY.
    RAISE EXCEPTION TYPE zcx_abapinho.
  CATCH zcx_abapinho INTO o_exc.
    MESSAGE o_exc TYPE 'I'.
ENDTRY.

This happens because when you associate an exception class with a message class, SAP automatically adds the interface IF_T100_MESSAGE to the class, thereby allowing this convenient additional feature.

Another advantage is that you can continue to define errors like you always have: using SE91 message classes, thereby keeping things consistent.

Thanks to Sergio Aguirre for the photo.

Greetings from Abapinho

4 comentários a “Always use message classes in exception classes.”

  1. Bruno Diz:

    Olá Nuno!

    Tenho uma perguntinha. Se quiseres meter uma variável na mensagem, é possível usando uma classe de mensagens? O que eu estou a tentar criar é algo do estilo da classe de excepção CX_SY_FILE_OPEN_MODE, que, quando “lançada”, pode retornar-te três mensagens diferentes, consoante o tipo de erro, com o nome do ficheiro. Por exemplo “The file ‘&FILENAME&’ is not open”.

    Obrigado!

    Abraço,
    Bruno

  2. Bruno Diz:

    Olá de novo,

    Na realidade, com os meus testes, acabei de descobrir que não é preciso usar a classe de mensagens para se poder usar o comando MESSAGE directamente. E assim consegui fazer o que queria, que era lançar uma mensagem de erro com o número de documento em erro:

    TRY.

    RAISE EXCEPTION TYPE zcx_qualnot
    EXPORTING
    v_qmnum = lv_qmnum.

    CATCH zcx_qualnot INTO lo_root.

    MESSAGE lo_root TYPE ‘E’.

    ENDTRY.

    A mensagem que é apresentada: “Error in quality notification X”.

    Baseei-me na classe de excepção que mencionei acima.

    Abraço,
    Bruno

  3. Nuno Godinho Diz:

    Exacto, não é preciso ;)

  4. Jorge Paulinelli Diz:

    salve colega

    eu não sei porque mas não estava conseguindo me lembrar do código desta transação, já havia pesquisado spro, meus arquivos, alguns colegas e nada.

    mas o seu comentário era tudo que eu esperava encontrar.

    valeu mesmo…

Deixe um comentário


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).