【ABAP】OO ALV 概述
•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
【ABAP】OO ALV 概述相关推荐
- ABAP - OO ALV基本实现步骤
ABAP - OO ALV基本实现步骤 新建程序 定义屏幕 PBO实现 PAI实现 完整代码 新建程序 使用T-code:SE38 新建Report: ZOOALV 为新建的Report分配一个pac ...
- SAP ABAP OO ALV全屏显示
通过CL_GUI_SPLITTER_CONTAINER拆分容器,实现OO ALV全屏幕显示. 1.创建屏幕0100 . 代码实现如下: DATA SPLITTER TYPE REF TO CL_GUI ...
- abap oo alv
OO ALV 1.相关类 CL_GUI_ALV_GRID CL_GUI_CUSTOM_CONTAINER CL_GUI_DOCKING_CONTAINER CL_GUI_SPLITTER_CONTAI ...
- OO ALV简单报表之DOCKING容器实现
OO ALV报表实现 后面再说其他的 由简入繁助于理解 下面介绍一下OO ALV的灵魂 两个类(SE24查看): CL_GUI_ALV_GRID CL_GUI_DOCKING_CONTAINER 介绍 ...
- 【转载】SAP OO ALV 在自定义屏幕上添加ALV控件 一个屏幕上使用2个ALV
终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...
- SAP OO ALV 一个屏幕上使用2个ALV
终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...
- ABAP OO的八大理由(四)
OO编程优于过程编程的五个原因 下面的部分里我们将着重论述OO编程的主要优点,尽管这里所提到的优点与其他的OO语言(JAVA C++)没有什么太大的区别,我们这里着重在ABAP OO与传统的ABAP程 ...
- OO ALV 工具栏对于的功能码
原文地址:OO ALV 工具栏对于的功能码作者:Lemon 图标与对应的 功能码 明细 &DETAIL 检查 &CHECK 刷新 &REFRESH 剪切 &LOCAL& ...
- ABAP OO的八大理由
1. ABAP OO更加明确所以更易于使用.例如在使用ABAPOO你的程序的执行流程不再是由运行时隐含的控制.这样你就可以自己去设计程序所执行的流程了而不必像面向过程那样去了解和服从外部 ...
最新文章
- 模拟人脑项目彻底宣告失败:耗资10亿欧,10年前轰动全球,如今死得悄无声息...
- JS中同名函数有效执行顺序
- 更快更强,来试试 Mybatis 的增强版——EasyMybatis
- 如何用轻量协作工具做bug管理
- Eclipse-插件的安装之link文件方法
- 500 强IT公司武汉诚聘 .Net Specialist (Team Leader)
- java zookeeper 主从热备_zookeeper 学习
- 2017百度之星资格赛题解(1003、1004)
- 布客·ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1
- Java单例模式双检锁原理
- 闰秒及其对计算机系统影响,闰秒原理及其对计算机系统影响
- 简书 android底部导航,Android BottomNavigationView底部导航栏的使用
- Python str(float) 科学计数法
- taobao wap session
- 计算机应用技术机测,[计算机应用技术]阶段测评1(2016年版)(13页)-原创力文档...
- linux更换进程执行码,第八节 进程的切换和系统的一般执行过程—— 20135203齐岳...
- 学术论文如何撰写数据分析部分?
- xcopy、rd、COPY、MD、DEL、REN 命令祥解
- cookie模拟登陆爬取药智网中药材数据库数据
- 建立企业的目标---团队凝聚力的开始