Calem-se as mensagens das funções
Há módulos de função standard que lançam mensagens e não deviam. Não deviam porque depois queremos usá-las em programas não interactivos e, em vez de devolverem o erro, atiram com uma mensagem para o ecrã que dá cabo do processo.
Mas, provavelmente por ter tomado consciência deste problema, a SAP disponibilizou uma forma elegante (mas muito mal documentada) de resolver o problema.
Imagina que tens o seguinte módulo de função:
FUNCTION zzt_message.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXCEPTIONS
*" HELLO
*" GOODBYE
*"----------------------------------------------------------------------
MESSAGE e002(00).
ENDFUNCTION.
Puxa novamente pela imaginação e concebe a possibilidade de teres este programa:
REPORT zverso_nao.
CALL FUNCTION 'ZZT_NFG_MESSAGE'
EXCEPTIONS
hello = 1
goodbye = 2
OTHERS = 3.
WRITE 'Por muito tempo achei que a ausência é falta'.
O que se passa é que, em vez de escrever um verso de um poema do Carlos Drummond de Andrade, o programa vai dar um erro e parar.
Mas com um simples truque, dá-se voz à poesia:
REPORT zverso_sim.
CALL FUNCTION 'ZZT_NFG_MESSAGE'
EXCEPTIONS
hello = 1
goodbye = 2
ERROR_MESSAGE = 3
OTHERS = 4.
WRITE 'Por muito tempo achei que a ausência é falta'.
Exactamente. Basta acrescentar a excepção virtual ERROR_MESSAGE antes da OTHERS e a mensagem não salta. O SY-SUBRC fica 3 para avisar que houve uma mensagem de erro e o programa já pode tornar o mundo mais bonito.
Obrigado Miguel Jorge pela dica.
O Abapinho saúda-vos.