CLASS zcl_msg DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_msg,
text TYPE char100sm,
msgid TYPE symsgid,
msgty TYPE symsgty,
msgno TYPE symsgno,
msgv1 TYPE symsgv,
msgv2 TYPE symsgv,
msgv3 TYPE symsgv,
msgv4 TYPE symsgv,
END OF ty_msg.
DATA: t_msg TYPE STANDARD TABLE OF ty_msg.
METHODS: msg_add_sys IMPORTING iv_msgid TYPE symsgid
iv_msgno TYPE symsgno
iv_msgty TYPE symsgty
iv_msgv1 TYPE symsgv OPTIONAL
iv_msgv2 TYPE symsgv OPTIONAL
iv_msgv3 TYPE symsgv OPTIONAL
iv_msgv4 TYPE symsgv OPTIONAL,
msg_add_txt IMPORTING iv_text TYPE string
iv_msgty TYPE symsgty,
msg_display IMPORTING iv_popup TYPE boolean,
msg_refresh,
msg_check_error RETURNING value(rv_result) TYPE boolean.
ENDCLASS. "ZCL_MSG DEFINITION
*----------------------------------------------------------------------*
* CLASS ZCL_MSG IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS zcl_msg IMPLEMENTATION.
METHOD msg_check_error.
DATA: l_msg TYPE ty_msg.
READ TABLE t_msg WITH KEY msgty = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
rv_result = 'X'.
ELSE.
rv_result = ' '.
ENDIF.
ENDMETHOD. "msg_check_error
METHOD msg_refresh.
REFRESH t_msg.
ENDMETHOD. "msg_refresh
METHOD msg_display.
TYPE-POOLS esp1.
DATA: lt_message_tab TYPE esp1_message_tab_type,
ls_message_tab TYPE LINE OF esp1_message_tab_type,
l_msg TYPE ty_msg,
l_lineno TYPE mesg-zeile.
CHECK t_msg[] IS NOT INITIAL.
l_lineno = LINES( t_msg ).
IF iv_popup = 'X' OR l_lineno > 1.
LOOP AT t_msg INTO l_msg.
IF l_msg-msgid IS INITIAL.
*--[ Si es sólo texto lo maquillamos
l_msg-msgid = '00'.
l_msg-msgno = '398'.
ENDIF.
MOVE-CORRESPONDING l_msg TO ls_message_tab.
l_lineno = l_lineno + 1.
ls_message_tab-lineno = l_lineno.
INSERT ls_message_tab INTO TABLE lt_message_tab.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_message_tab.
ELSEIF iv_popup IS INITIAL OR l_lineno = 1.
READ TABLE t_msg INTO l_msg INDEX 1.
IF l_msg-msgid IS INITIAL.
*--[ Si es sólo texto lo maquillamos
l_msg-msgid = '00'.
l_msg-msgno = '398'.
ENDIF.
MESSAGE ID l_msg-msgid TYPE l_msg-msgty NUMBER l_msg-msgno WITH l_msg-msgv1 l_msg-msgv2 l_msg-msgv3 l_msg-msgv4.
ENDIF.
ENDMETHOD. "msg_display
METHOD msg_add_txt.
*--[ Sólo metemos texto sin importar código
DATA: l_msg TYPE ty_msg,
l_string TYPE string.
l_msg-msgv1 = l_string = l_msg-text = iv_text.
l_msg-msgty = iv_msgty.
SHIFT l_string LEFT BY 50 PLACES.
l_msg-msgv2 = l_string.
INSERT l_msg INTO TABLE t_msg.
ENDMETHOD. "msg_add_txt
METHOD msg_add_sys.
*--[ Metemos todo el mensaje completo
DATA: l_msg TYPE ty_msg.
l_msg-msgid = iv_msgid .
l_msg-msgno = iv_msgno .
l_msg-msgty = iv_msgty .
l_msg-msgv1 = iv_msgv1 .
l_msg-msgv2 = iv_msgv2 .
l_msg-msgv3 = iv_msgv3 .
l_msg-msgv4 = iv_msgv4 .
MESSAGE ID iv_msgid TYPE l_msg-msgty
NUMBER l_msg-msgno
INTO l_msg-text
WITH l_msg-msgv1
l_msg-msgv2.
INSERT l_msg INTO TABLE t_msg.
ENDMETHOD. "MSG_ADD
ENDCLASS. "ZCL_MSG IMPLEMENTATION
DATA: obj_msg TYPE REF TO zcl_msg.
END-OF-SELECTION.
CREATE OBJECT obj_msg.
obj_msg->msg_add_txt( EXPORTING iv_text = 'hay que mostrar este error'
iv_msgty = 'E' ).
obj_msg->msg_display( EXPORTING iv_popup = 'X' ).