Usa sempre classes de mensagens nas classe de excepção
![images/thumbnail.jpg - Thumbnail](/2013/12/classes-de-mensagens-nas-classe-de-excepcao/images/thumbnail_hue642dbcfa569bc8acbfe765e2a4ed4e7_23156_300x0_resize_q75_box.jpg)
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.