ALV通过F4事件,实现自定义搜索帮助F4

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:<fs_alv> TYPE gs_alv.
    CASE e_fieldname.
      WHEN 'ARKTX'.
        READ TABLE git_alv ASSIGNING <fs_alv> INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          PERFORM frm_get_arktx_f4 CHANGING <fs_alv>-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_<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、效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值