1. CLASS zcl_msg DEFINITION.
  2.  
  3.   PUBLIC SECTION.
  4.  
  5.     TYPES: BEGIN OF ty_msg,
  6.              text TYPE  char100sm,
  7.              msgid  TYPE  symsgid,
  8.              msgty  TYPE  symsgty,
  9.              msgno  TYPE  symsgno,
  10.              msgv1  TYPE  symsgv,
  11.              msgv2  TYPE  symsgv,
  12.              msgv3  TYPE  symsgv,
  13.              msgv4  TYPE  symsgv,
  14.            END OF ty_msg.
  15.  
  16.     DATA: t_msg TYPE STANDARD TABLE OF ty_msg.
  17.  
  18.     METHODS: msg_add_sys IMPORTING iv_msgid TYPE symsgid
  19.                                    iv_msgno TYPE symsgno
  20.                                    iv_msgty TYPE symsgty
  21.                                    iv_msgv1 TYPE symsgv OPTIONAL
  22.                                    iv_msgv2 TYPE symsgv OPTIONAL
  23.                                    iv_msgv3 TYPE symsgv OPTIONAL
  24.                                    iv_msgv4 TYPE symsgv OPTIONAL,
  25.              msg_add_txt IMPORTING iv_text TYPE string
  26.                                    iv_msgty TYPE symsgty,
  27.              msg_display IMPORTING iv_popup TYPE boolean,
  28.              msg_refresh,
  29.              msg_check_error RETURNING value(rv_result) TYPE boolean.
  30.  
  31. ENDCLASS.                    "ZCL_MSG DEFINITION
  32.  
  33.  
  34. *----------------------------------------------------------------------*
  35. *       CLASS ZCL_MSG IMPLEMENTATION
  36. *----------------------------------------------------------------------*
  37. *
  38. *----------------------------------------------------------------------*
  39. CLASS zcl_msg IMPLEMENTATION.
  40.  
  41.   METHOD msg_check_error.
  42.     DATA: l_msg          TYPE ty_msg.
  43.  
  44.     READ TABLE t_msg WITH KEY msgty = 'E' TRANSPORTING NO FIELDS.
  45.     IF sy-subrc = 0.
  46.       rv_result = 'X'.
  47.     ELSE.
  48.       rv_result = ' '.
  49.     ENDIF.
  50.   ENDMETHOD.                    "msg_check_error
  51.  
  52.   METHOD msg_refresh.
  53.     REFRESH t_msg.
  54.   ENDMETHOD.                    "msg_refresh
  55.  
  56.   METHOD msg_display.
  57.     TYPE-POOLS esp1.
  58.     DATA: lt_message_tab TYPE esp1_message_tab_type,
  59.           ls_message_tab TYPE LINE OF esp1_message_tab_type,
  60.           l_msg          TYPE ty_msg,
  61.           l_lineno       TYPE mesg-zeile.
  62.     CHECK t_msg[] IS NOT INITIAL.
  63.     l_lineno = LINES( t_msg ).
  64.     IF iv_popup = 'X' OR l_lineno > 1.
  65.       LOOP AT t_msg INTO l_msg.
  66.         IF l_msg-msgid IS INITIAL.
  67. *--[ Si es sólo texto lo maquillamos
  68.           l_msg-msgid = '00'.
  69.           l_msg-msgno = '398'.
  70.         ENDIF.
  71.         MOVE-CORRESPONDING l_msg TO ls_message_tab.
  72.         l_lineno              = l_lineno + 1.
  73.         ls_message_tab-lineno = l_lineno.
  74.         INSERT ls_message_tab INTO TABLE lt_message_tab.
  75.       ENDLOOP.
  76.       CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
  77.         TABLES
  78.           i_message_tab = lt_message_tab.
  79.     ELSEIF iv_popup IS INITIAL OR l_lineno = 1.
  80.       READ TABLE t_msg INTO l_msg INDEX  1.
  81.       IF l_msg-msgid IS INITIAL.
  82. *--[ Si es sólo texto lo maquillamos
  83.         l_msg-msgid = '00'.
  84.         l_msg-msgno = '398'.
  85.       ENDIF.
  86.       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.
  87.     ENDIF.
  88.   ENDMETHOD.                    "msg_display
  89.  
  90.   METHOD msg_add_txt.
  91. *--[ Sólo metemos texto sin importar código
  92.     DATA: l_msg TYPE ty_msg,
  93.           l_string TYPE string.
  94.  
  95.     l_msg-msgv1 = l_string = l_msg-text = iv_text.
  96.     l_msg-msgty = iv_msgty.
  97.     SHIFT l_string LEFT BY 50 PLACES.
  98.     l_msg-msgv2 = l_string.
  99.     INSERT l_msg INTO TABLE t_msg.
  100.   ENDMETHOD.                    "msg_add_txt
  101.  
  102.   METHOD msg_add_sys.
  103. *--[ Metemos todo el mensaje completo
  104.     DATA: l_msg TYPE ty_msg.
  105.     l_msg-msgid = iv_msgid .
  106.     l_msg-msgno = iv_msgno .
  107.     l_msg-msgty = iv_msgty .
  108.     l_msg-msgv1 = iv_msgv1 .
  109.     l_msg-msgv2 = iv_msgv2 .
  110.     l_msg-msgv3 = iv_msgv3 .
  111.     l_msg-msgv4 = iv_msgv4 .
  112.     MESSAGE ID     iv_msgid TYPE l_msg-msgty
  113.     NUMBER l_msg-msgno
  114.     INTO   l_msg-text
  115.     WITH   l_msg-msgv1
  116.           l_msg-msgv2.
  117.     INSERT l_msg INTO TABLE t_msg.
  118.  
  119.   ENDMETHOD.                    "MSG_ADD
  120.  
  121. ENDCLASS.                    "ZCL_MSG IMPLEMENTATION
  122.  
  123. DATA: obj_msg TYPE REF TO zcl_msg.
  124.  
  125.  
  126. END-OF-SELECTION.
  127.  
  128.   CREATE OBJECT obj_msg.
  129.  
  130.   obj_msg->msg_add_txt( EXPORTING iv_text  = 'hay que mostrar este error'
  131.                                   iv_msgty = 'E' ).
  132.  
  133.   obj_msg->msg_display( EXPORTING iv_popup = 'X' ).