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.