El manejo de mensajes en ABAP permite la salida estructurada de mensajes de usuario y sistema. Con la sentencia MESSAGE y las clases de mensajes se pueden crear mensajes consistentes y multilingues.
Tipos de mensajes
Tipo
Nombre
Comportamiento
A
Abend (Abortar)
El programa termina
E
Error
Entrada bloqueada
W
Warning (Advertencia)
Confirmacion posible
I
Information
Mensaje emergente
S
Status (Exito)
Barra de estado
X
Exit
Programa termina con dump
Sintaxis
" Con clase de mensaje y numero
MESSAGE e001(zmessages).
" Con variables
MESSAGE e002(zmessages) WITH lv_value1 lv_value2.
" Dinamicamente
MESSAGEID'ZMESSAGES' TYPE'E'NUMBER'001'.
" Guardar en variable
MESSAGE e001(zmessages) INTODATA(lv_message).
Ejemplos
1. Mensajes simples
" Mensaje de exito en barra de estado
MESSAGE s001(zmessages).
" 'Operacion realizada con exito'
" Mensaje de error
MESSAGE e002(zmessages).
" 'Error en el procesamiento'
" Advertencia
MESSAGE w003(zmessages).
" 'Atencion: Los datos han sido modificados'
" Informacion (emergente)
MESSAGE i004(zmessages).
" 'Por favor tenga en cuenta las indicaciones'
2. Mensajes con variables
" Texto del mensaje: "Cliente & fue creado"
MESSAGE s010(zmessages) WITH lv_kunnr.
" Texto del mensaje: "Pedido & Posicion & fue modificado"
MESSAGE s011(zmessages) WITH lv_vbeln lv_posnr.
" Hasta 4 variables posibles
MESSAGE e012(zmessages) WITH lv_var1 lv_var2 lv_var3 lv_var4.
3. Guardar mensaje en variable
" No mostrar mensaje, sino guardarlo
MESSAGE e001(zmessages) INTODATA(lv_message).
" Con variables
MESSAGE e010(zmessages) WITH lv_kunnr INTO lv_message.
" sy-msgty, sy-msgid, sy-msgno se establecen
WRITE: /'Tipo:', sy-msgty,
/'Clase:', sy-msgid,
/'Numero:', sy-msgno,
/'Texto:', lv_message.
4. Mensajes dinamicos
DATA: lv_msgid TYPEsy-msgidVALUE'ZMESSAGES',
lv_msgty TYPEsy-msgtyVALUE'E',
lv_msgno TYPEsy-msgnoVALUE'001',
lv_msgv1 TYPE sy-msgv1,
lv_msgv2 TYPEsy-msgv2.
" Salida dinamica
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2.
" O con INTO
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2
INTODATA(lv_text).
5. Mensajes desde excepciones
TRY.
" Codigo que lanza excepcion
DATA(lo_processor) =NEW zcl_processor( ).
lo_processor->process( ).
CATCH cx_root INTODATA(lx_error).
" Texto de excepcion como mensaje
MESSAGE lx_error TYPE'E'.
" O en barra de estado
MESSAGE lx_error TYPE'S'DISPLAY LIKE'E'.
ENDTRY.
6. DISPLAY LIKE para apariencia de barra de estado
" Mensaje de error como mensaje de estado (sin emergente)
MESSAGE e001(zmessages) DISPLAY LIKE'S'.
" Exito en barra de estado con icono de error
MESSAGE s001(zmessages) DISPLAY LIKE'E'.
" Informacion mostrada como advertencia
MESSAGE i001(zmessages) DISPLAY LIKE'W'.
7. Clase de mensajes como constantes
CLASS zcl_messages DEFINITION.
PUBLIC SECTION.
CONSTANTS:
" Clase de mensaje
c_msgid TYPEsy-msgidVALUE'ZMYAPP',
" Numeros de mensaje
c_success_saved TYPEsy-msgnoVALUE'001',
c_error_not_found TYPEsy-msgnoVALUE'002',
c_error_no_auth TYPEsy-msgnoVALUE'003',
c_warning_duplicate TYPEsy-msgnoVALUE'004'.
CLASS-METHODS: show_success
IMPORTING iv_object TYPE string.
CLASS-METHODS: show_error
IMPORTING iv_message TYPE string.
CLASS-METHODS: get_message
IMPORTING iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL
RETURNINGVALUE(rv_text) TYPE string.
ENDCLASS.
CLASS zcl_messages IMPLEMENTATION.
METHODshow_success.
MESSAGE s001(zmyapp) WITH iv_object.
ENDMETHOD.
METHODshow_error.
MESSAGEID c_msgid TYPE'E'NUMBER c_error_not_found
WITH iv_message.
ENDMETHOD.
METHODget_message.
MESSAGEID c_msgid TYPE'S'NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO rv_text.
ENDMETHOD.
ENDCLASS.
" Uso
zcl_messages=>show_success( 'Cliente 1000' ).
DATA(lv_msg) = zcl_messages=>get_message(
iv_msgno = zcl_messages=>c_error_not_found
iv_var1 ='Pedido'
).
8. BAPIRET2 para mensajes de retorno
TYPES: ty_messages TYPE STANDARD TABLE OF bapiret2 WITHEMPTY KEY.
CLASS zcl_message_collector DEFINITION.
PUBLIC SECTION.
METHODS: add_success
IMPORTING iv_message TYPE string.
METHODS: add_error
IMPORTING iv_msgid TYPEsy-msgid
iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL.
METHODS: add_from_sy.
METHODS: has_errors
RETURNINGVALUE(rv_result) TYPE abap_bool.
METHODS: get_messages
RETURNINGVALUE(rt_messages) TYPE ty_messages.
METHODS: display_all.
PRIVATE SECTION.
DATA: mt_messages TYPE ty_messages.
ENDCLASS.
CLASS zcl_message_collector IMPLEMENTATION.
METHODadd_success.
APPENDVALUE bapiret2(
type='S'
message= iv_message
) TO mt_messages.
ENDMETHOD.
METHODadd_error.
DATA: lv_text TYPE string.
MESSAGEID iv_msgid TYPE'E'NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO lv_text.
APPENDVALUE bapiret2(
type='E'
id= iv_msgid
number= iv_msgno
message= lv_text
message_v1 = iv_var1
message_v2 = iv_var2
) TO mt_messages.
ENDMETHOD.
METHODadd_from_sy.
" Mensaje desde variables sy-msg*
APPENDVALUE bapiret2(
type=sy-msgty
id=sy-msgid
number=sy-msgno
message_v1 =sy-msgv1
message_v2 =sy-msgv2
message_v3 =sy-msgv3
message_v4 =sy-msgv4
) TO mt_messages.
ENDMETHOD.
METHODhas_errors.
rv_result =xsdbool( line_exists( mt_messages[ type='E' ] ) OR