SAP ooalv 搜索帮助处理

如何在ooalv中使用自定义的搜索帮助

1. 创建自定义搜索帮助

1.1 创建自建表

1.2 创建表维护

1.3 创建自定义搜索帮助

2. 代码实现

2.1 F4 帮助方法类定义与实现


CLASS cl_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.


  PRIVATE SECTION.

ENDCLASS.                    "CL_EVENT_RECEIVER DEFINITION


CLASS cl_event_receiver IMPLEMENTATION.
METHOD handle_f4_help.
    FIELD-SYMBOLS:<fs_outtab> LIKE LINE OF gt_outtab.
    CASE e_fieldname.
      WHEN 'ZJGLX'.
        READ TABLE gt_outtab ASSIGNING <fs_outtab> INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          PERFORM frm_get_arktx_f4 CHANGING <fs_outtab>-zjglx.
        ENDIF.
      WHEN 'ZHJSZ'.
        READ TABLE gt_outtab ASSIGNING <fs_outtab> INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          PERFORM frm_get_zhjsz_f4 CHANGING <fs_outtab>-zhjsz.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
    CALL METHOD go_grid->refresh_table_display.
  ENDMETHOD.

ENDCLASS.                    "cl_event_receiver IMPLEMENTATION
DATA: lo_event TYPE REF TO cl_event_receiver.
*&---------------------------------------------------------------------*
*& Form frm_get_zhjsz_f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- <FS_OUTTAB>_ZHJSZ
*&---------------------------------------------------------------------*
FORM frm_get_zhjsz_f4  CHANGING zhjsz TYPE zsdt040b-zhjsz.
  DATA: value_tab     TYPE TABLE OF dfies,
        ls_value_tab  TYPE dfies,
        return_tab    TYPE TABLE OF ddshretval,
        ls_return_tab TYPE ddshretval,
        lt_zsdt040d   TYPE TABLE OF zsdt040d,
        ls_zsdt040d   TYPE zsdt040d.

  SELECT * INTO TABLE lt_zsdt040d
    FROM zsdt040d.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE  = ' '
      retfield        = 'ZHJSZ'
*     PVALKEY         = ' '
*     DYNPPROG        = ' '
*     DYNPNR          = ' '
*     DYNPROFIELD     = ' '
*     STEPL           = 0
*     WINDOW_TITLE    =
*     VALUE           = ' '
      value_org       = 'S'
*     MULTIPLE_CHOICE = ' '
*     DISPLAY         = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM   = ' '
*     CALLBACK_METHOD =
*     MARK_TAB        =
*   IMPORTING
*     USER_RESET      =
    TABLES
      value_tab       = lt_zsdt040d
*     FIELD_TAB       =
      return_tab      = return_tab
*     DYNPFLD_MAPPING =
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    READ TABLE return_tab INTO ls_return_tab INDEX 1.
    IF sy-subrc = 0  AND ls_return_tab-fieldval IS NOT INITIAL.
      zhjsz = ls_return_tab-fieldval.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_arktx_f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- <FS_OUTTAB>_ZJGLX
*&---------------------------------------------------------------------*
FORM frm_get_arktx_f4  CHANGING zjglx TYPE zsdt040c-zjglx.
  DATA: value_tab     TYPE TABLE OF dfies,
        ls_value_tab  TYPE dfies,
        return_tab    TYPE TABLE OF ddshretval,
        ls_return_tab TYPE ddshretval,
        lt_zsdt040c   TYPE TABLE OF zsdt040c,
        ls_zsdt040c   TYPE zsdt040c.

  SELECT * INTO TABLE lt_zsdt040c
    FROM zsdt040c.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE  = ' '
      retfield        = 'ZJGLX'
*     PVALKEY         = ' '
*     DYNPPROG        = ' '
*     DYNPNR          = ' '
*     DYNPROFIELD     = ' '
*     STEPL           = 0
*     WINDOW_TITLE    =
*     VALUE           = ' '
      value_org       = 'S'
*     MULTIPLE_CHOICE = ' '
*     DISPLAY         = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM   = ' '
*     CALLBACK_METHOD =
*     MARK_TAB        =
*   IMPORTING
*     USER_RESET      =
    TABLES
      value_tab       = lt_zsdt040c
*     FIELD_TAB       =
      return_tab      = return_tab
*     DYNPFLD_MAPPING =
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    READ TABLE return_tab INTO ls_return_tab INDEX 1.
    IF sy-subrc = 0  AND ls_return_tab-fieldval IS NOT INITIAL.
      zjglx = ls_return_tab-fieldval.
    ENDIF.
  ENDIF.

ENDFORM.

2.2 设置ALV fieldcat中的F4帮助属性

LOOP AT lt_fieldcat ASSIGNING <lfs_fieldcat> WHERE fieldname = 'ZJGLX' OR fieldname = 'ZHJSZ'. "价格类型搜索帮助
    <lfs_fieldcat>-f4availabl = 'X'.
  ENDLOOP.

2.3 注册事件



DATA:lt_f4 TYPE lvc_t_f4,
       ls_f4 TYPE lvc_s_f4.
  FIELD-SYMBOLS: <lfs_fieldcat> TYPE lvc_s_fcat.

  CREATE OBJECT lo_event.
*   注册事件handler方法

 CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_layout       = ls_layout
    CHANGING
      it_fieldcatalog = lt_fieldcat
      it_outtab       = gt_outtab[].

* Set editable cells to ready for input initially
  CALL METHOD go_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

CLEAR:ls_f4.
  ls_f4-fieldname  = 'ZJGLX'. "价格类型搜索帮助
  ls_f4-register   = 'X'.
  ls_f4-getbefore  = 'X'.
  ls_f4-chngeafter = ''.
  ls_f4-internal   = ''.
  INSERT ls_f4 INTO TABLE lt_f4.

  CLEAR:ls_f4.
  ls_f4-fieldname  = 'ZHJSZ'. "价格类型搜索帮助
  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.

  SET HANDLER lo_event->handle_f4_help FOR go_grid .

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值