ALV通过参考可以直接获取表中搜索帮助,但是表中字段没有搜索帮助或者不合要求就需要通过F4事件完成了。 1、定义OOALV类
|
gs_fieldcat-f4availabl = 'X'.
gs_fieldcat-edit = 'X'.
3、将F4事件注册到ALV对象中
DATA:lt_f4 TYPE lvc_t_f4,
ls_f4 TYPE lvc_s_f4.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
it_toolbar_excluding = lt_exclude
CHANGING
it_fieldcatalog = git_fieldcat
it_outtab = git_alv[].
CLEAR:ls_f4.
ls_f4-fieldname = 'ARKTX'.
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = ''.
ls_f4-internal = ''.
INSERT ls_f4 INTO TABLE lt_f4.
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_f4_help FOR go_grid .
4、自定义F4,获取数据
*&---------------------------------------------------------------------*
*& Form FRM_GET_ARKTX_F4
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<FS_ALV>_ARKTX text
*----------------------------------------------------------------------*
FORM frm_get_arktx_f4 USING pc_matnr TYPE vbrp-matnr
CHANGING pc_arktx TYPE zfit005-maktx.
DATA:BEGIN OF lt_zfit029 OCCURS 0,
sub_type_m TYPE zfit029-sub_type_m,
sub_name_m TYPE zfit029-sub_name_m,
END OF lt_zfit029.
DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE.
DATA:lv_matnr TYPE zfit028-matnr.
lv_matnr = pc_matnr.
SELECT sub_type_m
sub_name_m
INTO TABLE lt_zfit029
FROM zfit028
INNER JOIN zfit029 ON zfit028~type_m = zfit029~type_m
WHERE zfit028~matnr = lv_matnr.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'SUB_NAME_M'
value_org = 'S'
TABLES
value_tab = lt_zfit029
return_tab = lt_ret_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE lt_ret_tab INDEX 1.
IF sy-subrc = 0 AND lt_ret_tab-fieldval IS NOT INITIAL.
pc_arktx = lt_ret_tab-fieldval.
ENDIF.
ENDIF.
ENDFORM. " FRM_GET_ARKTX_F4
5、效果