OO ALV 自定义F4检索帮助

        ALV中字段的检索帮助我们通常不用刻意设置,只需要设置FIELDCAT的属性ref_table和ref_field即中实现标准字段或自定义字段关联的帮助。在特殊情况下如果还不满足需求,可以创建自定义的F4检索帮助。步骤如下:

步骤一:
  DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.
  CLEAR lt_f4.
  lt_f4-fieldname = 'POSID'.
  lt_f4-register = 'X'.
  lt_f4-chngeafter = 'X'.
  APPEND lt_f4.
  CALL METHOD gr_grid->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4[].


步骤二:设置事件HANDLER
    SET HANDLER gv_event_handler->handle_onf4 FOR gr_grid .


步骤三:属性设置
      IF lw_fcat-fieldname = 'POSID'.
         lw_fcat-F4AVAILABL = 'X'.       "检索帮助设置
      ENDIF.


步骤四: 类事件定义
    handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
    IMPORTING  e_fieldname e_fieldvalue es_row_no  er_event_data ,


事件方法:
  METHOD handle_onf4 .
    PERFORM frm_handle_onf4 USING e_fieldname e_fieldvalue es_row_no er_event_data.
  ENDMETHOD.                    "handle_onf4

子程序:

FORM frm_handle_onf4 USING  e_fieldname   TYPE lvc_fname
                            e_filedvalue  TYPE lvc_value
                            es_row_no     TYPE lvc_s_roid
                            er_event_data TYPE REF TO cl_alv_event_data.

  DATA: ls_modi TYPE lvc_s_modi,
        lt_ret_tab TYPE TABLE OF ddshretval,      "选择后返回数据
        lw_ret_tab TYPE ddshretval.

  DATA: lt_hitlist TYPE TABLE OF ty_posid.
  DATA: lv_posid TYPE prps-posid.
  FIELD-SYMBOLS <modtab> TYPE lvc_t_modi.

  lv_posid = p_stgc && '%'.
  SELECT posid
         post1
    INTO CORRESPONDING FIELDS OF TABLE lt_hitlist
    FROM prps
   WHERE posid LIKE lv_posid.

  IF e_fieldname = 'POSID'. "我们自定义搜索的字段名
*      READ TABLE gt_alv_data INDEX es_row_no-row_id.
    CHECK sy-subrc = 0.
**  这里可以添加代码以对lt_hitlist内表进行填充
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'POSID'
        value_org       = 'S'
      TABLES
        value_tab       = lt_hitlist
        return_tab      = lt_ret_tab
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc = 0.
**  Update the value in ALV cell
      READ TABLE lt_ret_tab INTO lw_ret_tab INDEX 1.
      IF sy-subrc = 0. " User didn't cancel
        ls_modi-row_id = es_row_no-row_id.
        ls_modi-fieldname = e_fieldname.
        ls_modi-value = lw_ret_tab-fieldval.
        ASSIGN er_event_data->m_data->* TO <modtab>.
        APPEND ls_modi TO <modtab>.
      ENDIF.
    ENDIF.
** 这里必须设置为X。
    er_event_data->m_event_handled = 'X'.
  ENDIF.

ENDFORM.                    "frm_handle_onf4
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值