ABAP DIALOG 读取屏幕字段和tablecontrol内字段
在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.