[SAP ABAP开发技术总结]DIALOG屏幕流逻辑

12.7.     屏幕流逻辑

PROCESS BEFORE OUTPUT.
PROCESS AFTER I
NPUT.
PROCESS ON H
ELP-REQUEST.
PROCESS ON VALUE-REQUEST.

12.7.1.           FIELD

FIELD <f>.

使用FIELD语句后,屏幕字段<f>需要在该语句处理完后才传递到ABAP程序相应的字段中,在后没有带module选项时,仅仅只是控制屏幕字段传输到ABAP程序中的时间点,如需对屏幕字段进行检验,通过以下语句来实现检验:

FIELD<field_name> MODULE<module_name>.

仅只有未出现在FIELD语句中的屏幕字段才会在PAI事件块处理传输到ABAP程序中去。所以当某个屏幕字段出现在FIELD语句中,并且在该 FIELD语句未执行完之前,不要在PAI dialog modules中使用该屏幕字段(该屏幕字段相关的FIELD语句执行完成之后才可以在后续的PAI dialog modules调用中使用),否则,ABAP程序同名字段中的值使用的是前一次对话屏幕中所设置的值。

12.7.2.           MODULE 

FIELD dynp_field MODULE mod [ {ON INPUT}
| {
ON REQUEST
}
| {
ON *-INPUT
}
| {
ON {CHAIN-INPUT|CHAIN-REQUEST
}}
| {
AT CURSOR-SELECTION}
.

       ON INPUT只要该字段不为初始值就会触发module

       ON REQUEST:该字段发生变化后触发module

 

FIELD <f> MODULE <mod> ON INPUT|REQUEST|*-INPUT. 相当于选择屏幕的 AT SELECTION-SCREEN ON field

 

CHAIN.
 
FIELD: <f1>, <f2>,<fi...>.
 
MODULE <mod1> ON CHAIN-INPUT|CHAIN-REQUEST.
 
FIELD: <g1>, <g2>,<gi...>.
 
MODULE <mod2> ON CHAIN-INPUT|CHAIN-REQUEST.
 
...
ENDCHAIN.

只要<fi>某个字段满足条件(<mod1>后面的CHAIN-INPUTCHAIN-REQUEST条件),<mod1>就会被调用,而只要<fi><gi>中的某个字段满足条件,则<mod2>就会被调用。如果在module中检测不通过(如MESSAGE… E类消息时),则CHAIN…ENDCHAIN之外的所有其他屏幕字段将会被锁定且置灰,这与选择屏幕的AT SELECTION-SCREEN ON BLOCK校验是一样的

CHAIN.
 
FIELD: <f1>, <f2>,<fi...>.
 
FIELD <f> MODULE <mod1> ON INPUT|REQUEST|*-INPUT|CHAIN-INPUT|CHAIN-REQUEST.
 
MODULE <mod2> ON CHAIN-INPUT|CHAIN-REQUEST.
ENDCHAIN.

<mod1>被调用的条件是所对应字段<f>满足ON后面指定的条件即可执行。<mod2>被调用的条件是只要<fi><f>中的某个字段满足条件即可执行。

12.7.3.           ON INPUTON CHAIN-INPUT区别

CHAIN.
 
FIELD: f1,f2.
 
FIELD: f3 MODULE mod1 ON INPUT. 只有f3为非初始值时才调用mod1
ENDCHAIN.

CHAIN.
 
FIELD:f1,f2.
 
FIELD:f3 MODULE mod1 ON CHAIN-INPUT. f1,f2,f3中任一字段包含非初始值时都调用mod1
ENDCHAIN

 

如果不在 CHAIN中时,不能像下面这样写:

  FIELD a. "FIELDMODULE只能写在同一语句当中
 
MODULE check_a ON INPUT.
只有在CHAIN中时,MODULE语句才可以单独出现(不与FIELD在同一语句中),且只能是CHAIN-INPUT
 
MODULE mod1 ON CHAIN-INPUT.

原文地址:https://www.cnblogs.com/jiangzhengjun/p/4265201.html