MESSAGE 简单操作

SAP Message 存储的内表

T100、T100C、T100S、T100U、T160M

  • T100:该表包括所有的消息
  • T100C:通常包括修改后的消息,即修改默认消息类型后的值存在该表中
  • T100S:表示可以修改消息类型的表

消息类的操作

使用事物码 SE91 对 Message 定义,还能够对 Message 进行创建,修改及删除等维护操作。

Message Short Text 字段为类描述,可以定义输入参数&,通过‘&’定义多个占位符,如"1&2&3&“表示有三个输入参数。

定义消息类

MESSAGE E001(ZTEST).

  • E:消息显示类型 (Message共分以下几种类型:E:错误、W:警告、I:信息、A:异常中止、S:成功)

  • 001:自定义的消息字段

  • ZTEST:自定义的消息类

系统消息组成完整文本

函数模块调用后的 sy-subrc:如果未引发异常,则调用会将 sy-subrc 设置为 0;这也适用于方法调用。

使用 MESSAGE INOT text:

DATA msgtext TYPE string.
"CALL BAPI"
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    INTO msgtext
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. 

调用函数将消息组成文本:

DATA msgtext TYPE string.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
  EXPORTING
    msgid = sy-msgid
    msgnr = sy-msgno
    msgv1 = sy-msgv1
    msgv2 = sy-msgv2
    msgv3 = sy-msgv3
    msgv4 = sy-msgv4
  IMPORTING
    message_text_output = msgtext.

MESSAGE 显示

利用定义的参数:MESSAGE e001(00) WITH '12345678'.

直接添加消息文本:MESSAGE 'XXXXXXXXXX' TYPE 'X'.

Display Like 使用:MESSAGE s001(00) WITH 'No data' DISPLAY LIKE 'E'.

其它方式处理 Message

增强的 Warning Message 不显示

在 ME22N 的增强面临这样的问题。 使用以下方法显示警告消息并将其附加到在检查文档时获得的日志中的警告消息。

DATA: msgv1 TYPE symsgv,
      msgv2 TYPE symsgv,
      msgv3 TYPE symsgv,
      msgv4 TYPE symsgv.
CALL METHOD cl_message_mm=>create
  EXPORTING
    im_msgid = 'Z01'
    im_msgty = 'W'
    im_msgno = '195'
    im_msgv1 = msgv1
    im_msgv2 = msgv2
    im_msgv3 = msgv3
    im_force_collect = 'X'.

用函数方式返回消息显示

Message init:MESSAGES_INITIALIZE

Sotrage message:MESSAGE_STORE

Message show:MESSAGES_GIVE、MESSAGES_SHOW

DATA: lt_mesg TYPE TABLE OF mesg WITH HEADER LINE.
LOOP AT message.
  lt_mesg-zeile = message-row.
  lt_mesg-msgty = message-type.
  lt_mesg-text = message-message.
  lt_mesg-arbgb = message-id.
  lt_mesg-txtnr = message-number.
  lt_mesg-msgv1 = message-message_v1.
  lt_mesg-msgv2 = message-message_v2.
  lt_mesg-msgv3 = message-message_v3.
  lt_mesg-msgv4 = message-message_v4.
  APPEND lt_mesg.
  CLEAR lt_mesg.
ENDLOOP.
**--messages init
CALL FUNCTION 'MESSAGES_INITIALIZE'
  EXPORTING
    collect_and_send = ''.
**--message store
LOOP AT lt_mesg.
  CALL FUNCTION 'MESSAGE_STORE'
    EXPORTING
      arbgb                  = lt_mesg-arbgb
*     EXCEPTION_IF_NOT_ACTIVE       = 'X'
      msgty                  = lt_mesg-msgty
      msgv1                  = lt_mesg-msgv1
      msgv2                  = lt_mesg-msgv2
      msgv3                  = lt_mesg-msgv3
      msgv4                  = lt_mesg-msgv4
      txtnr                  = lt_mesg-txtnr
      zeile                  = lt_mesg-zeile
*   IMPORTING
*     ACT_SEVERITY           =
*     MAX_SEVERITY           =
    EXCEPTIONS
      message_type_not_valid = 1
      not_active             = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDLOOP.
**--message show
REFRESH: lt_mesg.
CALL FUNCTION 'MESSAGES_GIVE'
  TABLES
    t_mesg = lt_mesg.
CALL FUNCTION 'MESSAGES_SHOW'
  EXPORTING
    show_linno         = ''
    i_use_grid         = ''
    i_amodal_window    = ''
  EXCEPTIONS
    inconsistent_range = 1
    no_messages        = 2
    OTHERS             = 3.

获取消息内容的BAPI

DATA l_msgid    TYPE bapiret2-id.
DATA l_msgnr    TYPE bapiret2-number.
DATA l_message  TYPE bapiret2-message.
CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
  EXPORTING
    id                 = l_msgid
    number             = l_msgnr
    language           = sy-langu
    textformat         = 'HTM'
*   LINKPATTERN        =
*   MESSAGE_V1         =
*   MESSAGE_V2         =
*   MESSAGE_V3         =
*   MESSAGE_V4         =
*   LANGUAGE_ISO       =
  IMPORTING
    message            = l_message.
*   RETURN             =
* TABLES
*   TEXT               =    .

处理 CALL Function 的错误

当我们调用系统 Function 执行业务出现错误时,程序运行将停止,Function 会抛出对话框消息。

当我们需要批量处理业务,并且如果其中一个调用出现错误,但是我们仍需继续处理时,要如何处理?SAP 为我们提供了一个隐藏功能:预定义异常 ERROR_MESSAGE 。此异常将捕获所有 E 和 A 类型的消息,并且可以在 SY 结构中访问消息详细信息 。

CALL FUNCTION 'RV_INVOICE_CREATE'
  EXPORTING
    vbsk_i        = vbsk_i
  TABLES
    xkomfk        = xkomfk
    xkomv         = xkomv
    xthead        = xthead
    xvbfs         = xvbfs
    xvbpa         = xvbpa
    xvbrk         = xvbrk
    xvbrp         = xvbrp
    xvbss         = xvbss
  EXCEPTIONS
    error_message = 1.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.