屏幕中有四個主要的邏輯流 (PBO,PAI POH,POV)
PROCESS BEFORE OUTPUT. 該事件在屏幕出來之前被觸發
PROCESS AFTER INPUT. 該模塊監聽用戶操作時間
PROCESS ON HELP-REQUEST.
FIELD FIELD_NAME MODULE HELP_MODULE. "當用戶查看幫助信息時(按下F1鍵)被觸發,事件結束后將繼續處理當前屏幕
PROCESS ON VALUE-REQUEST.
FIELD FIELD_NAME MODULE F4_MODULE. "當用戶按下查詢幫助按鍵時(或按下F4)被觸發,事件結束后將繼續處理當前屏幕。
在Screen顯示之前,系統會自動將程序變量值放到屏幕字段中;在PAI事件中,系統會自動將屏幕字段的值更新到相應的程序變量。
在Screen Logic中我們還有POH和POV事件,所以有時需要調用函數DYNP_VALUES_READ來讀取屏幕字段值。
比如:屏幕上有兩個字段,NAME1 和 NAME2。當字段NAME2觸發搜索幫助的時候,必須參照用戶在NAME1中的錄入值。由於PAI尚未被執行,屏幕字段NAME1的字符串值尚未更新到程序變量NAME1。
此時我們可以調用DYNP_VALUES_READ來實現。
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE. CLEAR: dynpfields, dynpfields[]. dynpfields-fieldname = 'NAME1'. "填入需要讀值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'NAME1'. name1 = dynpfields-fieldvalue. "備注 ENDIF.