ALV中字段的检索帮助我们通常不用刻意设置,只需要设置FIELDCAT的属性ref_table和ref_field即中实现标准字段或自定义字段关联的帮助。在特殊情况下如果还不满足需求,可以创建自定义的F4检索帮助。步骤如下:
步骤一:
DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.
CLEAR lt_f4.
lt_f4-fieldname = 'POSID'.
lt_f4-register = 'X'.
lt_f4-chngeafter = 'X'.
APPEND lt_f4.
CALL METHOD gr_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
步骤二:设置事件HANDLER
SET HANDLER gv_event_handler->handle_onf4 FOR gr_grid .
步骤三:属性设置
IF lw_fcat-fieldname = 'POSID'.
lw_fcat-F4AVAILABL = 'X'. "检索帮助设置
ENDIF.
步骤四: 类事件定义
handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname e_fieldvalue es_row_no er_event_data ,
事件方法:
METHOD handle_onf4 .
PERFORM frm_handle_onf4 USING e_fieldname e_fieldvalue es_row_no er_event_data.
ENDMETHOD. "handle_onf4
子程序:
FORM frm_handle_onf4 USING e_fieldname TYPE lvc_fname
e_filedvalue TYPE lvc_value
es_row_no TYPE lvc_s_roid
er_event_data TYPE REF TO cl_alv_event_data.
DATA: ls_modi TYPE lvc_s_modi,
lt_ret_tab TYPE TABLE OF ddshretval, "选择后返回数据
lw_ret_tab TYPE ddshretval.
DATA: lt_hitlist TYPE TABLE OF ty_posid.
DATA: lv_posid TYPE prps-posid.
FIELD-SYMBOLS <modtab> TYPE lvc_t_modi.
lv_posid = p_stgc && '%'.
SELECT posid
post1
INTO CORRESPONDING FIELDS OF TABLE lt_hitlist
FROM prps
WHERE posid LIKE lv_posid.
IF e_fieldname = 'POSID'. "我们自定义搜索的字段名
* READ TABLE gt_alv_data INDEX es_row_no-row_id.
CHECK sy-subrc = 0.
** 这里可以添加代码以对lt_hitlist内表进行填充
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'POSID'
value_org = 'S'
TABLES
value_tab = lt_hitlist
return_tab = lt_ret_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
** Update the value in ALV cell
READ TABLE lt_ret_tab INTO lw_ret_tab INDEX 1.
IF sy-subrc = 0. " User didn't cancel
ls_modi-row_id = es_row_no-row_id.
ls_modi-fieldname = e_fieldname.
ls_modi-value = lw_ret_tab-fieldval.
ASSIGN er_event_data->m_data->* TO <modtab>.
APPEND ls_modi TO <modtab>.
ENDIF.
ENDIF.
** 这里必须设置为X。
er_event_data->m_event_handled = 'X'.
ENDIF.
ENDFORM. "frm_handle_onf4