作者:捕风的丶阿兹猫-在北京 | 来源:互联网 | 2023-01-16 11:37
ALV通过参考可以直接获取表中搜索帮助,但是表中字段没有搜索帮助或者不合要求就需要通过F4事件完成了。
1、定义OOALV类
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA:gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
go_grid TYPE REF TO cl_gui_alv_grid,
go_event_receiver TYPE REF TO lcl_event_receiver.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_f4_help FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_f4_help.
FIELD-SYMBOLS: TYPE gs_alv.
CASE e_fieldname.
WHEN 'ARKTX'.
READ TABLE git_alv ASSIGNING INDEX es_row_no-row_id.
IF sy-subrc = 0.
PERFORM frm_get_arktx_f4 CHANGING -arktx.
ENDIF.
* WHEN .
WHEN OTHERS.
ENDCASE.
CALL METHOD go_grid->refresh_table_display.
ENDMETHOD.
ENDCLASS. "lcl_event_receiver |
2、定义alv-fieldcat属性
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__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、效果