顾问提出了一个需求,要求备件的版本号只能通过F4更新,不能直接在选择屏幕上输入,防止用户误填。
总结了一下,实现方法如下:
- SCREEN-INPUT = '0'.
LOOP AT SCREEN. IF screen-name = 'P_VER' OR screen-name = 'S_VER-LOW' OR screen-name = 'S_VER-HIGH'. screen-input = '0'. ENDIF. MODIFY SCREEN. ENDLOOP.
- F4实现
DATA lt_return TYPE TABLE OF ddshretval WITH HEADER LINE. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = pv_retfield dynpprog = sy-repid * dynpnr = sy-dynnr * dynprofield = pv_dynprofield value_org = 'S' TABLES value_tab = pt_value return_tab = lt_return EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. READ TABLE lt_return INTO DATA(ls_return) INDEX 1. pv_value = ls_return-fieldval.
- 回写屏幕
lt_dynpfields-fieldname = 'P_VER'. lt_dynpfields-fieldvalue = p_ver. APPEND lt_dynpfields. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING dyname = sy-repid dynumb = sy-dynnr TABLES dynpfields = lt_dynpfields.
重点:F4事件将选择的值传递给P_VER,但是屏幕仍然不会更新,这个时候需要调用函数将P_VER的值更新到屏幕上。