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