Messages消息处理
Messages
消息维护
所有的消息都是存储在T100表里的,可以使用1事务码来维护:
00系统消息ID(8占位符)
) WITH 'No local currecny maintained for company:' p_bukrs.
上面的00为系统预定义的消息类,如下:
从上面可以看出,001这条消息可以传递8个参数。
语法规则
使用全局的Message Class
以下程序定义语句后面可以加上选项:...MESSAGE-ID<id>.
这样在这些类型的的程序里可以这样来使用MESSAGE语句:
MESSAGE<t><num>[WITH<f1>... <f4>][RAISING<exc>].
.
MESSAGE s002.
静态的指定Message
MESSAGE <t><nnn>(<id>) [WITH<f1>... <f4>][RAISING<exc>].
).
这里在语句中指定了消息ID,如果程序开头指定了消息Class,则这里也会将它覆盖,使用此语句中的消息ID。
动态的指定Message
MESSAGE ID <id> TYPE <t> NUMBER <n> [WITH<f1>...<f4>] [RAISING<exc>].
) VALUE '002'.
MESSAGE ID id TYPE t NUMBER num.
INTO msgtext 、DISPLAY LIKE dtype选项
这两个选项对于以上3个(使用全局的Message Class、静态的指定Message、动态的指定Message)都有效。
使用MESSAGE … INTO…可以很方便拼接BDC执行返回结果:
data: gt_messtab type table of bdcmsgcoll with header line .
call transaction 'VA02' using bdcdata
* MODE 'A'
mode p_runtp
update 'S'
messages into gt_messtab.
loop at gt_messtab .
message id gt_messtab-msgid type gt_messtab-msgtyp number gt_messtab-msgnr
with gt_messtab-msgv1
gt_messtab-msgv2
gt_messtab-msgv3
gt_messtab-msgv4
into l_msg.
endloop.
.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO msgtext
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
INTO msgtext选项与Message Type没有关系(不管是什么类型,即使是X类型,也会将消息存入到msgtext变量中),这不像RAISING选项。
DISPLAY LIKE dtype:
对于原先就以dialog box方式显示的消息,仍然还是显示在dialog box中。
如果dtype为A或者是I类型时,E、W类型的消息(除开PBO与LOAD-OF-PROGRAM)将会在dialog box中显示。
不管dtype类型为什么,S类型的消息都会显示在状态栏中,PBO与LOAD-OF-PROGRAM中的I类型消息也是这样。
X类型消息总会引起运行时错误。
注:此种方式不会影响到消息本身的性为处理,只是改变了消息的显示类型(图标),如下面只是改变了S类型消息在状态栏中以错误图标来显示:
MESSAGE msg TYPE 'S' DISPLAY LIKE 'E'.
直接显示消息常量,不引用消息ID与消息号
MESSAGE msgtext TYPE c
MESSAGE 'aaaa' TYPE 'S'.
选项">RAISING <exc>选项:消息以异常形式抛出(是否以异常形式抛出还要看主调函数是否捕获了)
该选项对于以上4个(使用全局的Message Class、静态的指定Message、动态的指定Message、直接显示消息常量)都有效。
MESSAGE ID 'SABAPDEMOS' TYPE MESSAGE_TYPE NUMBER '777'
WITH MESSAGE_TYPE MESSAGE_PLACE MESSAGE_EVENT
RAISING MESS.
RAISING 后面接的是异常名(如下面的MESS异常),只有在Function或Class中定义的异常,才能用在RAISING选项的后面,具体使用过程如下:
当使用该选项后,并且如果在调用的地方(CALL FUNCTION或者是 CALL METHOD的地方)使用了EXCEPTION选项来捕获RAISING抛出的异常,则不再以MESSAGE的原有形式来显示消息,而是被主调捕获后进一步处理或者是程序Dump(AEIWS类型都能被捕获到,但X类型的Message不会走到被主调者捕获这一步,因为在被调程序中就宕掉了);反过来,当主调者未使用EXCEPTION选项(或者使用了但未捕获到所抛出的异常),则RAISING选项会被忽略,MESSAGE语句会按照无RAISING选项时那样运行(弹框还是在状态栏中显示、以及程序是否终止等性为)。
下面程序中,第一次调用时中会弹出消息框(因为没有使用EXCEPTIONS选项捕获),而第二次不会弹出消息框,也不会在状态栏中显示,而是被后继程序捕获后输出:
.
write: / '被捕获'.
ENDIF.
下面也不会显示错误消息,因E类型消息(注:不是异常,是消息)被error_message所捕获了:
FUNCTION ZJZJ_FUNC1.
MESSAGE id '00' TYPE 'E' NUMBER 001 WITH '1' '2'.
ENDFUNCTION.
.
WRITE: / '被捕获'.
ENDIF.
RAISING异常后,与消息相关的信息分别存储到相应系统字段中:
SY-MSGID 消息类
SY-MSGNO消息号
SY-MSGTY 消息类型
SY-MSGV1 ... SY-MSGV4 消息参数
.
write: / SY-MSGID.
write: / SY-MSGNO.
write: / SY-MSGTY.
write: / SY-MSGV1.
write: / SY-MSGV2.
ENDIF.
CALL FUNCTION[error_message]
CALL FUNCTION func ...[EXCEPTIONS[exc1= n1 exc2= n2 ...]
[others= n_others] ].
[error_message = n_error]
exc1,exc2...与OTHERS异常只能捕获到MESSAGE...RAISING选项或RAISE语句抛出的异常,即MESSAGE...RAISING与RAISE抛出的异常只能被exc1,exc2...与OTHERS异常所捕获,而error_message是无法捕获MESSAGE...RAISING与RAISE抛出的异常的。
error_message为系统内置的隐式性异常,主用来捕获那些未使用RAISING选项的A、E两类消息(注:error_message的作用是用来捕获消息的,而不是针对MESSAGE...RAISING与RAISE抛出的异常)
在主调程序中使用error_message来捕获Message请参考:在主调程序中捕获Message
MESSAGE中的RAISING<exc1...exci>抛出异常时,如果在Call Function的Exception列表中有exc1...exci或others异常,则会、2两点说明):
E
D .
WRITE: / '2'.
ENDIF.
RAISE语句(触发异常)
在Function Module里有两种方式触发异常(注:下面二种也只能在Function Module使用):
l RAISE <except>.
l MESSAGE..... RAISING <except>.
这些语句的作用依赖于主调程序中是否处理<except>异常。如果异常<except>或者others出现在了CALL FUNCTION语句中的EXCEPTIONS选项中,<except>异常将会被主调程序所捕获。如果主调程序没有捕获<except>异常,则:
l RAISE 语句会终止程序并且切换到debug模式
l MESSAGE ..... RAISING语句会根据message type来像MESSAGE语句那样正常显示消息(前提条件是要在CALL FUNCTION 语句中使用error_message来捕获消息)
一旦主调程序捕获了异常,以上两种触发异常的方式都会返回到主调程序,并且不会返回值(Function Module参数输出)。MESSAGE ..... RAISING语句也不会再显示消息,而是将相关的信息填充到SY-MSGID, SY-MSGTY,SY-MSGNO, and SY-MSGV1 to SY-MSGV4这些系统变量中(即使是I,S,W三种消息类型也会设置这些系统变量)
RAISE [RESUMABLE] EXCEPTION { { TYPE cx_class [EXPORTING p1 = a1 p2 = a2 ...]} | oref }.
cx_class为异常Class,EXPORTING为构造此异常类的构造参数,oref可以是已存在的异常Class引用,如:
.
CATCH cx_sy_zerodivide INTO oref.
text = oref->get_text( ).
RAISE EXCEPTION oref."捕获后继续向外层抛出,在函数里不需Exception选项,请参考下面示例(可能抛出是non-class-based exceptions,而不是class-based exceptions吧?)
ENDTRY.
CATCH cx_root INTO oref.
text = oref->get_text( ).
WRITE: / text.
ENDTRY.
RAISE EXCEPTION语句一般用来抛出基于Class的异常类class-based exceptions,而RAISE一般是直接用来抛出 non-class-based exceptions,如:
FUNCTION ZJZJ_FUNC1.
RAISE e.
ENDFUNCTION.
.
WRITE: / '1'.
ENDIF.
RESUMABLE选项
表示可恢复的异常,可以在CATCH块里使用RESUME语句直接跳到抛出异常语句后面继续执行,RESUME后面语句不再被执,CLEANUP块也不会被执行。该选项只能用于BEFORE UNWIND类型的CATCH块中:
.
RESUME.
ENDIF.
WRITE:/ '--'.
ENDTRY.
结果只输出 1
Message Types
X |
Exit 退出 |
Nomessageis displayed,andtheprogramterminateswitha shortdump. Programterminationswithashortdumpnormallyonlyoccurwhena runtimeerroroccurs.MessagetypeX allowsyoutoforceaprogram termination.TheshortdumpcontainsthemessageID. 消息不会显示,程序会终止并伴随着shortdump.信息。程序终止一般是由于运行时错误,但X消息允许你强迫终止程序。运行时会产生错误,屏幕显示异常的堆栈信息 |
A |
Abend 终止 |
Themessageappearsinadialogbox,andtheprogramterminates.Whentheuserhasconfirmedthemessage,controlreturnstothenext- highestareamenu. 此种消息只能以模式对话框来显示,并且会终止当应用程序。当用户确认后,控制权返回到最高层区域菜单所在屏幕,即“SAP Easy Access”初始屏幕:程序被取消 |
E |
Error 错误 |
Depending ontheprogram context, an errordialogappearsorthe programterminates. 依赖于程序上下文(可能显示在对话框中或状态栏上),显示错误对话框或者是终止程序(工具条按钮变灰,但不会中转到SAP Easy Access屏幕) |
W |
Warning 警告 |
Depending ontheprogram context, an errordialogappearsorthe programterminates. 依赖于程序上下文(可能显示在对话框中或状态栏上),显示错误对话框或者是终止程序(工具条按钮变灰,但不会中转到SAP Easy Access屏幕) |
I |
Information 消息 |
Themessageappearsinadialogbox.Oncetheuserhasconfirmedthemessage,theprogramcontinuesimmediatelyaftertheMESSAGE statement. 此种类型的消息只会出现在显示在对话框中。一旦用户确认了对话框,程序将继续执行MESSAGE语句后面的语句 |
S |
Status 状态 |
TheprogramcontinuesnormallyaftertheMESSAGEstatement,andthemessageisdisplayedinthestatusbarof thenextscreen. 程序会继续执行MESSAGE后面的语句,并且消息将显示在下一屏幕的状态栏中(如果没有下一屏幕,则显示在本屏幕的状态栏中)。程序不会被中断 |
消息显示及处理
Messages可以以模式对话框或者在屏幕的状态栏中显示,这究竟如何显示,则依赖限Messages的类型与运行时MESSAGE语句所在上下文环境。
特别是是E 与 W类型的消息,它们的行为与所在的程序上下文相关。
非屏幕PAI事件块中
适用所有不属于任何屏幕处理事件块。非屏幕处理包括以下事件块:
n PBO(PBO of screens):对话屏幕的PBO块
n The selection screen event AT SELECTION-SCREEN OUTPUT(PBO of a selection screen)选择屏幕的PBO块
n 报表程序事件块:INITIALIZATION、START-OF-SELECTION、GET、END-OF-SELECTION
n 列表事件块TOP-OF-PAGE、END-OF-PAGE
另:此节具体的各种情况下的演示,还可以通过 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)此节的程序来演示
类型 |
Display显示 (显示在对话框中还是状态栏中) |
Processing处理(是终止程序还是继续,以及终止时返回到哪里)(注:显示及处理是不一样的) |
X |
None 不显示信息 |
Triggers a runtime error with short dump 触发运行时错误并伴随着dump |
A |
Dialogbox以对话框形式显示: |
Programterminates,andcontrolreturnstolastarea menu 并且会终止当应用程序,控制权返回到“SAP Easy Access”初始屏幕 |
E |
In PBO context,the same as type A, otherwise statusbar 在PBO块里与A类型相同(指显示方式相同,即以对话框形式显示): 否则(指那些上面除PBO以外的事件块——INITIALIZATION、START-OF-SELECTION、GET、END-OF-SELECTION、TOP-OF-PAGE、END-OF-PAGE)显示在状态栏中(此种情况贴图在右边)。 |
In PBO context like type A, otherwise,program terminates and control returns to pointfrom which the program was called 在PBO块里与A类型消息相同(指处理方式相同,即退出应用程序,并跳转到欢迎屏幕);否则,程序终止,但控制权返回到该程序被调用的地方(指界面停留在运行前的地方): |
W |
In PBO context,thes a meas type S, otherwise statusbar 在PBO里与S类型相同: 否则显示在状态栏中(此种情况贴图在右边)。 |
In PBO context like type S,otherwise,program terminates andcontrol returns to point from which the program was called 在PBO中与S类型相同 否则,程序终止,并且控制权返回到程序被调用的地方(指界面停留在调用前的地方): |
I |
In PBO context,thes a meas type S,otherwise dialogbox 在PBO里与S类型相同: 否则以对话框的形式显示(此种情况贴图在右边)。 |
Program continues processing after the MESSAGE Statement 程序会继续向下执行 |
S |
Status bar of next screen 消息会显示在下一屏幕的状态栏中(前提是有下一屏幕): 如果没有下一屏幕,则显示在当前屏幕的状态栏中(此种情况贴图在右边)。 |
Program continues processing after the MESSAGE Statement 程序会继续向下执行 |
屏幕中(对话屏幕)
会影响用户的的输入性为。屏幕处理即所有的PAI modules
另:此节具体的各种情况下的演示,还可以通过 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)此节的程序来演示
类型 |
Display显示 (显示在对话框中还是状态栏中) |
Processing处理 (是终止程序还是继续,以及终止时返回到哪里) |
X |
None 不会显示消息 |
Triggers a runtime error with short dump 触发运行时错误并伴随着dump |
A |
Dialog box以对话框显示 |
Program terminates, and control returns to last area menu 并且会终止当应用程序,控制权返回到欢迎屏幕 |
E |
Status bar在状态栏中显示 |
PAI processing is terminated, and control returns to the current screen. All of the screen fields for which there is a FIELD or CHAIN statement are ready for input. The user must enter a new value. The system then restarts PAI processing for the screen using the new values. Error messages are not possible in POH or POV processing. Instead, a runtime error occurs. PAI处理结束,并且控制权返回到当前屏幕。MESSAGE所在的Module所属的FIELD或CHAIN所对应的字段全部可以重新输入(其他不在FIELD与CHAIN中的字段会灰掉,以及即使在其他FIELD或其他CHAIN中的字段如果通过验证了的也会灰掉。变灰就意味着验证已通过,无需才输入),且用户必须重新输入新的值。然后系统将重新对新输入的值进行PAI处理。注:Error消息将不能用在POH与POV,否则将会发生运行时错误 |
W |
Statusbar 在状态栏中显示 |
Like type E, but the user can confirm the message by pressing ENTER without having to enter new values. The system then resumes PAI processing directly after the MESSAGE statement. Warning messages are not possible in POH or POV processing. Instead, a runtime error occurs. 像类型E一样(指出弹出警告消息后,哪些屏幕字段变灰,哪些需要重新输入,这些处理相同)。但用户可以在不必输入新的值情况下按回车键继来忽略警告消息,系统会继续后面的PAI处理。 注:Warning消息将不能用在POH与POV,否则将会发生运行时错误 |
I |
Dialog box对话框中显示 |
Program continues processing after the MESSAGEStatement 程序会继续向下执行 |
S |
Status bar of next screen 消息会显示在下一屏幕的状态栏中 |
Program continues processing after the MESSAGEStatement 程序会继续向下执行 |
选择屏幕中
包括AT SELECTION-SCREEN及所有带ON选项的AT SELECTION-SCREEN,但不包括AT SELECTION-SCREEN OUTPUT,具体有哪些事件请参考这里
另:此节具体的各种情况下的演示,还可以通过 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)此节的程序来演示
类型pe |
Display显示 (显示在对话框中还是状态栏中) |
Processing处理 (是终止程序还是继续,以及终止时返回到哪里) |
A |
Dialogbox以对话框显示 |
Program terminates, and control returns to last area menu 并且会终止当应用程序,控制权返回到欢迎屏幕 |
E |
Statusbar 在状态栏中显示 |
Selection screen processing terminates, and the selection screen is redisplayed. The screen fields specified through the additions to the AT SELECTION-SCREEN statement are ready for input. The user mustenter a new value. The system then restarts the selection screen processing using the new values. You cannot use error messages with the ON HELP-REQUEST or ON VALUE-REQUEST additions. Instead, a runtime error occurs. 选择屏幕处理结束,并且控制权返回到选择屏幕重新显示。 AT SELECTION-SCREEN ON中的字段将可以重新输出(如果是发生在AT SELECTION-SCREEN里,则所有屏幕字段都是可以重新输入的),并且用户必须输入新的值,系统然后重新对新输入的值进行处理,如果验证通过(不再弹出错误消息),则是继续后面的屏幕事件处理。 不能将error消息与ON HELP-REQUEST or ON VALUE-REQUEST选项的AT SELECTION-SCREEN一起使用,否则出现运行时错误 |
W |
Statusbar 在状态栏中显示 |
Like type E, but the user can confirm the message by pressing ENTER without having to enter new values. The system then resumes selection screen processing directly after the MESSAGE statement. You cannot use warning messages with the ON HELP-REQUEST or ON VALUEREQUEST additions. Instead, a runtime error occurs. 像类型E一样(指出弹出警告消息后,哪些屏幕字段变灰,哪些需要重新输入,这些处理相同)。但用户可以在不必输入新的值情况下按回车键继来忽略警告消息,系统会继续后面的PAI处理。 注:不能将warning消息与ON HELP-REQUEST or ON VALUE-REQUEST选项的AT SELECTION-SCREEN一起使用,否则出现运行时错误 |
I |
Dialogbox 对话框中显示 |
Program continues processing after the MESSAGEStatement 程序会继续向下执行 |
S |
Statusbarof nextscreen 消息会显示在下一屏幕的状态栏中 |
Program continues processing after the MESSAGEStatement 程序会继续向下执行 |
X |
None 不会显示消息 |
Triggers a runtime error with short dump 触发运行时错误并伴随着dump |
在List输出列表事件中
适用于所有列表处理list is being processed。
TOP-OF-PAGE DURING LINE-SELECTION
另:此节具体的各种情况下的演示,还可以通过 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)此节的程序来演示
类型 |
Display显示(显示在对话框中还是状态栏中) |
Processing处理(是终止程序还是继续,以及终止时返回到哪里) |
A |
Dialogbox以对话框显示 |
Program terminates, and control returns to last area menu 并且会终止当应用程序,控制权返回到欢迎屏幕 |
E |
Statusbar在状态栏中显示 |
Processing block terminates. Previous list levels remaindisplayed. 事件块处理终止,继续保留上一级别的List |
I |
Dialogbox对话框中显示 |
Program continues processing after the MESSAGEStatement 程序会继续向下执行 |
S |
Status bar of next screen 消息会显示在下一屏幕的状态栏中 |
Program continues processing after the MESSAGEstatement 程序会继续向下执行 |
W |
Statusbar在状态栏中显示 |
Like type E. 像类型E一样 |
X |
None 不会显示消息 |
Triggers a runtime error with short dump 触发运行时错误并伴随着dump |
Messages in Function Modules and Methods
Message在Funcion与Method中有下面两种不同的功能:Messsage的普通使用、使用Messsage触发异常
此节具体的各种情况下的演示,还可以通过 DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)此节的程序来演示
Messsage的普通使用
如果你在Message词句中未使用RAISING选项,则它就是一个普通的Message,是不能被调用者所捕获的,此时Message将会根据上下文来进行显示与处理
Messsage转异常(…RAISING选项)
如果加了选项RAISING时:MESSAGE... RAISING <exc>,此时的Message 的处理方式与是否显示,就要依赖于主调者在调用时,是否加上了exception <exc>选项:
1、如果调用时没有带exception <exc>选项,此时Message语包中的RAISING <exc>选项抛出的异常将会被忽略,Message语句会当作正常消息来处理
2、如果调用时加上了exception <exc>选项对exc 异常进行了捕获,则不会再显示消息(但如果即使加上了exception选项,但没有捕获到exc异常,则此时会忽略RAISING选项)。只要异常被捕获,相关消息内容将会入存入到SY-MSGID,SY-MSGTY, SY-MSGNO, and SY-MSGV1 to SY-MSGV4有关系统变量中。
捕获Message(error_message)
可以在Message语句没有使用RAISING选项的情况下,在主调程序中的Exception参数列表中使用隐式异常error_message选项来捕获Message,但error_message是否能捕获得到Message,与消息类型相关:
1、对于W、I、S类型的消息,将不显示消息(本来是要显示的),也不会去设置 sy-subrc = n_error,但此时还是会将消息的相关信息存储到SY-MSGID, SYMSGTY,SY-MSGNO, and SY-MSGV1 to SY-MSGV4这些系统变量中
2、对于A、E类型消息,也将不显示提示消息,但会抛出ERROR_MESSAGE异常,即这两类型的消息会自动被转换为error_message异常抛出,并终最被CALL FUNCTION 中Exception异常列表中的error_message异常所捕获,并设置sy-subrc = n_error。此时与消息相关的信息分别存储到相应系统字段中:
SY-MSGID 消息类
SY-MSGNO 消息号
SY-MSGTY 消息类型
SY-MSGV1 ... SY-MSGV4 消息参数
此时,对于A类型消息而言,ROLLBACK WORK语句将会隐式执行
3、对于X类型消息将会抛出runtime error,并且程序会dump
DEMO_MESSAGES程序(SAP自带的各种情况下的Message测试)
关于Message不同上下文环境的运行情况,请参数SAP自带的实例程序:DEMO_MESSAGES
下面的程序是从DEMO_MESSAGES拷贝过来,并进行了少量修改,可以对不同情况下,Message的运行情况测试。如果需运行此程序,请先从DEMO_MESSAGES拷贝一份,生成必要的屏幕,再将下面的代码贴入。
是这里的主屏幕(第一个屏幕)
对话屏幕的,则在200屏幕上的标准工具栏中点击了 Back 或者 Exit 按钮后,则
)所在的屏幕序列会结束(因为LEVE TO 200就是在主屏幕序列中,所以在200
或对话
所在的屏幕序列结束时(可点击选择屏幕1100标准工具栏中的Back按钮,或在屏幕逻辑流中使用
(会调用100屏幕的PBO,重新显示100屏幕),所以此种情况
屏幕上用户选中的消息转换成真实的消息类型
,调转到200屏幕(不会产生
选择屏幕
选择屏幕的,但这种方式会产生一个新的屏幕
选择屏幕所有的新屏幕序列后,原主调屏幕100所在的屏幕序列不会消失
屏幕,也不会产生新的屏幕序列
次,则最后因为屏幕序列大于50而堆栈溢出,
屏幕所在
屏幕)。但上面的
所在屏幕的标准工具栏上
所在的屏幕序列。所以这里最好修改成 LEAVE TO SCREEN 300
个序列而溢出
屏幕)并到达(TO)列表处理,并且(AND)设置 after exiting the list processor时,会
,如果设置为0,则当前屏幕序列会关闭
屏幕)不弹出来。该语句作用是:如果该语句用在PBO中,当前屏幕不会显示,但会继续后续的,则可以使用此语句来过路此屏幕,当然这可
选择屏幕的PAI事件,该事件在点击选择屏幕上的 "执行" 按钮后调用。
)
WITH 'Handling exception from function module.' msg.
ENDCASE.
ELSEIF except-nocatch = 'X'."未捕获消息
CALL FUNCTION 'ZJZJ_FUNCTION_MESSAGE'
EXPORTING
message_type = message_type
message_place = message_place
message_event = message_event.
ENDIF.
ENDFORM. "call_function
FORM convert_user_input.
IF type-a = 'X'.
message_type = 'A'.
ELSEIF type-e = 'X'.
message_type = 'E'.
ELSEIF type-i = 'X'.
message_type = 'I'.
ELSEIF type-s = 'X'.
message_type = 'S'.
ELSEIF type-w = 'X'.
message_type = 'W'.
ELSEIF type-x = 'X'.
message_type = 'X'.
ENDIF.
ENDFORM. "convert_user_input
FORMmodi_screnn USING pai pai_input pbo pbo_input.
LOOP AT SCREEN.
IF screen-name = 'EVENT-PAI'.
"复选框 EVENT-PAI 是否钩选上
event-pai = pai.
"设置 EVENT-PAI 是否可选(禁止输入)
screen-input = pai_input.
MODIFY SCREEN.
ENDIF.
IF screen-name = 'EVENT-PBO'.
"复选框 EVENT-PBO 是否钩选上
event-pbo = pbo.
"设置 EVENT-PBO 是否可选(禁止输入)
screen-input = pbo_input.
MODIFY SCREEN.
ENDIF.
IF place-report = 'X'
and ( screen-name = 'EXCEPT-NO'
or screen-name = 'EXCEPT-YES'
or screen-name = 'EXCEPT-CATCH'
or screen-name = 'EXCEPT-NOCATCH' ).
except-no = ''.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " MODI_SCRENN
FUNCTION ZJZJ_FUNCTION_MESSAGE_RAISING.
DATA: msg TYPE string.
CONCATENATE MESSAGE_TYPE ',' MESSAGE_PLACE ',' MESSAGE_EVENT INTO msg.
MESSAGE ID '00' TYPE MESSAGE_TYPE NUMBER '001' WITH msg RAISING MESS.
ENDFUNCTION.
FUNCTION ZJZJ_FUNCTION_MESSAGE.
DATA: msg TYPE string.
CONCATENATE message_type ',' message_place ',' message_event INTO msg.
MESSAGE ID '00' TYPE message_type NUMBER '001' WITH msg.
ENDFUNCTION.
在状态栏中显示信息
一般用于多步操作的进度指示,显示当前正在处理的任务信息
.
“E”消息与回退按扭
DATA: l_vkorg TYPE likp-vkorg .
SELECT SINGLE vkorg FROM likp INTO l_vkorg WHERE vbeln = p_vbeln .
CALL FUNCTION 'ZMM_ILG_LOCK_DN'
EXPORTING
i_vbeln = p_vbeln
i_loctyp = p_loctyp
IMPORTING
e_zflag = flg
e_errmg = msg.
IF p_loctyp = '0' AND flg = 'S'.
MESSAGE 'DN block successful.' TYPE 'S'.
ELSEIF p_loctyp = '1' AND flg = 'S'.
MESSAGE 'DN unblock successful.' TYPE 'S'.
ELSE.
CONCATENATE 'Update failed: ' msg INTO msg.
* MESSAGE msg TYPE 'E'."如果使用此种方式打印消息,则程序会显示成下面截图样子,此时界面没有了,回退按钮也不能使用,所以修改成如下形式即可
MESSAGE msg TYPE 'S' DISPLAY LIKE 'E'.
STOP.”使用程序停止下来,不然的话会执行START-OF-SELECTION事件块后面剩余的程序
ENDIF.
) DISPLAY LIKE 'E' WITH text-001 l_vkorg.
STOP.
在函数中,不直接弹出消息,而是向上再次抛出:
MESSAGE E201 WITH HOST RAISING NOT_CONNECTED.
在上层可以这样捕获:
.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
确认框函数POPUP_TO_CONFIRM
Messages消息处理的更多相关文章
- Django写的投票系统2(转)
在上一篇中 django实例:创建你的第一个应用投票系统(一) 已经介绍基本的功能,并已经启动服务了.这一节介绍数据库相关的东东. 首页打开mysite/settings.py配置文件, 设置数据库打 ...
- Boto3
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.htmlboto3 安装pip install bot ...
- 生产者消费者模型——wait/notify/notifyAll使用
告警系统架构如下 1. 数据处理系统处理完原始数据并入库后,发送消息到kafka系统: 2. 告警生产者从kafka系统查询消息存入告警消息队列: 3. 告警消费者从告警消息队列查询消息进行处理. 这 ...
- [SAP ABAP开发技术总结]消息处理Messages
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...
- Android消息处理
基本概念: Message:消息,其中包含了消息ID.what,消息处理对象.obj以及处理的数据.arg1.arg2等,由MessageQueue统一列队,终由Handler处理. Handler: ...
- Android异步消息处理机制完全解析,带你从源码的角度彻底理解(转)
开始进入正题,我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一 ...
- (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)
转自 http://www.cnblogs.com/angeldevil/p/3340644.html Android消息处理机制(Handler.Looper.MessageQueue与Messag ...
- ASP.NET中进行消息处理(MSMQ) 二(转)
在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介 ...
随机推荐
- OpenStack 多台计算节点时的问题
Contents [hide] 1 前言 2 bug 3 解决方法 4 网络问题 前言 添加一台计算节点后无法创建虚拟机.在调度层就错误: bug https://review.openstack.o ...
- 批处理命令——rem 和 pause
[1]rem命令简介 注释命令,在C语言中相当于/*----------*/,它并不会被执行,只是起到一个注释的作用,便于别人及自己将来阅读和维护脚本. 为了更具体的理解,请看示例: 新建一个文本文件 ...
- uploadify3.2.1加载时,报NetworkError 404 Not Found或NetworkError forbidden错误
我用的uploadify的版本是3.2.1 在打开配置了uploadify的页面的时候,什么操作都没有,仅仅是打开了页面,在火狐里可以看到一行报错信息,我的uploadify页面 在"/项目 ...
- Unicode : RLO
分类:备忘,Unicode,Perl 我们一般的输入文字的方向是从左往右,但是世界上总有特例,阿拉伯国家是从右到左的书写方式.经常看到微信里面好友得瑟,也就拿过来总结一下. 每个语言都能实现字符串反转 ...
- android 在应用中切换语言
场景: 在设置中切换中英文,然后跳转MainActivity....步骤: 1.在MyApplication 中初始化语言 public class MyApplication extends App ...
- Linux 中open系统调用实现原理【转】
转自:http://blog.chinaunix.net/uid-25968088-id-3426026.html 目录 OPEN系统调用过程 Open在内核里面的入口函数时sys_open Sys_ ...
- [转]jexus的安装
转自http://www.cnblogs.com/xiaodiejinghong/p/3720921.html 这是一个集成了 mono3.4.0 和 jexus5.6.0 的 jexus+mono ...
- Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具
每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty ...
- bin和sbin的区别
bin和sbin的区别: bin:用户命令(所有用户均可使用) sbin:管理命令(通常只有管理员可以使用)
- ecshop编辑器fckeditor换百度ueditor编辑器教程
1.下载uediter编辑器,解压上传目录uediter到根目录/includes/下 2.修改admin/includes/lib_main.php /** * 生成编辑器 ...