12.7. 屏幕流邏輯
PROCESS BEFORE OUTPUT.
PROCESS AFTER INPUT.
PROCESS ON HELP-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-INPUT與CHAIN-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 INPUT與ON 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. "FIELD與MODULE只能寫在同一語句當中
MODULE check_a ON INPUT.
只有在CHAIN中時,MODULE語句才可以單獨出現(不與FIELD在同一語句中),且只能是CHAIN-INPUT:
MODULE mod1 ON CHAIN-INPUT.