FUNTION ALV 实现F4 自定义搜索帮助--“保姆级“笔记


前言

练习本实例所需要具备的ABAP知识:

  • FUNCTION ALV (FM_ALV) 程序的熟练编写:字段目录、布局样式、事件处理

  • ABAP 面向对象编程的基本知识,了解类的定义,实施方式,事件的处理。

  • OOALV 除事件处理外,可自己独立实现OOALV的展示……

    在此知识基础上,练习本实例才有可能比较容易的顺利理解……否则,建议先打好基础知识的底子,以提高学习的效率……

参考网址

一、效果图

在这里插入图片描述
实例用表:SPFLI 航班计划 SAPLANE 飞机 . 以SPFLI 部分字段为基础,字段PLANETYPE (飞机类型) 去除参照数据元素,直接TYPE 基本数据类型。作飞机类型的自定义搜索帮助(数据源:SAPLANE)。

二、程序思路:

在ALV中实现指定字段的搜索帮助:

  • 一种方法是:在ABAP字典定义搜索帮助。然后在FIELDCATALGO 中设置三个参数:

​ REF_TABLE (参照表) REF_FIELD (参照字段) F4AVAILABL = ‘X’ (字段有搜索帮助)。

  • 第二种方法:自定义代码来实现ALV的搜索帮助。

​ 对于FM_ALV 来说,要走这种“自定义搜索帮助”的思路, 其实就是给自己“套”个 OOALV的“壳”后,利用类:CL_GUI_ALV_GRIDR 一些特性, 主要是 ONF4 事件来实现自定义搜索帮助。 F4AVAILABL = ‘X’ (字段有搜索帮助) 也是要有的。

三、程序文件

如下为全部代码,为方便大家一步复制到自己的系统上,直接执行,查看运行效果,我去除了 INCLUDE 文件。但是建议希望大家,验证效果后,自己再归整为如图下方式,便于调试与理解。
在这里插入图片描述
如下代码,直接复制后,粘贴到自己系统直接就好……

*&---------------------------------------------------------------------*
*& Report ZRAY_FM_ALV_F4
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZRAY_FM_ALV_F4C.
***声明变量部
TYPE-POOLS: slis.
TABLES: spfli.

TYPES: BEGIN OF ty_spfli,
         carrid    TYPE  char3 , "航线代码
         connid    TYPE  numc4 , "航班连接编号
         countryfr TYPE  char3 , "国家/地区代码
         cityfrom  TYPE  char20  , "起飞城市
         airpfrom  TYPE  char3 , "始发机场
         countryto TYPE  char3 , "国家/地区代码
         cityto    TYPE  char20  , "到达城市
         airpto    TYPE  char3 , "目标机场
         plane TYPE  char10  ,    "飞机类型
         seatsmax  TYPE  int4     , "经济舱的最大容量
       END OF ty_spfli.
TYPES:BEGIN OF ty_help,                 "自定义搜索帮助表类型
        planetype  TYPE  s_planetye  , "飞机类型
        seatsmax   TYPE  s_seatsmax  , "经济舱的最大容量
        seatsmax_b TYPE  s_smax_b  , "商务舱的最大容量
        seatsmax_f TYPE  s_smax_f  , "头等舱的最大容量
      END OF ty_help.

DATA:
  gt_alv TYPE STANDARD TABLE OF ty_spfli,   "定义内表 及工作区
  gs_alv TYPE ty_spfli.
DATA: gt_f4_help TYPE STANDARD TABLE OF ty_help.


DATA: gs_layout   TYPE lvc_s_layo,     " 设置布局样式 参数结构
      gt_fieldcat TYPE lvc_t_fcat,    "设置字段目录参数表
      gs_fieldcat TYPE lvc_s_fcat,      "设置字段目录参数表的工作区
      gT_events   TYPE slis_t_event.     " 设置ALV 的事件参数表
DATA:
      go_grid TYPE REF TO cl_gui_alv_grid.
***---------------------------------------------------
*&---------------------------------------------------------------------*
*& 包含               ZRAY_FM_ALV_F4_CLASS
*&---------------------------------------------------------------------*

***"类自定义部分及类方法相关子例
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS: handle_f4
      FOR EVENT ONF4 OF cl_gui_alv_grid
      IMPORTING e_fieldname      "字段名称
                es_row_no        "行号,注意这是个结构
                er_event_data .    "事件数据
ENDCLASS.

CLASS: lcl_event_receiver IMPLEMENTATION.
  METHOD HANDLE_F4.
    DATA: LS_STABLE TYPE LVC_S_STBL.   "定义基于稳定的刷新 所需要参数。
    LS_STABLE-ROW = 'X'.    "行固定
    LS_STABLE-COL = 'X'.   "列固定

    IF e_fieldname = 'PLANE'.   "又是小写的问题,一定要注意
      PERFORM f4_help_plane USING e_fieldname    "字段名称
                                   es_row_no       "行号,注意这是个结构
                                   er_event_data .    "事件数据
    ENDIF.
    CALL METHOD go_grid->refresh_table_display    " 使用类:CL_GUI_ALV_GRID的实例的方法,稳定刷新
      EXPORTING
        is_stable      = LS_STABLE.
  ENDMETHOD.
ENDCLASS.
**------------------------------------------
*&--------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值