首先要把SCREEN-INPUT属性设置为0,不可输入。然后F4事件的函数DISPLAY参数要设置成'F',如下代码段:
*&---------------------------------------------------------------------*
*& Form FRM_SET_F4_FOR_BWART
*&---------------------------------------------------------------------*
FORM frm_set_f4_for_bwart CHANGING p_bwart.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
lv_title(20),
lw_ddshretval LIKE LINE OF lt_ddshretval,
lt_dynpfields TYPE TABLE OF dynpread,
lw_dynpfields TYPE dynpread.
TYPES:BEGIN OF ty_030,
bwart TYPE ztmm0030-bwart,
grund TYPE ztmm0030-grund,
btext TYPE t156t-btext,
grtxt TYPE t157e-grtxt,
END OF ty_030.
DATA:lt_030 TYPE TABLE OF ty_030,
ls_030 TYPE ty_030.
SELECT
bwart
grund
INTO TABLE lt_030
FROM ztmm0030.
"begin change by ey-dlj 20190611 修改登陆语言
SELECT * FROM t157e INTO TABLE @DATA(lt_157) WHERE spras = @sy-langu.
SELECT * FROM t156t INTO TABLE @DATA(lt_156) WHERE spras = @sy-langu.
"end change by ey-dlj 20190611
SORT lt_030.
DELETE ADJACENT DUPLICATES FROM lt_030.
LOOP AT lt_030 INTO ls_030.
READ TABLE lt_157 INTO DATA(ls_157)
WITH KEY grund = ls_030-grund.
IF sy-subrc EQ 0.
ls_030-grtxt = ls_157-grtxt.
ENDIF.
READ TABLE lt_156 INTO DATA(ls_156)
WITH KEY bwart = ls_030-bwart.
IF sy-subrc EQ 0.
ls_030-btext = ls_156-btext.
ENDIF.
MODIFY lt_030 FROM ls_030.
ENDLOOP.
DATA lt_return TYPE TABLE OF ddshretval WITH HEADER LINE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BWART'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_BWART'
value_org = 'S'
callback_program = sy-repid "可以传递多列值
callback_form = 'FRM_CB_FORM' "可以传递多列值
display = 'F'
TABLES
value_tab = lt_030
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
CLEAR lt_dynpfields.
LOOP AT lt_ddshretval INTO lw_ddshretval.
lw_dynpfields-fieldname = lw_ddshretval-retfield.
lw_dynpfields-fieldvalue = lw_ddshretval-fieldval.
APPEND lw_dynpfields TO lt_dynpfields.
ENDLOOP.
lw_dynpfields-fieldname = 'P_BWART'.
MODIFY lt_dynpfields FROM lw_dynpfields INDEX 1 TRANSPORTING fieldname.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = lt_dynpfields.
CLEAR:lt_dynpfields[],
lt_030,
lt_return[].
ENDFORM.