在POV事件中,因為沒有經過PAI直接進入POV中的MODULE,所以直接調用屏幕中的字段並沒有值,所以要
用DYNP_VALUES_READ讀取屏幕字段的值,且讀取的值格式為輸入的格式。
當使用DYNP_VALUES_READ時,所讀取的屏幕應正在加載中。
讀取屏幕字段
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE, L_MATNR LIKE VBAP-MATNR, L_LINES_VB TYPE I. CLEAR: dynpfields, dynpfields[],L_MATNR,L_LINES_VB. * GET CURSOR LINE L_LINES_VB. dynpfields-fieldname = 'GW_TAB-MATNR'. "填入需要讀值的字段名 * dynpfields-fieldname = 'GW_TAB-MATNR(01)'. "第一行的物料號 * dynpfields-STEPL = L_LINES_VB. APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' * DETERMINE_LOOP_INDEX = 'X'"TABLE CONTROL時使用 TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'GW_TAB-MATNR'. L_MATNR = dynpfields-fieldvalue. "備注 ENDIF.
讀取DIALOG中的TABLE CONTROL中的字段
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE, L_MATNR LIKE VBAP-MATNR, L_LINES_VB TYPE I. CLEAR: dynpfields, dynpfields[],L_MATNR,L_LINES_VB. GET CURSOR LINE L_LINES_VB. dynpfields-fieldname = 'GW_TAB-MATNR'. "填入需要讀值的字段名 * dynpfields-fieldname = 'GW_TAB-MATNR(01)'. "第一行的物料號 dynpfields-STEPL = L_LINES_VB. APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' DETERMINE_LOOP_INDEX = 'X'"TABLE CONTROL時使用 TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'GW_TAB-MATNR'.
L_MATNR = dynpfields-fieldvalue. "備注
ENDIF.
還有用字段符號取屏幕字段,一般是在增強中用,在POV中可能取不到值
"讀取一個字段時,在POV中取不到值 FIELD-SYMBOLS:<FS_MATNR> TYPE ANY. ASSIGN ('(ZTEST051)GW_TAB-MATNR') TO <FS_MATNR>. "讀取一個表,在DIALOG中,如果table在輸入后,經過了PAI,可獲得table中內容,但為舊值 FIELD-SYMBOLS: <FS_TABLE> TYPE TABLE. ASSIGN ('(ZTEST051)GT_TAB[]') TO <FS_TABLE>.
ZTEST051 為屏幕數據中的程序名
GW_TAB-MATNR 為取值的字段
GT_TAB[] 為取值的表,通過GW_TAB或屏幕的PAI去查找
可以用 GET CURSOR LINE L_LINES. 獲取table當前行L_LINE.