"
Apoiado por

Usa sempre classes de mensagens nas classe de excepção

As classes de excepção permitem declarar múltiplos textos que descrevem os diferentes erros possíveis que elas podem representar.

Há no entanto uma opção para a associar a uma classe de mensagens (SE91). Isto permite que, em vez de os textos serem definidos directamente ali na classe de excepção, sejam antes definidos como clássicas mensagens da SE91. E tem vantagens.

À partida parece mais simples definir os textos directamente na classe de excepção. E foi isso que fiz até recentemente. Até que compreendi o que tinha a ganhar com a associação entre os dois.

Por exemplo, se o fizeres, em vez de teres de andar a recorrer ao método GET_TEXT() e a meter o resultado numa string e depois fazer MESSAGE dessa string, podes usar directamente a instância da excepção com o comando MESSAGE. Não é fantástico?

Ou seja, em vez de:


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.

Podes fazer simplesmente:


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

Isto acontece porque quando associas uma classe de excepção a uma classe de mensagens o SAP acrescenta automaticamente o interface IF_T100_MESSAGE à classe, permitindo assim esta conveniente funcionalidade adicional.

Outra vantagem é continuares a definir os erros como sempre o fizeste: usando as classes de mensagem da SE91, mantendo assim as coisas uniformizadas.

Obrigado a Sergio Aguirre pela foto.

O Abapinho saúda-vos.

4 comentários a “Usa sempre classes de mensagens nas classe de excepção”

  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


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).