sAP ALV说明.docx
《sAP ALV说明.docx》由会员分享,可在线阅读,更多相关《sAP ALV说明.docx(44页珍藏版)》请在冰豆网上搜索。
sAPALV说明
SAPALV详细说明
2012-05-2220:
17:
58| 分类:
默认分类| 标签:
sap alv 详细说明 |字号大中小 订阅
一.ALV介绍
TheALVGridControl(ALV=SAPListViewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的应用程序中使用.
SAP提示:
在SAP的开发项目中,ALVGRID也可以作为修改和创建数据的一种工具,然而,目前这个功能只在实验计划中使用,还没有向客户发布.
下面是一个ALVGRID的图片:
它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏.
ALV家族包含3中ALV工具:
简易的,两层ALV,分等级连续的列表和树形结构的ALV.
二.ALVGRIDCONTROL(ALV网格控制器)
ALVGRIDCONTROL使用了控制器技术以实现艺术性的屏幕显示,象所有的控制器一样,ALVGRIDCONTROL通过系统中的一个全局的类提供了方法,以响应它的动作.
使用了ABAP的对象以后,列表是通过ALV的一个实例(INSTANCE)来显示的,程序员可以使用ABAP对象的事件管理.
三.ALVGRIDCONTROL实例
ALVGRID实例的定义,参照CL_GUI_ALV_GRID类
data ALV_GRID1typereftocl_gui_alv_grid.
ALVGRID继承结构:
四、ALVGRID相关的几个控制结构
1.字段目录 [Fieldcatalog]
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.
常用的控制字段如下:
(下面的示例将说明这些字段的使用,参考STRUCTURELVC_S_FCAT)
2
ROW_POS
ALV控制:
输出行(内部使用)
3
COL_POS
ALV控制:
输出列
列的位置,第几列,例如1,2,…..
4
FIELDNAME
ALV控制:
内部表字段的字段名称
字段名称
5
TABNAME
LVC标签名称
表名,如果是内表,是1
6
CURRENCY
ALV控制:
货币单位
7
CFIELDNAME
ALV控制:
参考的当前单位的字段名称
8
QUANTITY
ALV控制:
计量单位
9
QFIELDNAME
ALV控制:
参考计量单位的字段名称
0
IFIELDNAME
ALV控制:
内部表字段的字段名称
11
ROUND
ALV控制:
ROUND值
12
EXPONENT
ALV控制:
流动表示的指数
13
KEY
ALV控制:
关键字段
关键字段,前面变蓝色
14
KEY_SEL
ALV控制:
可以被隐藏的关键列
可以被隐藏的关键列
15
ICON
ALV控制:
作为图标输出
此列作为图标输出
16
SYMBOL
ALV控制:
输出作为符号
17
CHECKBOX
ALV控制:
作为复选框输出
复选框输出
18
JUST
ALV控制:
对齐
对齐方式:
'R':
rightjustified
'L':
leftjustified
'C':
centered
19
LZERO
ALV控制:
输出前导零
X'
20
NO_SIGN
ALV控制:
输出抑制符号
X',不输出符号
21
NO_ZERO
ALV控制:
为输出隐藏零
X',隐藏0
22
NO_CONVEXT
ALV控制:
不考虑输出的转换退出
23
EDIT_MASK
ALV控制:
为输出编辑掩码
格式
24
EMPHASIZE
ALV控制:
带有颜色的高亮列
列的颜色
25
FIX_COLUMN
ALV控制:
固定列
26
DO_SUM
ALV控制:
总计列值
X',合计
27
NO_SUM
ALV控制:
没有总计列值
X',没有合计
28
NO_OUT
ALV控制:
列没有输出
X',隐藏此列
29
TECH
ALV控制:
技术字段
X'.也是隐藏,但是有点不一样
30
OUTPUTLEN
ALV控制:
列的字符宽度
输出的长度
31
CONVEXIT
转换例程
32
SELTEXT
ALV控制:
对话功能的列标识符
33
TOOLTIP
ALV控制:
列抬头的工具提示
34
ROLLNAME
ALV控制:
F1帮助的数据元素
35
DATATYPE
ABAP字典中的数据类型
ABAP字典中的数据类型
36
INTTYPE
ABAP数据类型(C,D,N,...)
ABAP数据类型(C,D,N,...)
37
INTLEN
以字节计的内部长度
内容的长度
38
LOWERCASE
允许/不允许小写字母
X'允许大小写
39
REPTEXT
标题
40
HIER_LEVEL
ALV控制:
内部使用
41
REPREP
ALV控制:
价值是补充/补充接口的选择标准
42
DOMNAME
定义域名
43
SP_GROUP
组代码
44
HOTSPOT
ALV控制:
单击敏感
X',下面出现下划线,响应单击
45
DFIELDNAME
ALV控制:
数据库中列组的字段名称
46
COL_ID
ALV控制:
列ID
47
F4AVAILABL
字段有输入帮助吗
X'.此列有搜索帮助
48
AUTO_VALUE
ALV控制:
自动复制值
49
CHECKTABLE
表名
50
VALEXI
固定值存在
51
WEB_FIELD
ALV控制:
内部表字段的字段名称
52
HREF_HNDL
自然数
热点连接的句柄
53
STYLE
ALV控制:
样式
下面有例子会介绍,比如PUSHBUTTION
54
STYLE2
ALV控制:
样式
55
STYLE3
ALV控制:
样式
56
STYLE4
ALV控制:
样式
57
DRDN_HNDL
自然数
下拉的句柄
58
DRDN_FIELD
ALV控制:
内部表字段的字段名称
下拉的字段
59
NO_MERGING
字符字段长度1
相同的值不合并
60
H_FTYPE
ALV树控制:
功能类型(总计,平均,最大.最小,...)
61
COL_OPT
可选列优化的条目
62
NO_INIT_CH
字符字段长度1
63
DRDN_ALIAS
字符字段长度1
64
REF_FIELD
ALV控制:
内部表字段的参考字段名称
65
REF_TABLE
ALV控制:
内部表字段的参考表名称
66
TXT_FIELD
ALV控制:
内部表字段的字段名称
67
ROUNDFIELD
ALV控制:
带有ROUND说明的字段名称
68
DECIMALS_O
ALV控制:
输出小数位的编号
69
DECMLFIELD
ALV控制:
带有DECIMALS说明的字段名称
70
DD_OUTLEN
ALV控制:
输出字符长度
71
DECIMALS
小数点后的位数
设置小数的位数
72
COLTEXT
ALV控制:
列标题
列标题
73
SCRTEXT_L
长字段标签
74
SCRTEXT_M
中字段标签
75
SCRTEXT_S
短字段标签
76
COLDDICTXT
ALV控制:
确定DDIC文本参考
77
SELDDICTXT
ALV控制:
确定DDIC文本参考
78
TIPDDICTXT
ALV控制:
确定DDIC文本参考
79
EDIT
ALV控制:
准备输入
输出状态.'X'可输入
80
TECH_COL
ALV控制:
内部使用
81
TECH_FORM
ALV控制:
内部使用
82
TECH_COMP
ALV控制:
内部使用
83
HIER_CPOS
ALV控制:
层次列位置
84
H_COL_KEY
树控制:
列名称/项目名称
85
H_SELECT
标识是否可以选择树控制中的列
86
DD_ROLL
数据元素(语义域)
87
DRAGDROPID
ALV控制:
拖&放处理拖放对象
88
MAC
字符字段长度1
89
INDX_FIELD
自然数
90
INDX_CFIEL
自然数
91
INDX_QFIEL
自然数
92
INDX_IFIEL
自然数
93
INDX_ROUND
自然数
94
INDX_DECML
自然数
95
GET_STYLE
字符字段长度1
96
MARK
字符字段长度1
2.布局控制[layout]
布局是用来控制整个ALV的一个布局,比如ALV的标题,是否可编辑,行颜色,列颜色.
参照ALV的控制结构[LVC_S_LAYO],以后的例子我将详细介绍如何设置行颜色和列颜色.
详细的结构说明
字段名
描述
Valuerange
CWIDTH_OPT
最优化宽度
SPACE,'X'
SMALLTITLE
小标题,如果设置了这个字段,
则标题与列标题大小一样
SPACE,'X'
GRID_TITLE
标题,在网格和工具条之间
最长70个字符
NO_HEADERS
如果被设置,列标题隐藏
SPACE,'X'
NO_HGRIDLN
隐藏水平线
SPACE,'X'
NO_MERGING
禁用单元格合并
SPACE,'X'
NO_ROWMARK
如果被设置,选择列在选择模式
为D和A的时候隐藏
SPACE,'X'
NO_TOOLBAR
隐藏工具条
SPACE,'X'
NO_VGRIDLN
隐藏垂直线
SPACE,'X'
SEL_MODE
选择模式
SPACE,'A','B','C','D'
EXCP_CONDS
合计例外
SPACE,'X'
EXCP_FNAME
字段名称带有例外编码
最长30个字符
EXCP_LED
例外作为LED
SPACE,'X'
EXCP_ROLLN
例外文档的数据元素
SPACE,'X'
CTAB_FNAME
带有复杂单元格颜色编码的字段名称
最长30个字符
INFO_FNAME
带有简单行彩色代码的字段名称
最长30个字符
ZEBRA
可选行颜色,如果设置了,出现了间隔色带
SPACE,'X'
NO_TOTLINE
没有总计
SPACE,'X'
NUMC_TOTAL
可以对NUMC字段进行合计
SPACE,'X'
TOTALS_BEF
总计输出在第一行,小计在新的值之前
SPACE,'X'
STYLEFNAME
设置单元格,比如PUSHBUTTON
最长30个字符
3.打印和排序,过滤控制
打印的参数控制请参考结构[LVC_S_PRNT]
排序的参数控制请参考结构[LVC_S_SORT]
过滤的参数控制请参考结构[LVC_S_FILT]
这里不再一一解释,进入中文版本,里面应该也有解释的,虽然一些不是很清楚.
五.编写简单的ALV程序.
首先这里就不详细介绍DIALOG的用法了.
OO的ALVGRID必须存在于一个容器当中,就是FUNCTION的ALV,其实也是一样的,底层也是使用CL_GUI_ALV_GRID这个类的.
首先ALV的显示需要有几个先决条件.
1,字段目录,这个是必须的,如果没有这个参数,参考一个数据字典也是可以的,就是参数I_STRUCTURE_NAME.
2.存放数据的内表,最好内表的结构和字段目录是一致的,否则可能会出现一些无法预知的错误,当然你说我非要不一样,那也不一定会出现错误.我建议是最好一样的.
这2个是必须的,布局的话,应该是可以不设置的,使用默认的就可以了.
第一步:
创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.
DATA:
WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID.
*---存放字段目录的内表
DATAgt_fieldcatTYPElvc_t_fcat.
*---布局结构
DATAgs_layoutTYPElvc_s_layo.
*----声明需要显示的内表(以SFLIGHT为例)
DATABEGINOFgt_listOCCURS0.
INCLUDESTRUCTURESFLIGHT.
DATAENDOFgt_list.
第二步:
创建ALV这个对象,它的父组件是那个容器.
在PBO中写入如下代码:
PROCESSBEFOREOUTPUT.
MODULEdisplay_alv.
创建DISPLAY_ALV的MODULE后,写下如下代码:
MODULEdisplay_alvOUTPUT.
PERFORMdisplay_alv.
ENDMODULE.
在FORMDISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:
IF WCL_ALVISINITIAL.
CREATE OBJECT:
WCL_CONTAINER
EXPORTING
CONTAINER_NAME = 'ALV_CON'.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
*-----准备获取字段目录
PERFORMprepare_field_catalogCHANGINGgt_fieldcat.
*-----设置布局
PERFORMprepare_layoutCHANGINGgs_layout.
*-----显示ALV
CALLMETHODgr_alvgrid->set_table_for_first_display
EXPORTING
*I_BUFFER_ACTIVE=
*I_CONSISTENCY_CHECK=
*I_STRUCTURE_NAME=
*IS_VARIANT=
*I_SAVE=
*I_DEFAULT='X'
is_layout=gs_layout
*IS_PRINT=
*IT_SPECIAL_GROUPS=
*IT_TOOLBAR_EXCLUDING=
*IT_HYPERLINK=
CHANGING
it_outtab=gt_list[]
it_fieldcatalog=gt_fieldcat
*IT_SORT=
*IT_FILTER=
EXCEPTIONS
invalid_parameter_combination=1
program_error=2
too_many_lines=3
OTHERS=4.
ELSE.
*----刷新ALV
CALLMETHODgr_alvgrid->refresh_table_display
*EXPORTING
*IS_STABLE=
*I_SOFT_REFRESH=
EXCEPTIONS
finished=1
OTHERS=2.
IFsy-subrc<>0.
*--异常处理
ENDIF.
ENDIF.
方法"set_table_for_first_display"的参数说明
参数
含义
I_BUFFER_ACTIVE
如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是
相同的字段目录.既然这样,那么字段目录会被放到一个特殊的缓存里,
这样加速了ALV的显示
I_STRUCTURE_NAME
输出数据参考的数据字典的结构名,例如'SFLIGHT'.如果指定了这个参数,字段
目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值.
IS_VARIANT
决定布局显示的变式
I_SAVE
决定用户是否可以保存变式:
'X'只能保存全局变式
'U'只能保存特定变式
'A'都可以保存
SPACE不可以保存变式
I_DEFAULT
决定用户是否可以定义默认的布局:
'X'可以定义默认布局,这个参数是默认的
SPACE不可以定义默认布局
IS_LAYOUT
布局参数,传递布局控制的一些信息
IS_PRINT
后台打印属性的参数
IT_SPECIAL_GROUPS
如果在字段目录中,一些字段通过SP_GROUP被分组在一起.我们就必须为这些
组传递一个组的文本内表进去
IT_TOOLBAR_EXCLUDING
需要隐藏的标准的按钮的内表
IT_HYPERLINK
为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,
HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接
IT_ALV_GRAPHICS
比较复杂,没有用过,意思好象是可以在图表中显示ALV.
IT_OUTTAB
输出数据存放的内表,数据都是存放在这个内表里
IT_FIELDCATALOG
字段目录
IT_SORT
排序的标准
IT_FILTER
过滤的标准
方法"REFRESH_TABLE_DISPLAY"的参数说明
参数
含义
IS_STABLE
刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值,
那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动.
I_SOFT_REFRESH
这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计,
任何排序次序,任何为了显示数据而设置的过滤都将保持不变.这个是非常
有意义的.例如:
当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是
改变一下布局和字段目录.
第三步,获取要显示数据的字段目录.有两种方式.
1.手动创建
FORMprepare_field_catalogCHANGINGpt_fieldcatTYPElvc_t_fcat.
DATAls_fcattypelvc_s_fcat.
ls_fcat-fieldname='CARRID'.
ls_fcat-inttype='C'.
ls_fcat-outputlen='3'.
ls_fcat-coltext='CarrierID'.
ls_fcat-seltext='CarrierID'.
APPENDls_fcattopt_fieldcat.
CLEARls_fcat.
ls_fcat-fieldname='CONNID'.
ls_fcat-ref_table='SFLIGHT'.
ls_fcat-ref_table='CONNID'.
ls_fcat-outputlen='3'.
ls_fcat-coltext='ConnectionID'.
ls_fcat-seltext='ConnectionID'.
APPENDls_fcattopt_fieldcat.
ENDFORM.
2.半自动的创建
FORMprepare_field_catalogCHANGINGpt_fieldcatTYPElvc_t_fcat.
DATAls_fcattypelvc_s_fcat.
CALLFUNCTION'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name='SFLIGHT'
CHANGING
ct_fieldcat=pt_fieldcat[]
EXCEPTIONS
inconsistent_interface=1
program_error=2
OTHERS=3.
IFsy-subrc<>0.
*--Exceptionhandling
ENDIF.
LOOPATpt_fieldcatINTOls_fcat.
CASEpt_fieldcat-fieldname.
WHEN'CARRID'.
ls_fcat-outpulen='10'.
ls_fcat-coltext='AirlineCarrierID'.
MODIFYpt_fieldcatFROMls_fcat.
WHEN'PAYMENTSUM'.
ls_fcat-no_out='X'.
MODIFYpt_fieldcatFROMls_fcat.
ENDCASE.
ENDLOOP.
ENDFORM.
第四步,设置布局
FORMprepare_layoutCHANGINGps_layoutTYPElvc_s_layo.
ps_layout-zebra='X'.
ps_layout-grid_title='Flights'.
ps_layout-smalltitle='X'.
ENDFORM."prepare_layout
第五步,排除不需要的标准按钮(可选,这个是第一种方法,还有另外一种,在添加自定义的按钮的时候介绍)
在你的ALV上,如果你想排除一些你不想要的标准按钮,你可以把需要排除的按钮填入到表UI_FUNCTIONS中,然后传给set_table_for_first_display方法的参数"IT_TOOLBAR_EXCLUDING".这些按钮的功能码一般都可以通过查看类cl_gui_alv_grid的常量属性