二维码

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

Twilight发表于 2017-09-18 13:48txfirst 最后回复于 2018-12-25 22:27 [复制链接] 5769 2

ALV通过参考可以直接获取表中搜索帮助,但是表中字段没有搜索帮助或者不合要求就需要通过F4事件完成了。

1、定义OOALV类
  1. CLASS lcl_event_receiver DEFINITION DEFERRED.

  2. DATA:gt_fieldcat   TYPE lvc_t_fcat,
  3.      gs_fieldcat   TYPE lvc_s_fcat,
  4.      go_grid       TYPE REF TO cl_gui_alv_grid,
  5.      go_event_receiver    TYPE REF TO lcl_event_receiver.

  6. *----------------------------------------------------------------------*
  7. *       CLASS lcl_event_receiver DEFINITION
  8. *----------------------------------------------------------------------*
  9. CLASS lcl_event_receiver DEFINITION.
  10.   PUBLIC SECTION.
  11.     METHODS:
  12.       handle_f4_help  FOR EVENT onf4 OF cl_gui_alv_grid
  13.                          IMPORTING  e_fieldname
  14.                                     es_row_no
  15.                                     er_event_data
  16.                                     et_bad_cells
  17.                                     e_display.

  18. ENDCLASS.                    "lcl_event_receiver DEFINITION
  19. *----------------------------------------------------------------------*
  20. *       CLASS lcl_event_receiver IMPLEMENTATION
  21. *----------------------------------------------------------------------*
  22. CLASS lcl_event_receiver IMPLEMENTATION.
  23.   METHOD handle_f4_help.
  24.     FIELD-SYMBOLS:<fs_alv> TYPE gs_alv.
  25.     CASE e_fieldname.
  26.       WHEN 'ARKTX'.
  27.         READ TABLE git_alv ASSIGNING <fs_alv> INDEX es_row_no-row_id.
  28.         IF sy-subrc = 0.
  29.           PERFORM frm_get_arktx_f4 CHANGING <fs_alv>-arktx.
  30.         ENDIF.
  31. *      WHEN .
  32.       WHEN OTHERS.
  33.     ENDCASE.
  34.     CALL METHOD go_grid->refresh_table_display.
  35.   ENDMETHOD.

  36. ENDCLASS.               "lcl_event_receiver
复制代码
2、定义alv-fieldcat属性
  1. gs_fieldcat-f4availabl = 'X'.
  2. gs_fieldcat-edit = 'X'.
复制代码
3、将F4事件注册到ALV对象中
  1. DATA:lt_f4             TYPE lvc_t_f4,
  2.      ls_f4             TYPE lvc_s_f4.

  3. CALL METHOD go_grid->set_table_for_first_display
  4.   EXPORTING
  5.     it_toolbar_excluding = lt_exclude
  6.   CHANGING
  7.     it_fieldcatalog      = git_fieldcat
  8.     it_outtab            = git_alv[].


  9. CLEAR:ls_f4.
  10. ls_f4-fieldname  = 'ARKTX'.
  11. ls_f4-register   = 'X'.
  12. ls_f4-getbefore  = 'X'.
  13. ls_f4-chngeafter = ''.
  14. ls_f4-internal   = ''.
  15. INSERT ls_f4 INTO TABLE lt_f4.

  16. CALL METHOD go_grid->register_f4_for_fields
  17.   EXPORTING
  18.     it_f4 = lt_f4.

  19. CREATE OBJECT go_event_receiver.
  20. SET HANDLER go_event_receiver->handle_f4_help FOR go_grid .
复制代码
4、自定义F4,获取数据
  1. *&---------------------------------------------------------------------*
  2. *&      Form  FRM_GET_ARKTX_F4
  3. *&---------------------------------------------------------------------*
  4. *       text
  5. *----------------------------------------------------------------------*
  6. *      <--P_<FS_ALV>_ARKTX  text
  7. *----------------------------------------------------------------------*
  8. FORM frm_get_arktx_f4  USING    pc_matnr TYPE vbrp-matnr
  9.                        CHANGING pc_arktx TYPE zfit005-maktx.
  10.   DATA:BEGIN OF lt_zfit029 OCCURS 0,
  11.         sub_type_m TYPE zfit029-sub_type_m,
  12.         sub_name_m TYPE zfit029-sub_name_m,
  13.       END OF lt_zfit029.
  14.   DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE.
  15.   DATA:lv_matnr TYPE zfit028-matnr.

  16.   lv_matnr = pc_matnr.

  17.   SELECT sub_type_m
  18.          sub_name_m
  19.   INTO TABLE lt_zfit029
  20.   FROM zfit028
  21.   INNER JOIN zfit029 ON zfit028~type_m = zfit029~type_m
  22.   WHERE zfit028~matnr = lv_matnr.

  23.   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  24.     EXPORTING
  25.       retfield        = 'SUB_NAME_M'
  26.       value_org       = 'S'
  27.     TABLES
  28.       value_tab       = lt_zfit029
  29.       return_tab      = lt_ret_tab
  30.     EXCEPTIONS
  31.       parameter_error = 1
  32.       no_values_found = 2
  33.       OTHERS          = 3.
  34.   IF sy-subrc = 0.
  35.     READ TABLE lt_ret_tab INDEX 1.
  36.     IF sy-subrc = 0  AND lt_ret_tab-fieldval IS NOT INITIAL.
  37.       pc_arktx = lt_ret_tab-fieldval.
  38.     ENDIF.
  39.   ENDIF.

  40. ENDFORM.                    " FRM_GET_ARKTX_F4
复制代码
5、效果
alv自定义F4.jpg
回复

使用道具 举报

zhongguomao
很有帮助!
回复

使用道具 举报

txfirst
写得好!!!
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表