OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出

基本使用原理:

通过界面调用,在界面的Customer Control控件中,输出ALV

CLASS ALV优势

使用面向对象的编程方式

使用容器,可以在一个界面中指定位置进行ALV的输出

 

执行步骤

ALV实现相关变量定义

创建本地类的声明及实现(EVENT HANDLER

创建界面,并创建Customer Control容器

实例化container,关联Customer Control容器

ALV植入container

ALV格式化(layoutfieldcat的赋值等)

注册相关事件

执行ALV显示(CALL METHOD GS_XXX->SET_TABLE_FOR_FIRST_DISPLAY

 

主要使用的类

Data for ALV

DATA: gs_alv         TYPE REF TO cl_gui_alv_grid,    “用于表单输出

           gs_con         TYPE REF TO cl_gui_custom_container,  “用于定义容器

           gs_dyndoc_id   TYPE REF TO cl_dd_document,   “用于表头书写

           gs_splitter    TYPE REF TO cl_gui_splitter_container.  “用于分割容器

 

主要使用的方法

第一次输出表单:SET_TABLE_FOR_FIRST_DISPLAY 

刷新表单内容:REFRESH_TABLE_DISPLAY

I_SOFT_REFRESH’X’ :只刷新单元格(如果有合计不自动更新)

刷新fieldcat SET_FRONTED_FIELDCATALOG

如果fieldcat格式有修改,需要刷新格式设置,则调用这个方法

 

执行步骤

创建REPORT程序,在END-OF-SELECTION中执行输出,创建界面0100,调用界面

TOP INCLUDE中增加基本定义

在界面中增加customer control控件,例名称为GS_CON

在界面的PBO部分增加module,用于ALV输出

设置fieldcatlayout等属性,通过调用方法执行ALV的初次输出或刷新

在使用ALV类之前,需要对其进行创建,并指定ALV输出时的容器

步骤

定义,参照类定义ALV及容器

GS_ALV         TYPE REF TO CL_GUI_ALV_GRID,   “ALV输出

GS_CON         TYPE REF TO CL_GUI_CUSTOM_CONTAINER,  “ALV容器

在界面中增加Customer Control控件,例名称为:GC_CON

实例化容器对象,给CONSTRUCTOR构造方法传值

CONTAINER_NAME,界面中用户定义容器名称

实例化ALV对象,给CONSTRUCTOR构造方法传值

I_PARENT,实例化的容器对象

定义

表:LVC_T_FCAT

结构:LVC_S_FCAT

执行ALV输出前,对fieldcat表单进行赋值

调用ALV输出方法时,传值给IT_FIELDCATALOG

字段名

描述

COL_POS

输出列 列的位置,第几列,例如1,2,…

FIELDNAME

字段名称

CURRENCY/CFIELDNAME

货币单位/参考的当前单位的字段名称

QUANTITY/QFIELDNAME

计量单位/参考计量单位的字段名称

DO_SUM

总计列值 ‘X',合计

FIX_COLUMN

固定列

EMPHASIZE

列的颜色

NO_OUT

列没有输出 ‘X' ,隐藏此列

OUTPUTLEN

列的字符宽度

DATATYPE

ABAP 字典中的数据类型

INTTYPE

ABAP 数据类型(C,D,N,...)

HOTSPOT

单击敏感 ‘X',下面出现下划线,响应单击

DECIMALS

设置小数的位数

SCRTEXT_L/M/S

字段标签长//

定义:

结构:LVC_S_LAYO

执行ALV输出前,layout结构进行赋值

调用ALV输出方法时,传值给IS_LAYOUT

字段名

描述

CWIDTH_OPT

最优化宽度 SPACE, 'X'

GRID_TITLE

标题,在网格和工具条之间 最长70个字符

NO_TOOLBAR

隐藏工具条 SPACE, 'X'

NO_VGRIDLN

隐藏垂直线 SPACE, 'X'

SEL_MODE

选择模式 SPACE, 'A', 'B', 'C', 'D'

CTAB_FNAME

带有复杂单元格颜色编码的字段名称 最长30个字符

INFO_FNAME

带有简单行彩色代码的字段名称 最长30个字符

ZEBRA

可选行颜色,如果设置了,出现了间隔色带 SPACE, 'X'

STYLEFNAME

字段格式

 

颜色值的设置:C+X(颜色:1~7)X(是否加重:1/0)X(是否反色1/0)

以列为单位

FIELDCAT中给EMPHASIZE字段赋值

以行为单位

在内表中增加一个字段,类型为CHAR,至少长度为4,例COLOR

给向输出内表获取数据时,给COLOR字段赋值

设置LAYOUT,给INFO_FNAME字段赋值颜色字段名称,例COLOR

以单元格为单位

在内表中增加一个字段,类型为LVC_T_SCOL ,例COLOR

在向输出内表取数据时,通过结构给COLOR字段内表赋值

设置LAYOUT,给CTAB_FNAME字段赋值颜色字段名称,例COLOR

 

以表单为单位

设置LAYOUT-EDIT,为X,可修改

以列为单位

设置FIELDCAT-EDIT,为X,列可修改

以单元格为单位

在内表中增加一个字段,类型为LVC_T_STYL ,例CELLSTL

在需要设置修改属性的位置,通过结构给CELLSTL字段内表赋值

FIELDNAME,需要设置属性的字段名

STYLE,可修改属性

不可修改:CL_GUI_ALV_GRID=>MC_STYLE_DISABLED

可修改:CL_GUI_ALV_GRID=>MC_STYLE_ENALBED

设置LAYOUT,给STYLEFNAME字段赋值修改属性的字段名,例CELLSTL

特别,如果将某一列中部分字段设置为可修改状态,一般通过以下方式完成

FIELDCAT中,设置该列属性为可修改

在表单赋值时,将不应为可修改状态的字段,设置为不可修改

***不是将需要修改的单元格设置为可修改,防止可修改属性设置与静态属性设置冲突

排序

定义:内表:LVC_T_SORT,结构:LVC_S_SORT

CHANGING参数IT_SORT进行传值

筛选

定义:内表: LVC_T_FILT ,结构: LVC_S_FILT

CHANGING参数IT_FILTER进行传值

布局设置

EXPORTING参数I_SAVE传值

EXPORTING参数IS_VARIANT传值

可以在界面中增加布局保存相关按钮

选择布局

修改布局

保存布局

维护布局

ALV,若想保存布局,要添加I_SAVE参数

I_SAVE定义为C数据类型,值如下:

= 不能保存布局

X’ = 布局只能被保存为标准布局,不能够指定用户

U’ = 只能指定用户布局

‘A’ = 既能选择标准布局,也可选择指定用户布局

为了进一步管理布局,则需要加入IS_VARIANT参数

数据结构参考DISVARIANT

设置字段

REPORT = SY-REPID  “程序名称

VARIANT为布局保存格式

三个有用函数供调用保存的格式布局,分别

REUSE_ALV_VARIANT_DEFAULT_GET   读取默认的布局

REUSE_ALV_VARIANT_EXISTENCE         检测指定布局是否存在

REUSE_ALV_VARIANT_F4                         显示布局格式选择对话

优先级

当排序、筛选等也设置时以布局管理参数设置优先

当用户设置布局参数默认值时,以布局参数传值优先

基本原理:

OO ALV输出过程中,默认输出按钮栏,包含标准按钮

如果标准按钮中有部分不需要的按钮,通过隐藏实现

定义及传值参数

定义内表G_TOOLBAR,参照UI_FUNCTIONS,作为隐藏按钮内表

EXPORTING参数IT_TOOLBAR_EXCLUDING传隐藏按钮内表

G_TOOLBAR传值,通过传CL_GUI_ALV_GRID=>MC_FC_*等静态属性实现

增加的值:隐藏的按钮

注释的/未增加的值:显示的按钮

REFRESH: G_TOOLBAR.

  PERFORM APPEND_ALV_EXCLUDE_FUNCTIONS TABLES G_TOOLBAR
    USING:   CL_GUI_ALV_GRID=>MC_FC_REPREP            ,

             CL_GUI_ALV_GRID=>MC_FC_CHECK         ,

             CL_GUI_ALV_GRID=>MC_MB_EXPORT            ,

             CL_GUI_ALV_GRID=>MC_FC_DETAIL            ,

             CL_GUI_ALV_GRID=>MC_FC_REFRESH           ,

             CL_GUI_ALV_GRID=>MC_FC_GRAPH             ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO          ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW    ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW    ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW      ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_CUT           ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW    ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW ,

             CL_GUI_ALV_GRID=>MC_FC_INFO              ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_COPY          ,

             CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE         ,

             CL_GUI_ALV_GRID=>MC_FC_PRINT             ,

             CL_GUI_ALV_GRID=>MC_MB_SUM               ,

             CL_GUI_ALV_GRID=>MC_MB_VIEW              ,

             CL_GUI_ALV_GRID=>MC_FC_CURRENT_VARIANT   ,

             CL_GUI_ALV_GRID=>MC_FC_SAVE_VARIANT      ,

             CL_GUI_ALV_GRID=>MC_FC_LOAD_VARIANT      ,

             CL_GUI_ALV_GRID=>MC_FC_MAINTAIN_VARIANT  .

FORM APPEND_ALV_EXCLUDE_FUNCTIONS TABLES PT_EXCLUDE TYPE UI_FUNCTIONS

                                    USING  P_VALUE    TYPE UI_FUNC.

  APPEND P_VALUE TO PT_EXCLUDE.

ENDFORM.                    " APPEND_ALV_EXCLUDE_FUNCTIONS

基本原理

ALV类中,提供定义好的事件

创建本地类(event handler),对事件创建方法执行相关处理

步骤

相关定义

创建本地类(event handler

根据event,增加方法定义及实现

注册事件

声明

可以在TOP中直接使用DEFINITION DEFERRED语句,先推迟声明一个类

后续会对这个类进行实际的定义,这里先使用这个类

参照类声明对象

类的创建

CLS INCLUDE

实例化及注册事件

操作ALV事件:TOOLBAR

主要操作E_OBJECT对象

通过结构向MT_TOOLBAR赋值

参数讲解:

 

字段

功能

FUNCTION

功能代码

ICON

图标

QUICKINFO

鼠标悬停时简要信息说明

DISABLED

按钮状态为不可用

TEXT

显示文本

CHECKED

设置为选中时的状态

BUTN_TYPE

按钮类型(长度1位)

0      正常按钮,默认值

1菜单和缺省按钮

2菜单

3分隔符

4单选按钮

5复选框

6菜单项

注册事件

操作ALV事件USER_COMMAND

一般针对在TOOLBAR事件中增加的按钮进行功能处理

如果是与表单内容相关的按钮,例如单行打印、部分下载、选中行可修改等,在此部分设置

如果是针对整个界面的按钮,例如后退、退出等,则在界面0100中,使用SET PF-STATUS设置,功能写在界面PAI部分

主要操作对象

判断UCOMM(按钮功能)

注意:

需要时捕获选中行信息

需要时调用刷新ALV显示方法

注册事件

操作ALV事件:TOP_OF_PAGE

基本原理

在本地类中增加方法,处理事件

表头内容写入到表头内容的类中

将表头内容与表头输出的类关联

ALV显示容器分割成两部分

获取上半部分用于表头输出

获取下半部分用于表体输出

ALV输出后,将表头输出

基本定义

注册事件

操作ALV事件:HOTSPOT_CLICK

基本原理:

FIELDCAT中设置过HOTSPOT的字段

点击时通过方法获取到当前行//单元格信息

执行相应操作

主要操作对象

E_ROW_ID:行信息

E_COLUMN_ID:列信息

注册事件

选中物料代码,跳转至MM03界面

通过E_COLUMN_ID-FIELDNAME判断字段名称

通过方法GET_CURRENT_CELL,获取当前单元格的值

如果需要的话可以根据E_ROW_ID-INDEX值读取表中行

如果需要的话可以创建和表单相同的结构用于数据处理

操作ALV事件:DOUBLE_CLICK

主要操作对象:

E_ROW:双击单元格的行信息

E_COLUMN:双击单元格的列信息

ES_ROW_NO:行编号

注册事件

操作ALV事件:DATA_CHANGED

基本原理:

当数据修改时,可以触发这个事件

可以进行数据检查或修改等功能

触发方式

注册事件

注意:如果界面中有保存按钮等功能,注意是否需要在功能语句中增加调用DATA_CHANGED的语句

CALL METHOD gs_alv->check_changed_data.

效果:这样在点击保存按钮的时候,可以触发data changed事件

效果:点选复选框的同时,即自动修改至内表中

DOCK CONTAINER

customer container的区别:不需要创建customer control控件

ALV LIST

可以用来实现多层次显示,用+展开

上面是抬头或合计,下面有详细信息

 

SALV

调用类CL_SALV_TABLE

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐