消息
report <程序名> message-ID <消息类名>
message e000."这里000在消息类中创建指代文本
MESSAGE命令显示由程序开始处REPORT语句中指定的消息ID定义的消息。 消息ID是一个2字符代码,用于定义在使用MESSAGE命令时程序将访问的1000个消息的集合。
消息编号从000到999.与每个数字相关联的消息文本最多为80个字符。 调用消息号时,将显示相应的文本。
以下是用于Message命令的字符。
信息 | 类型 | 后果 |
---|---|---|
E | Error | 消息出现,应用程序在当前点暂停。 如果程序在后台模式下运行,则作业将被取消,并且消息将记录在作业日志中。 |
W | Warning | 将出现该消息,用户必须按Enter键才能继续应用程序。 在后台模式下,消息将记录在作业日志中。 |
I | Information | 将打开一个弹出窗口,其中包含消息文本,用户必须按Enter键才能继续。 在后台模式下,消息将记录在作业日志中。 |
A | Abend | 此消息类将取消用户当前正在使用的事务。 |
S | Success | 这会在屏幕底部提供一条信息性消息。 显示的信息是正性的,它只是为用户反馈。 该消息不以任何方式阻碍程序。 |
X | Abort | 此消息中止程序并生成ABAP短转储。 |
错误消息通常用于阻止用户做不应该做的事情。 警告消息通常用于提醒用户他们的行动的后果。 信息消息给用户有用的信息。
例子
当我们为消息创建消息时,ID AB,MESSAGE命令 - MESSAGE E011给出以下输出:
EAB011 This report does not support sub-number summarization.
14. Messages
14.1. 00消息ID中的通用消息
00消息ID中的001消息本身未设置任何消息串,这条消息可以传递8个参数,在用于拼接消息时很有用
MESSAGE e001(00) WITH 'No local currecny maintained for company:' p_bukrs.
14.2. 消息常量
直接显示消息常量,不引用消息ID与消息号
MESSAGE 'aaaa' TYPE 'S'.
14.3. 静态指定
MESSAGE <t><nnn>(<id>) [with<f1>... <f4>][raising <exc>].
MESSAGE s002(00).
14.4. 动态指定
MESSAGE ID <id> TYPE <t> NUMBER <n> [with<f1>...<f4>] [raising <exc>].
DATA: t(1) VALUE 'S',
id(2) VALUE '00',
num(3) VALUE '002'.
MESSAGE ID id TYPE t NUMBER num.
14.5. 消息拼接MESSAGE …INTO
DATA mtext TYPE string.
CALL FUNCTION ... EXCEPTIONS error_message = 4.
IF sy-subrc = 4.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO msgtext
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
14.6. 修改消息显示性为…DISPLAY LIKE…
此种方式不会影响到消息本身的处理性为,只是改变了消息的显示图标类型,如下面只是改变了S类型消息在状态栏中以错误图标来显示(本来是绿色状态图标):
MESSAGE msg TYPE 'S' DISPLAY LIKE 'E'.
:消息以异常形式抛出">14.7. RAISING <exc>:消息以异常形式抛出
MESSAGE ID 'SABAPDEMOS' TYPE MESSAGE_TYPE NUMBER '777'
WITH MESSAGE_TYPE MESSAGE_PLACE MESSAGE_EVENT
RAISING MESS.
当使用该选项后,并且如果在调用的地方(CALL FUNCTION或者是 CALL METHOD的地方)使用了EXCEPTION选项来捕获RAISING抛出的异常,则不再以MESSAGE的原有形式来显示消息,而是被主调捕获后进一步处理或者是程序Dump(A、E、W、I、S类型都能被捕获到,但X类型的Message不会走到被主调者捕获这一步,因为在被调程序中就宕掉了);反过来,当主调者未使用EXCEPTION选项(或者使用了但未捕获到所抛出的异常),则RAISING选项会被忽略,MESSAGE语句会按照无RAISING选项时那样运行(弹框还是在状态栏中显示、以及程序是否终止等性为、还是转换为error_message抛出)
如果加了选项RAISING时:MESSAGE... RAISING <exc>,此时的Message 的处理方式与是否显示,就要依赖于主调者在调用时,是否加上了exception <exc>选项:
1、如果调用时没有带exception <exc>选项,此时Message语包中的RAISING <exc>选项抛出的异常将会被忽略,Message语句会当作正常消息来处理
2、 如果调用时加上了exception <exc>选项对exc 异常进行了捕获,则不会再显示消息(但如果即使加上了exception选项,但没有捕获到exc异常,则此时会忽略RAISING选项),并设置sy-subrc。只要异常被捕获,相关消息内容将会入存入到SY-MSGID,SY-MSGTY, SY-MSGNO, and SY-MSGV1 to SY-MSGV4有关系统变量中。