【ABAP】OO ALV 概述
•OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出•基本使用原理:–通过界面调用,在界面的Customer Control控件中,输出ALV•CLASS ALV优势–使用面向对象的编程方式–使用容器,可以在一个界面中指定位置进行ALV的输出•执行步骤–ALV实现相关变量定义–创建本地类的声明及实现(EVENT HANDLE...
•OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出
•基本使用原理:
–通过界面调用,在界面的Customer Control控件中,输出ALV
•CLASS ALV优势
–使用面向对象的编程方式
–使用容器,可以在一个界面中指定位置进行ALV的输出
•执行步骤
–ALV实现相关变量定义
–创建本地类的声明及实现(EVENT HANDLER)
–创建界面,并创建Customer Control容器
–实例化container,关联Customer Control容器
–将ALV植入container中
–ALV格式化(layout及fieldcat的赋值等)
–注册相关事件
–执行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输出
–设置fieldcat及layout等属性,通过调用方法执行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
更多推荐
所有评论(0)