文章目录
前言
练习本实例所需要具备的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.
**------------------------------------------
*&--------------------------------------------