ALV 在 WD4A中使用指南read.pudn.com/downloads570/doc/2342948/ALV For WebDynpro.pdf ·...
Transcript of ALV 在 WD4A中使用指南read.pudn.com/downloads570/doc/2342948/ALV For WebDynpro.pdf ·...
ALVALVALVALV 在 WD4AWD4AWD4AWD4A中使用指南
一、ALV简介
ALV是一个用来显示列表和结构化数据的工具。它提供标准功能的一般列表操作,以
及用户特殊功能的增强。
ALV是一个 WD 组件,可以和你的应用结合在一起。
ALV组件 SALV_WD_TABLE 是一个可配置的WD 组件,它用来在表格中显示数据。
它包括一个可配置模型(ALV configuration model),该模型让你可以决定它的显示状态,功
能和运行时行为,以及标准 ALV显示。
对于用户来说,ALV标准的输出包括有:toolbar,title和 table。
� 概况
个性化选项的变量是能够让用户保存在一个个性化的页面中。
例如,下面的功能可以使用 ALV的配置:
过滤;
多列的排序;
计算字段和小计;
显示水晶报表;
配置打印成 PDF 格式;
导出数据到 Excel;结构化显示表;
当开发者把 ALV应用到你自己的应用中,你可以既可以事先进行设置,也可用 ALV的
配置模型(Cinfiguration Model)。当使用 ALV配置模型的时候,你可以决定哪些标准功能提
供给用户,以及这些配置的初始化。具体的使用将在后面的章节详细讲述。
你也有许多的 ALV配置点,比如:
设计 ALV的显示和行为。你可以用不同的 cell editors,定义背景色和 size 等。
实现拖拽功能
� 允许用户改变数据和配置
设计特殊的空间在表的上面或者下面,可以有不同的格式显示或者表格的汇总
提供用户特殊的功能在 tool bar上� 过程:将 ALV添加到你的应用中
你执行如下的步骤可以将 ALV加入到你的应用中:
1、在你的 WD 组件中定义一个 ALV的引用(SALV_WD_TABLE)。2、映射你的 context node 数据到 ALV控件上。
3、用一个 VIEW包括 ALV控件
� 用 ALV配置模型动态配置
如果你想改变标准的设置或者功能的实现,你必须包括有 ALV Configuration Model
二、在你的 WD 中使用 ALVALV能够让你的引用和它很好的结合在一起,就像其他的 WD 组件一样,你只需要很
少的几步就可以完成。
先决条件:
� 你可以创建你的WD 组件,并且使它 active� 你可以创建 context node ,并且设置 cardinality为 0..n 的模式。
过程:
� 定义一个组件的引用,以至于你能够使用 ALV� 你要MAP 你的 context node数据到 ALV上
� 你 embed ALV组件到你的 VIEW中
2.1、定义 ALV的引用
为了使用 ALV 在你的应用中,使用组件 SALV_WD_TABLE,你要包括 ALV 到你的
WD 组件中。就是定义个引用组件。
ALV组件提供 interface controller SALV_WD_TABLE,你能够使用如下:
� MAP 你的 context node 数据到 ALV组件
� 使用 interface controller SALV_WD_TABLE提供的方法和事件。
� 访问 ALV的配置模型
步骤:(略)
结果:
2..2、向 ALV数据提供数据
为了向显示数据的ALV提供数据,你必须连接你的 context node和ALV的DATA contextnode ,这个使用 external context mapping.
在 ALV的 context 中,这个 context node DATA仅仅包含一个引用,引用到你的应用的
context。然后在转而引用到一个内表。
默认的情况下,ALV使用你引用的数据。过滤,计算以及其他的 ALV功能,ALV的显
示等由 ALV各种不同的执行机制,
重要规则:排序
ALV必须有一个实体的数据集(dataset),这样才能排序。因此,ALV组件临时控制内
表数据,在此期间,你的 context data 无效。要确保 ALV控件在编辑内表的时候,应用程序
不能访问 context。一旦内表被排序,ALV就重新建立了 context node,释放它给应用程序,显示新的数据。
这样做的好处是内表 没有被 copy过。主要的原因是大量的数据对执行效率和内存空间
的影响。
当你在做应用的时候,下面的机制需要考虑:
� 当你的 context node 无效的时候,当前选择的信息,以及 lead selection 将被丢失。
� 如果你的应用已经创建了子节点为 context node(主从),在 ALV 使 context node无效的时候,子节点立即丢失。此刻如果应用访问子节点,将有一个运行时错误。
先决条件:
为 ALV包括的 context node 数据必须有如下条件:
1、它的 cardinality 0..n。2、它仅仅包括属性,而没有子节点:对内表的每一列,你创建一个同名的属性和数据
类型。
3、所有的属性都是静态的,不能是动态的。
4、内表数据必须是存在的平面结构。最简单的方法是用存在的 DDIC结构。
步骤:
1、在WD 导航中打开:component usages->my_alv_comp_usage->interfaceontroller_usage
2、选择你的组件控制器
3、MAP 你的 context node 和 ALV控件。
Set_data 方法:
另外一个包数据传输到 ALV 控件的方法是用 set_data 方法。你可以把你引用的当前
context node 当成一个参数。用这种方法,你能够让你的 ALV使用另外一种结构。
� 注意:
用 set_data 方法总是删除掉已经存在的 alv 配置模型。
2.3、ALV嵌入的 VIEWSALV组件包括下面的 views:
� TABLE这是 ALV的主要 VIEW。主要用来显示 ALV.。这个 TABLE VIEW是一个容器,用来显示 ALV。它是 ALV 的基本部分,因此,你不
能改变它的 LAYOUT。� SERVICE
这个 VIEW包括设置的对话框,如用户改变列的显示,排序,过滤等。
默认的,这个 VIEW显示在 ALV的上面,用户在 TOOLBAR 上面的链接来设置。你可
以使用这个 VIEW当你想在同一个 window 中显示在另外一个位置。(更多的信息看后面相
关章节)
� CONTROL_VIEW你不能使用这个 view,它仅仅是 SAP 使用的。
步骤:(略)
三、用 ALV configuration Model 动态配置 ALV如果在你的WD 应用中使用 ALV,你能够使用 SAP 的 ALV配置模型的全部功能。
先决条件:
为了使用 ALV的配置模型,你必须在你的WD 应用中包括 ALV组件。
如果你想在 view 控件或者组件控件访问模型,你必须实现相应的方法。
步骤:
1、得到 ALV配置模型
3.1、ALV configuration Model 对象
下图是 ALV配置模型的所有 CLASS 和 INTERFACE.
这个类图式被简化了的。你可以在 包 SALV_WD_CONFIG 找到完全的结构。
下面是可以配置 ALV的主要地方:
� TABLE 设置 ( IF_SALV_WD_TABLE_SETTINGS)对于 TABLE 这个 UI元素来说,数据不仅包括有应用的结构化数据,还包括有 ALV显
示的显示方式和功能等技术范畴。比如,你可以把 ALV显示简单的数据,二维表或者有层
次的列(笔者注:就像在 ALV中显示树形结构)。
� Column 设置 ( IF_SALV_WD_COLUMNS_SETTINGS )
Column 对象是在 ALV中定义的可见元素。列和在 context node 中的属性或者字段对象
有同样的名字。列对象的包括设置同名的字段在 ALV中怎么样显示数据。如果你不想显示
该字段的值,你可以删除相应的列对象。
你用 column settings 管理所有的列对象。
� Field 设置( IF_SALV_WD_FIELD_SETTINGS )Field 描述在 ALV使用的数据。Filed的名字和 context node 中的属性的名字匹配:所有
的 filed 对象是被自动创建的在你为 context node 构建属性的时候。结果,在 context node 中的每个属性有一个同名的代理在 ALV Configuration Model。
� ALV标准功能设置(IF_SALV_WD_STD_FUNCTIONS )ALV提供一系列的功能。下面列出 ALV主要的功能:
� ALV服务:排序,过滤,平均(总计),以及其他的的设置;
� 设置可编辑的 ALV:比如插入,删除操作;
� 导出 ALV数据到 excel或者 PDF.所有这些功能都有对应的 UI元素显示。你可以用标准功能设置来显示或者隐藏这些 UI元素。
� 设置特殊应用功能(IF_SALV_WD_FUNCTION_SETTINGS)你可以定义许多在你的应用中想要的功能,以及提供合适的 UI元素提供给用户使用。
3.2、得到 ALV configuration Model 对象
为了能够使用ALV的配置模型,你可以在WDDOINIT中从类 IWCI_SALV_WD_TABLE中使用适当的方法得到。
� GET_MODEL你得到完整的 ALV配置模型包括有:所有的 column objects 和 field objects。该方法没
有参数。
� GET_MODEL_EXTENDED就像上面一样,系统返回所有的 field objects,但是仅仅返回需要的 column objects。比
如,你想关了一个有大量 field 的数据,但是你只想显示很少的几列数据,首先创建 filed 对
象,然后再需要显示内容的时候在生成 column 对象。
该方法参数 s_param 包括有字段 DEFAULT_COLUMNS。这能够让你决定这个 column是否被创建。
备注:
你可以在 ALV显示的后阶段指定一个新的内表数据。可以用接口控件的 set_data 方法
做到这点。然后,你用这个方法后,ALV将自动删除所有的 filed 和 column 对象的 ALV配
置模型。为了能够再次使用配置模型在新数据上面,可以使用方法 GET_MODEL 或者
GET_MODEL_EXTENDED。
步骤:
为了能够使用 ALV配置模型,你必须明确的初始化 ALV组件
1、在一个合适的点写上你的代码(如:WDDONIIT)2、对需要的 ALV组件编程(用代码向导可以自动完成如下代码)
DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
lo_cmp_usage = wd_this->wd_cpuse_cmp_alv( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL.
lo_cmp_usage->create_component( ).
ENDIF.
3、打开 WD的代码向导,选择方法 Call in Used Controller。4、选择你的 ALV控件,选择你需要调用的方法,如 GET_MODEL。
DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
lo_interfacecontroller = wd_this->wd_cpifc_cmp_alv( ).
DATA lo_value TYPE REF TO cl_salv_wd_config_table.
lo_value = lo_interfacecontroller->get_model( ).
5、现在你就可以访问不同的 ALV配置模型的 interface 了。
备注:
为了能够使用 ALV的标准功能,调用如下代码
四、配置标准 ALV 功能
ALV的标准功能有如下:
� 排序;
� 过滤;
� 总计(平均);
� 指定应用初始页面(译者注:不太明白)
� 导出
� PDF格式打印
4.1、标准 ALV的功能和属性
ALV提供了广泛的标准功能,你可以定制一些标准功能,比如可用或者不可用(TCODE为 SIMGH)
初始化标准功能:
功能 客户化配置 接口方法 用户视觉
排序 ALV初始化显示的时
候没有排序,用户可
以通过点击排序
SET_SORT_COMPLEX_ALLOWED
SET_SORT_HEADDERCLIKC_ALLOWED
点击排序按钮
过滤 SET_FILTER_COMPLEX_ALLOWED
SET_FILTER_FILTERLINE_ALLOWED
点击过滤按钮,设置
过滤条件
PDF 打印 当有 JAVA 服务的时
候,打印时唯一的可
SET_PDF_ALLOWED
点击 PDF 按钮
能(译者注:不懂什
么意思)
导出成 EXCEL SET_EXPORT_ALLOWED
在导出按钮上,选择
导出到 EXCEL用水晶报表显示
配置个性化选项
可视化设置对话框 如果设置对话框被锁
定,用户不能设置其
他个性化选项
SET_DIALOG_SETTINGS_ALLOWED
点击 settings 按钮
个性化列显示 SET_COLUMN_SETTINGS_ALLOWED
列选择标签页
个性化 VIEW SET_DISPLAY_SETTINGS_ALLOWED
显示选择标签页
保存选择页 SET_VIEW_LIST_ALLOWED
在 settings 页面中的
SAVEAS...
初始化被失效的标准功能
下面的功能在标准设置的时候是被失效的,你可以在客户化的时候激活它,也可以用 ALV配置模型激活(译者注:重要功能,如编辑,汇总等在后面有详细叙述,此处翻译跳过)
4.2、排序
你可以改变 ALV数据记录的顺序按照特定的规则。你可以指定 fields 的值(字母或者
数字)按照规则,所有的行都重新排列。
你可以使用下列的设定排序:
� 创建,得到或者删除排序设置;
� 指定升序或者降序
� 分组
� 按照点击的表头排序
� 排序一个字段,用另外一个字段的值
� 隐藏排序设置页
创建,得到或者删除一个字段的排序条件
在 ALV的输出中,排序时一个字段的属性。对于 Create,get 或者删除一个字段的排序
条件,你可以用接口 IF_SALV_WD_SORT的方法实现。
功能 方法
得到排序条件 GET_SORT_RULE创建排序条件 CREATE_SORT_RULE删除排序条件 DELETE_SORT_RULE
字段排序的条件有类 CL_SALV_WD_SORT_RULE 的对象描述。
注意:
如果你用一个新的数据或者新的结构赋值给 ALV输出,所有字段上面的排序条件自动
的删除。
指定排序方向和排序顺序
对每个可以排序的字段,你可以设置它是升序还是降序。
为了改变排序的方向和排序的顺序,你可以用类 CL_SALV_WD-SORT_RULE 的方法。
功能 方法
指定排序方向 SET_SORT_ORDER得到排序方向 GET_SORT_ORDER指定字段在排序中的位置 SET_SORT_POSITION得到字段在排序中的位置 GET_SORT_POSITION
你也可用指定首选排序方向,当用户在当前列排序的时候。
为了定义这个默认的排序方式,你可以用接口 IF_SALV_WD_SORT的方法。
功能 方法
指定默认的排序方式 SET_INITIAL_SORT_ORDER
得到默认的排序方式 GET_INITIAL_SORT_ORDER
相同的值分组显示
默认的,在排序中,相同的值被组合在一起显示。这个值是分组的。你可以指定这个值
在每一行都显示,即使这个值没有改变。为了这到这种效果,你可以使用接口
IF_SALV_WD_SORT(实现类为 CL_SALV_WD_FIELD)这个类的方法。
功能 方法
分组,去掉分组 SET_GROUPING_ALLOWED检查是否分组 IS_GROUPING_ALLOWED
设置某字段不能排序
你可以让某个字段不排序,它可以导致以下结果:
� 这个字段不再显示在排序设置对话框的标签页中;
� 如果你允许用户在 AVL的表头单击排序,那么该字段的单击排序按钮将隐藏;
� 在你的应用中为这个字段定义了一个排序,那么这个排序条件在 ALV的输出中不
起作用。
为了设置不能排序的字段,你可以使用接口 IF_SALV_WD_SORT的方法:
功能 方法
不能排序 SET_SORT_ALLOWED检查是否允许排序 IS_SORT_ALLOWED
通过单击表头排序
你可以在 ALV的列头上面显示一个 ICON。用户可以通过这个 ICON 排序该列,升序
或者降序。
你可以让用户仅仅一列排序,或者通过 CTRL 键多列排序。
达到上述功能,你可以使用接口 IF_SALV_WD_STD_FUNCTIONS.的方法。
功能 方法
显示 ICON 在列头上 SET_SORT_HEADERCLICK_ALLOWED检查是否显示了 ICON 在列头上 IS_SORT_HEADERCLICK_ALLOWED
为了可以有多列可以排序,你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方
法:
功能 方法
能够多列排序 SET_MULTI_COLUMN_SORT检查是否多列排序 GET_MULTI_COLUMN_SORT
4.3、过滤
使用过滤,可以限制显示在 ALV中的记录数量。为此,你要指定一个条件,让符合条
件的记录显示,不符合的过滤掉。
你可以操作过滤的功能有:
� 为某个字段创建,得到或者删除过滤条件;
不像排序,你可以为每个字段定义任意多的过滤条件。
你可也创建一个过滤条件为每个没有明确指定不允许过滤的列。
过滤是一 ALV输出的字段的个属性。为了能够创建,得到或者删除某个字段的过滤条
件,可以使用接口类 IF_SALV_WD_FILTER的方法(实现类 CL_SALV-WD_FILED).
功能 方法
得到过滤条件 GET_FILTER_RULE得到某字段的所有过滤条件 GET_FILTER_RULES创建过滤条件 CREATE_FILTER_RULE删除过滤条件 DELETE_FILTER_RULE删除某个字段的所有过滤条件 DELETE_FILTER_RULES
类 CL_SALV_WD_FILTER_RULE 的对象描述了某个字段的过滤条件。
备注:如果你将一个使用新结构的数据表格赋值给 ALV,则该 ALV中以前存在的所有
字段上的所有过滤条件都将自动删除。
� 设置过滤条件
下面说明了一个过滤条件包括的内容:
� 比较每一行的值(LOW_VALUE, HIGH_VALUE)� 操作比较字段的值(大于,小于或者等于)
� 包括或者排除
为了改变这些设置的条件,可以使用类 CL_SALV_WD_FILTER_RULE 的方法。
功能 方法
设置 low 的值 SET_LOW_VALUE得到 low 的值 GET_LOW_VALUE设置 high 的值 SET_HIGH_VALUE得到 high 的值 GET_HIGH_VALUE设置操作 SET_OPERATOR得到操作 GET_OPERATOR设置包含或者排除 SET_INCLUDED得到包含或者排除 GET_INCLUDED
� 忽略大小写
如 果 你 想 在 过 滤 条 件 中 设 置 是 否 忽 略 大 小 写 , 可 以 使 用 接 口 类
IF_SALV_WD_FIELD_SETTINGS 的方法。
功能 方法
忽略大写 SET_FILTER_IGNORING_CASE检查大写是否忽略 IS_FILTER_IGNORING_CASE
� 为某个字段不允许过滤
你可以设置某个字段不能过滤,影响如下:
� 如果 ALV是可以过滤的,那么过滤行就自动的显示当前可以设置过滤的列。
如果某个字段不能过滤,在过滤行中,当前的单元格不能填写。
� 在设置对话框中,在过滤标签页中,相应不能过滤的列不再能设置为过滤。
� 如果你在你的应用中定义了一个关于不能过滤字段的过滤条件,那么在 ALV输出的时候 ALV的该过滤布起作用。
使用接口类 IF_SALV-WD_FILTER来设置字段的过滤。
功能 方法
某字段不能过滤 SET_FILTER_ALLOWED
检查是否能过滤 IS_FILTER_ALLOWED
� 用另外一个字段的值过滤
� 隐藏或者显示过滤的 toolbar 在 ALV的工具栏上面
4.4、计算
你可以在一个数字类型的字段上面执行汇总。你可以创建一个汇总的条件,结果是显示
在一个分离的结果行上。
中间结果
一般的,在你执行汇总的时候,是某个字段的所有行都参与计算。你可以得到一个中间
的结果。为此,你可以对你想要使用的中间结果排序和分组。
你为汇总可以使用如下的设置:
� 创建,得到和删除功能
� 设置汇总
� 产生中间结果
� 在界面中隐藏或者显示汇总或者子汇总
创建、获得和删除功能
你可以为一个字段创建最大为一的汇总规则。汇总在 ALV中是一个字段的属性。你可
以使用接口类 IF_SALV_WD_AGGR 的方法来创建,获取和删除对一个字段汇总的规
则。
功能 方法
得到汇总规则 GET_AGGR_RULE创建汇总规则 CREATE_AGGR_RULE删除汇总规则 DELETE_AGGR_RULE
类 CL_SALV_WD_AGGR_RULE的对象描述字段的汇总规则。
备注:如果你用新的数据结构赋值给 ALV,那么所有字段上的所有汇总规则都自动删
除。
计算调整
在 ALV 的设置对话空中,汇总功能默认是没有被激活的。你激活可以用
IF_SALV_WD-STD_FUNCTIONS~SET_AGGREGATION_ALLOWED.选项有小计和定义计算类型。
显示表的行数。
参考 IF_SALV_WD_STD_FUNCTIONS 和 IF_SALV_WD_FIELD_SETTINGS 的系统文
档。
你可以为计算字段设置如下功能:
� 指定汇总类型;
� 指定结果行的位置
� 设置行不能汇总
指定汇总类型
� 总计
� 最大值
� 最小值
� Mean value(几何平均值,不太明白具体含义)
定义计算类型,可以使用类 CL_SALV_WD_AGGR_RULE的方法。
功能 方法
指定计算类型 SET_AGGREGATION_TYPE得到计算类型 GET_AGGREGATION_TYPE
在上面列出的所有汇总类型以外,你也可以定义数据记录的总行数。这个结果显示在结
果行的第一个列。因为这个设置可以影响 ALV 的输出,你可以使用接口类
IF_SALV_WD_FIELD-SETTINGS 的方法。
功能 方法
显示记录的行数 SET_COUNT_RECORDS_ENABLED
是否显示记录行数 IS_COUNT_RECORDS_ENABLED
指定结构行的位置
你可以指定结果显示在 ALV 的数据显示的上面或者下面。你可以使用接口类
IF_SALV_WD_FIELD_SETTINGS 的方法。
功能 方法
放置结构在数据记录的前面 SET_AGGR_BEFORE_ITEMS是否结构显示在记录的前面 IS_AGGR_BEFORE_ITEMS
指定一个字段不能汇总
默认情况下,所有数字类型的字段都可以汇总。如果你需要,你可以指定某个字段不能
汇总操作。影响如下:
� 该列在设置对话框中的计算字段不再是活动的。
� 如果你为这个字段定义了一个汇总规则,那么这个汇总过程不会被执行。
禁止汇总字段,使用接口类 IF_SALV_WD_AGGR的方法
功能 方法
禁止汇总 SET_AGGREGATION_ALLOWED检查是否汇总 IS_AGGREGATION_ALLOWED
中间结果
默认的情况下,所有被定义为汇总的值都将被使用。而且,你可以生成中间结果。实现
这点,你可以把包括有中间结果的记录分组放置在一起,中间结果显示在一个分离的行上。
为了产生中间结果,你必须设置:
� 指定一个你想汇总中间结果的字段,为该字段创建一个汇总规则。总结果显示在结
果行上。
� 指定包括中间结果的数据记录,把这些记录分组放置在一起:对有中间结果的字段
排序。
� 产生中间结果
� 显示中间结果
备注:如果中间结果多于一行,例如,你显示不同的货币金额(人民币,美元等),或
者你把表显示在一个层次级别中,那么中间结果将不显示。
中间结果,你可以:
� 产生中间结果
� 显示中间结果
� 指定钻取中间结果的层级
� 指定结果显示的位置
� 不让产生中间结果
条件
� 你至少在一个字段上定义一个汇总条件
� 拥有中间结果条件的字段不能汇总而且有一个字段类型
产生中间结果
为了给已经有汇总条件产生的字段产生中间结果,你要为一个字段创建一个排序条件
(排序条件的设置,见前面章节)。
在 这 个 排 序 条 件 中 , 你 指 定 是 否 产 生 中 间 结 果 。 你 可 以 使 用 类
CL_SALV_WD_SORT_RULE 的方法。
功能 方法
产生中间结果 SET_GROUP_AGGREGATION得到中间结果 GET_GROUP_AGGREGATION
显示中间结果
一旦你创建好了所有的设置,为了创建中间结果,你必须激活显示这些中间结果。为此,
你可以使用接口类 IF_SALV_WD_FIELD_SETTINGS.功能 方法
显示中间结果 SET_GROUP_AGGR_DISPLAYED检查中间结果是否显示 GET_GROUP_AGGR_DISPLAYED
指定中间结果的钻取层级
如果你为多个字符字段定义了中间结果,这个结果将显示在多个小计中:根据他们层级
的显示需要,中间结果显示在一个特定的位置。用户可以在这些特定的位置显示或者隐
藏每个中间结果的实体。在你的应用中,你可以显示或者隐藏一个或多个小计的层级。
你也可以收起中间结果:你可以隐藏所有的层次的小计的数据明细。
上述功能可以用接口类 IF_SALV_WD_FIELD_SETTINGS 的方法实现。
功能 方法
指定最高小计层级显示 SET_EXPAND_LEVEL得到当前小计层级显示 GET_EXPAND_LEVEL收缩中间结果 SET_GROUP_AGGR_COLLAPSED检查数据是否收缩中间结果 GET_GROUP_AGGR_COLLAPSED
不允许产生中间结果
使用接口类 IF_SALV_WD_SORT的方法设置
功能 方法
不允许产生中间结果 SET_GROUP_AGGREGATION_ALLOWED检查是否产生中间结果 IS_GROUP_AGGREGATION_ALLOWED
4.5、初始化 VIEW不同的人可以修改 ALV的显示属性:
� 应用开发人员可以对 ALV配置模型编程来产生 ALV的输出。
在没有更多的配置产生,系统总是使用在代码中指定的类型。在 VIEW的下拉列
表中,显示了所有用户的默认 VIEW。
� 应用开发人员可以指定数据记录的配置在应用配置中。
� 系统管理员可以修改【DEFAULT VIEW】属性,即客户化。
� 系统管理员可以指定一个激活的页为初始页,即客户化
� 用户可以指定一个激活的页当做初始页,即个性化
下面的章节描述了作为开发人员的你如何开发一个特定的配置为 ALV的数据记录。
前提
� 你是经过认证可以保存数据记录配置和修改应用配置。
� 你可以保存至少一个数据记录的配置
� 如果应用包括有多于一个的 ALV,你必须知道当前 ALV组件的名字
过程
1、为当前页的配置决定一个 ID编号
备注:当你保存一个页面的描述,并没有产生一个序列。因此,你不能使用这个描述。
你要使用一个特定的编号,这个编号系统可以自动产生。
为了能够在后面的步骤中使用当前数据记录的配置,你需要一个当前 VIEW的配置编
号。
(1)、开始配置模型的应用
(2)、打开 ALV的设置对话框
(3)、选择属性,这个配置编号就显示在该属性对话框中
(4)、拷贝这个配置编号在这个 VIEW中。
2、指定一个数据记录的配置当做开始配置
你可以在每个应用中保存不同的配置。一个配置的属性是一个 ALV的页面的开始配置。
(1)、产生一个应用配置或者选择一个存在的
(2)、选择一个你想配置的 ALV控件
(3)、(本节以下省略,以后翻译)
4.6、导出
用户可以在当前的 ALV输出成不同的格式:
� EXCEL� ADOBE ACROBAT(PDF,使用不到,不再翻译)� 水晶报表(使用不多,不再翻译)
� BEx 分析(不懂用在什么地方,暂时不翻译)
导出到 EXCEL为了把 ALV导出到 EXCEL 中,用户选择导出按钮就可以了。
下列 EXCEL的格式被支持:
� EXCEL for office 2007� EXCEL (MHTML format)� EXCEL (MHTML format for 2000/97)
指定需要的标准格式,执行事务代码(SIMGH).而且,在你的应用中,在用户导出的时候,你可以定义其他的信息也导入到 EXCEL中,
这些信息包括有:
� 页头和页脚
� 结果行的汇总
设计对象导出数据到 EXCEL中
如果你定义了设计对象页头和页脚给 ALV中,你可以定义在导出的文件中是否包括有
这些内容。你可以使用接口类 IF_SALV_WD_EXPORT_SETTINGS 的方法。
功能 方法
拷贝设计对象到 EXCEL 头 SET_EXPORT_NO_TOL检查是否有设计对象到 EXCEL头 GET_EXPORT_NO_TOL拷贝设计对象到 EXCEL 脚 SET_EXPORT_NO_EOL检查是否有设计对象到 EXCEL脚 GET_EXPORT_NO_EOL
拷贝计算的结果行道 EXCEL中
在导出的时候,你可以指定是否在导出的结果中包括有结果汇总或者中间结果汇总。你
可以使用接口类 IF_SALV_WD_EXPORT_SETTINGS 的方法。
功能 方法
拷贝结果到 EXCEL中 SET_EXPORT_NO_SUMS检查是否拷贝结果到 EXCEL中 GET_EXPORT_NO_SUMS
(以下省略翻译 10页,主要是讲解 PDF打印控制的内容)
五、管理 ALV显示区域
在 ALV的显示中,包括有如下的显示区域,你可以产生,修改和去掉每个部分
� 你可以包括一个标题和一个图形
� 你可以选择一个字段是否可见,你可以组织列和给列头赋值
� 你可以包括一个垂直或者水平滚动条
� 你可以定义页头和页脚
� 你可以定义设置对话框的显示位置
5.1、ALV头显示
默认的,ALV显示没有表头。你可以产生一个表头在 ALV显示的上面,表头可以有以
下部分:
� 文本
� 图形
� TOOLTIP
你可以在 ALV中设置如下操作:
� 创建,得到和删除头对象
� 指定头的内容
� 在头中指定图像
� 在头中指定图像的位置
� 指定 TOOLTIP的内容
创建,获取和删除头对象
ALV的头显示是类 CL_SALV_WD_HEADER的一个对象。为了产生或者删除该对象,
你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方法。
功能 方法
产生一个头对象 CREATE_HEADER获取头对象 GET_HEADER删除头对象 DELETE_HEADER
指定头内容
ALV的头显示为字符串类型。为定义这种头,可以使用类 CL_SALV_WD_HEADER.功能 方法
头内容 SET_TEXT得到头内容 GET_TEXT
指定图片路径在表头上
你可以显示一个图片在你的 ALV 上面。为了定义这个路径,可以使用类
CL_SALV_WD_HEADER。功能 方法
设置图片路径 SET_IMAGE_SOURCE得到图片路径 GET_IMAGE_SOURCE
指定图片在表头的位置
同样使用类 CL_SALV_WD_HEADER。功能 方法
设置在头的位置 SET_IMAGE_FIRST得到在头的位置 GET_IMAGE_FIRST
指定提示
同样使用类 CL_SALV_WD_HEADER。功能 方法
指定提示内容 SET_TOOLTIP得到提示内容 GET_TOOLTIP
5.2、字段
如果你用 ALV的配置模型,所有字段对象都被自动产生了。结果是,每个在 CONTEXTNODE中的 attribute都有一个同名的描述在 ALV配置模型中。作为连接内表和 context node,在开始你的 ALV引用的时候,这些都已经准备好了。你可以排序,过滤或者执行使用语句。
所有这些都是字段的基本功能。然而现在你和不能显示数据。为了显示,你需要列。
有二种情况下使用字段对象:
� 你想在 ALV显示之前,使用 ALV的标准功能。
� 你想赋值属性
你可以为字段对象使用如下设置:
� 得到字段对象
� 得到字段名
备注:你不能创建新的字段或者删除已经存在的字段。
得到字段对象
为了得到需要设置的一个字段,你首先要得到字段对象。你可以决定你根据字段名得到
一个指定的字段对象,或者得到所有的字段对象。以上情况都可以用接口 类
IF_SALV_WD_FIELD_SETTINGS 的方法。
功能 方法
得到一个单独的字段对象 GET_FIELD得到所有字段 GET_FIELDS
得到字段名
得到当前字段实例的名字,可以使用类 CL_SALV_WD_FIELD.功能 方法
得到字段名 GET_FIELDNAME
5.3、列
列对象在 ALV中是一个可视化的对象。这列有同样的名字就像字段对象和 context node的属性有同样的名字一样。如果你不想显示这个字段的值,你可以删除该列对象。你也可以
显示一个字段有许多列的值。
依靠你得到的 ALV配置模型,有且仅有一个,唯一的列对象和你的 context node 对应,
或者没有列对象。在后一种情况下,你必须生成列对象给需要显示的 ALV。
你对列对象有如下设置:
� 得到列对象
� 得到列对象的名字
� 创建或者删除列对象
� 设置列对象的头
� 改变列对象的位置
得到一个列对象
为了设置一个列,首先你必须要得到列对象。你可以通过列名的到列对象,或者得到所
有的列对象。通过接口类 IF_SALV_WD_COLUMN_SETTINGS。功能 方法
得到一个唯一的列对象 GET_COLUMN得到所有的列对象 GET_COLUMNS
得到列的技术名称
使用类 CL_SALV_WD_COLUMN 得到当前列的名称。
功能 方法
得到当前列的技术名称 GET_ID
创建和删除列对象
当你得到 ALV的配置模型的时候,如果你定义的是系统没有产生的列对象,你需要在
你的应用中创建该列对象。
所有的列对象都是显示出来的,如果你想对用户不显示某个列对象,你需要删除掉。
备注:当你产生一个列对象的时候,你需要输入一个技术名称。这个名称必须和你的应
用中的 context node 的属性名称一致。
对于创建和删除列对象,你可以使用接口类 IF_SALV_WD_COLUMN_SETTINGS。功能 方法
创建列对象 CREATE_COLUMN删除列对象 DELETE_COLUMN删除所有的列对象 DELETE_COLUMNS
列头
默认的,每个 ALV中的列都有一个列头。
你可以改变这些列头。你可以做到有:
� 文本
� 图形
� 提示
对列头的操作有如下几个:
� 产生,获取和删除列头对象
� 指定列头文本
� 设置是否换行在需要的时候
� 指定列头图片的路径
� 指定列头图片的位置
� 指定提示的文本
标准列头信息
标准列头信息仅仅包括文本。这个文本依赖 context node 的属性
� 如果属性没有 DDIC的引用
默认情况下,用 context node 的属性名当做列头的名字。
� 如果属性有一个 DDIC的引用:
系统使用列头使用下面的规则:
(1)、如果 DDIC的元素中包括有字段 LABEL 的信息,系统就使用该信息作为
列头;
(2)如果字段的 LABEL 没有定义,系统将使用 DDIC的技术名称。
创建、获取和删除列头对象
在 ALV输出中,列头对象是类 CL_SALV_WD_COLUMN_HEADER的一个实例。每个
列对象都有一个列头对象对应。
功能 方法
得到列头对象 GET_HEADER创建列头对象 CREATE_HEADER删除列头对象 DELETE_HEADER
指定列头文本
你可以定义一个文本为列头,你可以做如下选择:
� 你可以使用一个文本
� 你可以使用 DDIC数据,使用 DDIC字段的 LABEL来当做列头的文本。
(以下关于 DDIC方面的,省略翻译,现在使用还不多)
实现上述功能,使用类 CL_SALV_WD_COLUMN_HEADER.功能 方法
定义一个文本当做列头 SET_TEXT解除字段的 DDIC关系 SET_PROP_DDIC_BINDING_FIELD(需要
和 SET_TEXT方法联合使用
得到列头问题 GET_TEXT指定 DDIC元素 SET_PROP_DDIC_BINDING_ELEMENT得到 DDIC元素 GET_PROP_DDIC_BINDING_ELEMENT指定字段 LABEL当做列头 SET_PROP_DDIC_BINDING_FIELD得到字段 LABEL GET_PROP_DDIC_BINDING_FIELD
在列头折行
系统一般在列头没有折行。默认情况下,列的宽度就是列头的宽度。你可以指定列头是
否允许折行。
备注:为了让列头可以折行,ALV的 layout 必须是固定的。
可以使用类 CL_SALV_WD_COLUMN_HEADER.的方法(译者注:在系统中,没有找
到下列 2个方法)
功能 方法
设置折行 SET_HEADER_TEXT_WRAPPING得到是否设置为折行 GET_HEADER_TEXT_WRAPPING
指定列头的图片的路径
使用类 CL_SALV_WD_COLUMN_HEADER.的方法。
功能 方法
指定图片的路径或者编号 SET_IMAGET_SOURCE得到图片的路径或者编号 GET_IMAGET_SOURCE
指定图片的位置
功能 方法
设置图片的位置 SET_IMAGE_FIRST得到图片的位置 GET_IMAGE_FIRST
指定提示文本
列头的提示文本显示在,当用户把鼠标放置在列头的时候。
你可以设置列头的提示文本。有如下的选择:
� 你可以设置为任意文本
� 你可以设置为 DDIC数据元素的 LABLE 文本。
对 应 DDIC 的 关 联 , 首 先 是 要 得 到 一 个 DDIC 元 素 。 然 后 用 方 法
SET_PROP_DDIC_ELEMENT。使用类 CL_SALV_WD_COLUMN_HEADER.的方法。
功能 方法
设置提示文本
绑定
SET_TOOLTIPSET_PROP_DDIC_BINDING_FIELD
得到提示文本 GET_TOOLTIP设置 DDIC为提示文本 SET_PROP_DDIC_BINDING_ELEMENT得到 DDIC的数据元素 GET_PROP_DDIC_BINDING_ELEMENT指定字段的 LABEL为提示 SET_PROP_DDIC_BINDING_FIELD得到字段的 LABEL GET_PROP_DDIC_BINDING_FIELD
列的位置
默认情况下,所有列的位置和 context node 的属性的位置是一致的。你可以改变他们的
顺序。可以通过如下方法:
� 修改列位置的序号
� 固定列
你也可以指定是否允许固定列。
改变位置序号
每个列都是从 0开始,自动的分配序号。你可以通过改变位置序号,从而改变列的位置。
备注:列的位置总是 0是最左边的。这个含义就是如果你想把一个列调整到左边,你就
必须改其他的列都高于这个序号。
改变位置序号,可以使用类 CL_SALV_WD_COLUMN的方法。
功能 方法
设置序号 SET_POSITON得到序号 GET_POSITON
固定列
你可以固定列,固定列有如下功能:
� 你可以移动列到 ALV的边缘
� 当有水平滚动条的时候,固定列将不移动
当固定列的时候,你可以指定列是被固定到左边还是右边。这样你可以产生 3块列:固
定在左边的列,固定在右边的列和不固定的列。
你也可以改变固定列的序号,你可以改变一个块中的所有列的序号。
使用固定列,使用类 CL_SALV_WD_COLUMN 的方法。
功能 方法
固定列 SET_FIXED_POSITION检查是否是固定列 GET_FIXED_POSITION
允许固定列
你可以指定是否允许固定一些特例的列。你可以指定他们是固定在左边还是右边。在设
置对话框中,一个 UI元素被显示意味着固定用户可以指定固定列的数字。
操作固定列,可以用类 IF_SALV_WD_STD_FUNCTIONS 的方法。
功能 方法
允许固定列到左边 SET_FIXED_COLS_LEFT_ALLOWED检查是否允许固定列在左边 IS_FIXED_COLS_LEFT_ALLOWED设置固定列到右边 SET_FIXED_COLS_RIGTH_ALLOWED检查是否允许固定列在右边 IS_FIXED_COLS_RIGHT_ALLOWED
5.4、配置滚动条(滚动一般使用默认的设置,翻译省略了一些,有其他要求的,可以直接
看原文档)
如果 ALV的所有行或者列没有被显示,滚动条总是被显示。
更多信息
� 可见行或列的显示数量,见后面的章节
� 是否可以滚动和固定列的不同,见列的位置章节。
显示/隐藏页脚
对应 ALV一次显示太多的数据,可以用滚动条显示不可见的部分。
你可以指定滚动条什么时候可见或不可见:
� Never即使隐藏了可见区域,滚动条也不出现
� Always任何时候都显示滚动条
� Only when required如果有更多的数据需要在 ALV中显示的时候,滚动条才出现。
为了显示或隐藏滚动条,可以使用接口类 IF_SALV_WD_TABLE_SETTINGS功能 方法
显示滚动条 SET_FOOTER_VISIBLE检查滚动条是否显示 GET_FOOTER_VISIBLE
显示水平滚动条
默认情况下,所有的行都是被可视显示的。用户可能需要用滚动条才可以导航到可见的
位置。ALV的水平滚动条时隐藏的。
你可以定义一次多少列式滚动的,因此,ALV的显示宽度决定了。
可以使用接口类 IF_SALV_WD_TABLE_SETTINGS功能 方法
定义可以滚动的列 SET_SCROLLABLE_COL_COUNT得到可以滚动的列 GET_SCROLLABLE_COL_COUNT
5.5、头和脚区域
你可以用各种元素不设置 ALV 的上面和下面。为此,你需要用到设计对象(designobjets)。
你可以用各种不同类型的元素去组织成成一个设计对象。你可以在需要的位置显示设计
对象。
备注:所有设计对象的类和方法都在系统包 SALV_FORM_ELEM 中。
元素类型和布局
你用下列元素类型为你的设计对象:
� 头元素
� 文本元素
� Action信息
注:这几种类型仅仅在显示上面的不同,没有功能可以连接到这几种类型上面。
这些元素类型可以组织到你的设计类型中,为此,你可以选择一下布局组织:
� Single element创建一个元素,显示在需要的位置
� Row-type layout许多元素都在一行中显示,一个挨一个的。
� Table-type layout你管理许多元素在行或列中。
以上管理方式可以组合使用,具体用法和 VIEW布局类似。
Context Nodes TOP_OF_LIST 和 END_OF_LISTALV组件提供了 2个 Context node TOP_OF_LIST 和 END_OF_LIST。每个包括一个属
性 CONTENT。这些 context node 的数据就是你为 ALV头或脚区域的设计对象。
在你的应用中,使用一个同名的 context 和这个映射,并且设置 context 属性为你的设计
对象。
安装设计对象
下面的步骤让你安装你的设计对象到头和脚的区域:
� 映射ALV的CONTEXT NODES的TOP_OF_LIST和END_OF_LIST到你的应用中。
� 创建一个设计对象。
� 把你的设计对象放置在合适的位置
� 设置你的设计对象到 context node的 CONTENT中。
显示或者隐藏设计对象
(一下跳过若干和设计对象相关内容)
5.6、定义对话框位置
(略)
六、定义 ALV显示的外观
6.1、Columns 和 Cells 的属性设置
可以赋值各种属性去影响列的显示情况:
� 你赋值列的属性,该列的所有 CELL都使用这个属性。
� 在每个 CELL 中,字段是分离的。
你可以赋值下面的属性:
� 背景颜色
� CELL 的变种
CELL编辑属性
然而,对于一些 CELL 显示的属性是用 CELL EDITOR 使用在 CELL 中。这就意味着
CELL是否编辑决定着列的显示。下面应用也是这些属性:编辑实例能够被验证,或者他们
能被另外一个字段信息重写。
过程
下面的例子显示你可以顶一个 button 给一列中的单独的行。
在列中,可以用 BUTTON 为 CELL EDITOR。每个 CELL 都显示为一个 BUTTON。你
想隐藏这列中的一些 CELL。然而,可视化属性是基于 BUTTON 的,而不是列的,你必须
隐藏 CELL 的工作区。这就意味着 BUTTON_VIS字段决定该列的那些单元 button 可见。
1、创建类 CL_SALV_WD_UIE_BUTTON 的一个对象。
2、字段(BUTTON_VIS)包括在每个 CELL 中,你赋值这个字段给 BUTTON.3、赋值这个 button 该一个列中。
其他属性的例子:
� 字体类型用 TEXT_VIEW(SET_DESIGN or SET_DESIGN_FIELDNAME).� 图 片 选 择 BUTTON(SET_CHECKED_IMAGE_SOURCE or
SET_CHECKED_IMG_SRC_FIELDNAME)
6.2、ALV、Columns 和 Cells 的大小
默认的,ALV,列和行的显示大小依赖于他们显示的内容,换句话说:
� 一个列至少是最宽的 CELL 的宽度;
� ALV显示的宽度是所有列的宽度的总和;
� 一个行的高度是最高的 CELL 的高度
你可以容易的增加 ALV的宽度和指定列的宽度。然而,增加宽度不是那么容易。首先,
你要冻结 ALV的显示布局。赋值同样的宽度给所有的列。那么你就给每个列的宽度都相同。
你可以用下面的设置给一个单独的区域设置 SIZE。� 改变宽度
� 改变高度
� 冻结 table 的布局
改变宽度
功能 类 方法
指定 ALV的宽度 IF_SALV_WD_TABLE_SETTINGS
SET_WDITH
指定列的宽度 CL_SALV_WD_COLUMN指定图片的宽度 IF_SALV_WD_GRAPHIC_S
ETTINGS指定 CELL 的宽度
仅 仅 是 下 列 CELLEDITORS:
SET_WIDTH orSET_WIDTH_FIELDNAME
BUTTON CL_SALV_WD_UIE_BUTTON
Dropdown list box CL_SALV_WD_UIE_DROPDOWN_BY_KEY
Iamge CL_SALV_WD_UIE_IMAGE
InputField CL_SALV_WD_UIE_INPUT_FIELD
ProgressIndicator CL_SALV_WD_UIE_PROGR_INDICATOR
ToggleButton CL_SALV_WD_UIE_TOGGLE_BUTTON
ValueComparison CL_SALV_WD_UIE_VALUE_CMP
得到 ALV的宽度 IF_SALV_WD_TABLE_SETTINGS
GET_WIDTH
得到列的宽度 CL_SALV_WD_COLUMN得到图片的宽度 IF_SALV_WD_GRAPHIC_S
ETTINGS得到 CELL 的宽度 GET_WIDTH or
GET_WIDTH_FIELDNAME
改变高度
在显示的时候,你可以用行的数量来指定 ALV的高度。
备注:如果记录的数量小于可见的行数,空行被自动的添加在 ALV的后面的记录。你
可以指定没有空行显示在 ALV的后面,因此,ALV可以根据记录的数量类调整它的高度。
为了做到这点,你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方法
功能 方法
指定可见行 SET_VISIBLE_ROW_COUNT得到可见行 GET_VISIBLE_ROW_COUNT添加空行 SET_DISPLAY_EMPTY_ROWS检查是否有空行被添加 GET_DISPLAY_EMPTY_ROWS
备注:为了显示内表中的所有数据,你可以设置可见行数为-1。
冻结 TABLE 的布局
冻结 ALV的布局,可以让列的宽度比它的内容显示的宽度窄。
你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 实现
功能 方法
固定布局 SET_FIXED_TABLE_LAYOUT检查布局是否固定 GET_FIXED_TABLE_LAYOUT
6.3、区域的可见性
你可以显示或者隐藏 ALV的不同区域。
备注:如果该区域是不可见区域,那么他还将不可见。
你也可以隐藏下列的区域:
� ALV� 列
� CELL� TOOLBAR
� TOOLBAR上的标准功能
� 设计对象头
� 设计对象脚
备注:为了隐藏其他对象,比如 ALV的头或者列头,你必须要删除这些对象
区域 类 方法
全部 ALV IF_SALV_WD_TABLE_SETTINGS
SET_VISIBLEGET_VISIBLE
单个的列 CL_SALV_WD_COLUMN使用 CELL EDITOR 的 UI元素
CL_SALV_WD_UIE(所有 UI元素的父类)
所有 TOOLBAR上面的功能 IF_SALV_WD_FUNCTION_SETTINGS
设计对象在 ALV的头 IF_SALV_WD_TABLE_SETTINGS
SET_TOP_OF_LIST_VISIBLE
设计对象在 ALV的脚 IF_SALV_WD_TABLE_SETTINGS
SET_END_OF_LIST_VISIBLE
在 TOOLBAR 上的标准可视
化对象
IF_SALV_WD_STD_FUNCTIONS
SET_<STANDARD_FUNCTION>_ALLOWEDIS_<STANDARD_FUNCTION>_ALLOWED
6.4、ALV、Columns 和 Cells 的颜色
你可以指定 ALV中各个区域的颜色,主要如下:
� ALV你可以选择下面的形式:
� 标准颜色
所有的行和列都使用同种颜色
� 交叉颜色
行在白色和黑色间交替显示
� 透明色
背景是透明的,没有网格线
� 列
你可以改变一列的背景颜色。使用预先定义的颜色
� CELL 变种
用预先定义的颜色渲染 CELL 变种的颜色
� CELL这个 CELL EDITOR是 TEXT_VIEW类型的,可以显示组合颜色,背景和字体的颜
色。
� TOOLBAR可以使用如下:
� 标准色
� 彩色
� 透明
区域 类 方法
ALV IF_SALV_WD_TABLE_SETTINGS
SET_DESIGNGET_DESIGN
列 CL_SALV_WD_COLUMN SET_CELL_DESIGNGET_CELL_DESIGN
CELL变体 CL_SALV_WD_CV_STANDARD
SET_CELL_DESIGNSET_CELL_DESIGN_FIELDNAME
GET_CELL_DESIGNGET_CELL_DESIGN_FIELDNAME
CELL CL_SALV_WD_UIE_TEXT_VIEW
SET_SEMANTIC_COLORSET_SEMANTIC_COLOR_FIELDNAME
GET_SEMANTIC_COLORGET_SEMANTIC_COLOR_FIELDNAME
工具条 IF_SALV_WD_FUNCTION_SETTINGS
SET_DESIGNGET_DESIGN
6.5、文本属性
6.6、Columns 和 Rows 之间的线
6.7、表的层级
6.8、表的数据显示为图形
6.9、显示为水晶报表(跳过,使用较少)
6.10、
七、提供应用功能
你可以提供功能让用户使用 ALV。这个功能是系统提供给 ALV的,叫做 ALV标准功
能。标准功能包括有排序,过滤和总计等。
为了添加标准功能,用户可以提供扩展的功能,这个叫应用功能。
可以使用如下功能:
� 创建,获取和删除功能
� 指定用户界面元素
� 指定在工具条上面的位置
� 控件的可见和不可见
� 功能事件的触发
7.1、创建,获得和删除功能
如果你使用 ALV 的配置模型,所有的标准 ALV 功能都是自动创建的。这个对象是
CL_SALV_WD_FUNCTION_STD。
如果是自定义功能,你可以从类 CL_SALV_WD_FUNCTION 的对象产生。你可以在工
具条上面产生许多功能对象。
你可以有如下功能:
� 创建一个用户定义功能
� 得到一个功能对象
� 设置或者获取关于功能的信息
� 删除一个用户定义功能
创建一个用户定义功能
当你创建一个用户定义功能,你需要指定一个 ID(类型为字符串),它将指代你的功能
的地址。
创建用户定义对象,用接口类 IF_SALV_WD_FUNCTION_SETTINGS。功能 方法
创建一个自定义功能 CREATE_FUNCTION
得到一个功能对象
为了设置功能对象,你首先必须调用 GET方法。你可以选择得到如下的对象:
� 所有 ALV的标准功能或指定的功能
� 所有指定功能或者指定功能
� 在工具条上面的 ALV标准功能
� 在工具条上的自定义功能
接口类 IF_SALV_WD_FUNCTION_SETTINGS 的方法可以实现如上功能:
功能 方法
得到所有 ALV标准功能 GET_FUNCTIONS_STD得到指定的 ALV标准功能 GET_FUNCTION_STD得到所有用户定义功能 GET_FUNCTIONS得到指定的用户定义功能 GET_FUNCTION得到所有左对齐的标准 ALV功能 GET_FUNCTIONS_LEFT_STD得到所有左对齐的自定义功能 GET_FUNCTIONS_LEFT得到指定的左对齐的指定功能 GET_FUNCTION_LEFT得到所有右对齐的标准功能 GET_FUNCTIONS_REGHT_STD得到所有右对齐的自定义功能 GET_FUNCTIONS_RIGHT得到指定的右对齐的自定义功能 GET_FUNCTION_RIGHT
设置和得到一个功能的信息
你可以检测一个功能在工具条上面是标准功能还是自定义功能
你可以指定如下属性:
� IDALV的标准功能的 ID 是自动创建的。它包括的信息是 ALV标准功能。
自定义功能的编号是你在创建的时候,赋值的。
� GROUP你可以用任何尺度给功能分组
� 在工具条的位置
� 可视化和活动
这些信息,你可以使用类 CL_SALV_WD_FUNCTION 的方法。
功能 方法
得到功能类型 GET_TYPE得到功能编号 GET_ID给功能分组 SET_GROUP得到分组的名字 GET_GROUP
删除功能
你仅仅可以删除用户自定义的功能;你不能删除 ALV的标准功能
为 了 删 除 用 户 定 义 功 能 , 指 定 功 能 的 ID 。 使 用 接 口 类
IF_SALV_WD_FUNCTION_SETTINGS 的方法。
功能 方法
删除用户定义功能 DELETE_FUNCTION
7.2、准备上下文
一些用户自定义功能插入到工具条上,当用户触发的时候,导致数据改变。因此你可以
连接这些功能到你应用的 context node 中。为此,你可以定义个 ALV 的 context node 的
FUNCTION_ELEMENTS 的外部映射。
7.3、定义用户界面元素
你可以使用如下的 UI元素为用户定义功能:
� Button(CL_SALV_WD_FE_BUTTON)� BUTTONCHOICE(CL_SALV_WD_FE_BUTTON_CHOICE)� DROPDOWNBYINDEX(CL_SALV_WD_FE_DROPDOWN_BY_IDX)� DROPDOWNBYKEY(CL_SALV_WD_FE_DROPDOWN_BY_KEY)� INPUTFIELD(CL_SALV_WD_FE_INPUT_FIELD)� LINKTOACTION(CL_SALV_WD_FE_LINK_TO_ACTION)� LINKTOURL(CL_SALV_WD_FE_LINT_TO_URL)� TOGGLEBUTTON(CL_SALV_WD_FE_TOGGLE_BUTTON)� Separator(CL_SALV_WD_FE_SEPARATOR)
指定自定义功能的 UI元素,过程如下:
� 创建功能对象
� 创建一个工具条元素(上述的元素)
� 指定工具条元素的属性
� 给工具条元素赋功能
为了给一个合适的 UI元素给一个功能对象,你使用类 CL_SALV_WD_FUNCTION。功能 函数
得到 UI元素 SET_EDITOR获取 UI元素 GET_EDITOR
7.4、指定在工具条上的位置
你可以使用 2种方式来指定功能的位置:
� 指定在工具条上的对齐方式
你可以指定功能在工具条上是左对齐还是右对齐。
� 指定具体的位置
你可以指定功能在工具条上的具体的位置
如果你是指定的 ALV的标准功能,使用类 CL_SALV_WD_FUNCTION_STD。如果你是指定用户定义的功能,使用类 CL_SALV_WD_FUNCTION。
功能 方法
指定在工具条上对齐方式 SET_ALIGNMENT得到在工具条上对齐方式 GET_ALIGNMENT设置位置 SET_POSITION得到位置 GET_POSITION
7.5、控制可视化和激活状态
无论是否是用户定义的功能,你都可以有以下几种控制方式:
� 你可以去掉一个 UI元素的功能
� 你可以隐藏一个 UI元素
� 你可以使工具条不可用
� 你可以隐藏不可用
激活或不活动功能
如果你不想隐藏 UI元素,当时又不想用户执行它的功能,你可以使 UI元素不活动。
为了激活或不活动为 ALV的标准功能,你可以使用类 CL_SALV_WD_FUNCTION_STD的方法。
为了激活活着不活动用户定义功能,你可以从你的 UI元素类的方法。
功能 方法
能/不能功能对象 SET_ENABLED得到活动状态 GET_ENABLED
显示或隐藏功能
有下列 2种不变的变量是可用的为显示或隐藏功能:
� VISIBILITY_VISIBLE系统显示功能
� VISIBILITY_NONE系统隐藏功能
为ALV的标准功能显示或隐藏UI元素,你可以使用类CL_SALV_WD_FUNCTION_STD的方法。
为用户定义功能显示或隐藏 UI 元素,你可以使用类 CL_SALV_WD_FUNCTION 的方
法。
功能 方法
显示/隐藏功能方法 SET_VISIBILITY得到可见性 GET_VISIBILITY
显示,隐藏和不可用工具条
对 整 个 工 具 条 的 可 见 或 活 动 状 态 , 你 可 以 使 用 接 口 类
IF_SALV_WD_FUNCTION_SETTINGS 的方法。
功能 方法
活动/不活动工具条 SET_ENABLED得到活动状态 GET_ENABLED显示/隐藏工具条 SET_VISIBILITY得到可见性 GET_VISIBILITY
7.6、功能的事件触发
当用户在工具条上选择一个功能的时候,有各种作用发生。
ALV标准功能事件
对于 ALV的标准功能,你只有 2个时间点可以处理事件:当用户执行功能的时候或执
行完的时候。你不能接收到用户是否选择的任何信息。
你可以使用下列 2个事件去处理 ALV的标准功能:
� ON_STD_FUNCTION_BEFO� ON_STD_FUNCTION_AFTE
用户定义功能事件
对于用户定义功能,你可以决定用户选择的功能。
事件 ON_FUNCTION 是自定义功能的处理事件
7.7、提供 ALV标准功能用用户指定的 UI元素(推荐不要使用)
八、交互
ALV不仅仅是用来为用户显示一些数据。用户也可以通过各种方法和 ALV进行交互。
你有如下选择:
� 标准 ALV功能
在设置对话框或工具条,你可以显示或隐藏各种 UI元素。
备注:
ALV支持标准的选择功能:比方说,如果得 ALV没有任何列的值是能够被计算的,
那么对于计算的所有 UI元素就不被显示。
� 用户定义功能
你可以创建 UI元素在工具条上面,用户可以运行你的功能或者 ALV的标准功能。
� 和 AVL交互的 UI元素
你可以在 ALV的表中有交互的 UI元素。有 2种类型的交互:
� 无数据改变的交互
� 有数据改变的交互
对于这些 UI元素的用户处理 action,可以使用各种事件。
8.1、没有数据改变的交互处理
不是所有的用户动作都导致了 ALV得数据改变。比如下列的动作都没有导致数据的改
变:
� 用户选择单行或多行数据,这个主要依赖开发人员的设置
� 如果你用超链接或者按钮当做一个界面元素,你可以为用户提供相关的动作。
你可以定义各种不同的控制来处理交互
8.1.1、定义选择行和列
你可以决定在同一时刻,有多少行或列可以被用户选择。
� 能够选择行
能够用选择状态,你可以指定是否或者多少列能够被用户在同一时刻被选择。
� 能够选择列
使用选择类型,你可以指定是否或多少行能够被选择,以及是否有一个 leadselection 存在。
注意:
在写保护的 ALV的情况下,如果选择行是允许的话,用户也可以改变选择行。
你也可以阻止用户选择 CELL.
设置选择状态
你可以为每一列设置选择状态。你可以使用的状态如下:
� Not selected任何已经选择的被移除。
� Selected列被选择
� Not selectable列不能选择
为了固定选的列,可以使用类 CL_SALV_WD_COLUMN 的方法。
功能 方法
指定选择状态 SET_SELECTION_STATE得到选择状态 GET_SELECTION_STATE
设置选择类型
你可以有下列的选择类型:
� 自动
从 context node 的应用设置而来
� 不能选择(NONE)在一行的开头,没有选择按钮的出现
� 单行(SINGLE)选择按钮显示在一行的开头,用户在同一时刻,只能选择一行。这一行当做 leadselection。这时,如果你选择另外一行,那么 lead selection也改变。
� 单行没有 lead selection(SINGLE_NO_LEAD)选择按钮显示在一行的开头,用户仅仅能偶选择一行在同一时刻,ALV没有 leadselection。
� 多行(MULTI)选择按钮显示在一行的开头。用户通过同时按下 CTRL 和鼠标,可以选择多行。
第一个被选择到的是 lead selection。� 多行没有 lead selection(MULTI_NO_LEAD)
选择按钮显示在一行的开头。用户可以通过 CTRL 键多行选择。ALV 没有 leadselection。
注意:
你使用的 context node 的选择属性指定多少数据能够被选择。
比方说:如果你选择的 SELECTION 是 1..1 的时候,必须有一个数据被选择。如果你使
用的是 0..n,它可以没有选择或者有多行被选择。
使用选择类型,你不能使用比你的 context node 更多的数量被选择。如果你试图这么做,
你将得到一个运行时的异常。
比方说:如果你的SELECTION的设置时1..1,那么你就不能设置你的选择类型为MULTI或 MULTI_NO_LEAD。你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方法。
功能 方法
指定选择类型 SET_SELECTION_MODE得到选择类型 GET_SELECTION_MODE
事件处理
下面有 2种不同的事件在选择的时候可以触发:
� ON_LEAD_SELECT这个应用作用在 lead selection 被用户改变的时候。更多信息可以看系统中
WD_SALV_TABLE的文档。
� ON_SELECT应用作用在 lead selection 改变或者选择改变的时候。
系 统 仅 仅 能 够 使 用 上 述 事 件 的 一 个 。 使 用 方 法
IF_SALV_WD_TABLE_SETTGINGS~SET_ON_SELECTION_ENABLED,你可以使用事件
ON_SELECT,而 ON_LEAD_SELECT 则调用无效。
阻止选择
你可以阻止用户选择 ALV中的行。
和 NONE 的选择类型相比,选择按钮没有被隐藏;它们仅仅是不可用。
你可以决定是否阻止选择行,或者调整。
该功能使用接口类 IF_SALV_WD_TABLE_SETTINGS功能 方法
所有的行都不能选择 SET_ROW_SELECTABLE检查是否所有的行都不能选择 GET_ROW_SELECTABLE不能选择指定的行 SET_ROW_SELECTABLE_FIELDANME得到控制个边行不能选择的字段名 GET_ROW_SELECTABLE_FIELDANME
8.1.2、使用超链接和按钮作为 cell editors你可以把 UI元素放置在 ALV的 CELL 中,来响应用户的触发。下列的 UI元素不能导
致数据的改变:
� 超链接 LINK_TO_ACTION� 超链接 LINK_TO_URL� 按钮
� TOGGLEBUTTON描述 UI元素的类
UI元素 类
LINK_TO_ACTION CL_SALV_WD_UIE_LINK_TO_ACTIONLINK_TO_URL CL_SALV_WD_UIE_LINK_TO_URLBUTTON CL_SALV_WD_UIE_BUTTONTOGGLEBUTTON CL_SALV_WD_UIE_TOGGLE_BUTTON
你可以在系统包 SALV_WD_CONFIG 中找到上述的类。
事件处理
你可以使用 ON_CLICK 事件去处理如下的 UI 元素:
� BUTTON� TOGGLEBUTTON� LINK_TO_ACTION然而,UI元素 LINK_TO_URL 仅仅是一个 URL 的显示,不能 catch 到什么事件。
8.1.3、ALV的活动或不活动
默认的,ALV的输出时活动的。所有的交互 UI 元素,包括工具条和表格,如果 ALV是活动的,它们都是可用得到。
活动或者不活动,使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方法:
功能 方法
活动或者不活动 ALV SET_ENABLED检查 ALV是否 GET_ENABLED
8.2、可编辑 ALV的交互
默认情况下,ALV是以只读的方式输出的。为了让用户可以改变或者输入新的数据,
那么你必须对标准设置做修改。
过程:
1、在这些功能被使用之前,ALV的写保护必须被去掉。
2、默认情况下,ALV 用 TEXTVIEW当做 CELL EDITOR 的显示。为了使用户可以输
入或者修改数据,要使用可以交互的界面元素代替,比如 INPUTFIELD。3、用户在某个位置添加一行,附加它们到 ALV的最后,删除它们
4、可以添加一整页的空行,不但可以使单行,也可以是多行。
5、你必须定义系统检查的时间点,检查数据修改是否正确。
6、如果用户修改或者创建新的数据,数据可以被刷新,或者你仅仅刷新部分数据而不
是整个 ALV.
8.2.1、ALV控制写-保护
你可以用允许改变数据的 UI元素充当 ALV的数据。然而 ALV默认的输出时写保护的。
你首先要去掉写保护。如果你去掉了写保护,有如下影响:
� UI元素(CELL)的数据可以被改变
� 添加,附加和删除行以及检查数据改变的按钮在工具条上面显示。
备注:
如果为 ALV去掉了写保护,系统就使用特定的颜色输出到 ALV上。你不能改变这些颜
色。你所指定的颜色被重写。
为了切换写保护的开关,你可以使用接口类 IF_SALV_WD_TABLE_SETTINGS 的方法。
功能 方法
切换写保护的开关 SET_READ_ONLY检查写保护的开关 GET_READ_ONLY
过程
移除写保护
1、得到 ALV的配置模型
2、移除写保护,如下代码:
Lv_value->if_salv-wd_table_settings~set-read_only( abap_false ).
8.2.2、改变 CELL编辑
作为标准,ALV用来显示 CELL EDITOR 的通常是不准备输入的,比如 TEXTVIEW。
如果你想让 ALV 变成可以输入的,你就必须用可输入的界面元素来代替这些 CELLEDITOR。
� INPUTFIELD� CHECKBOX� TOGGLEBUTTON� TRISTATECHECKBOX� DROPDOWNBYKEY
这些元素的类
UI元素 类
INPUTFIELD CL_SALV_WD_UIE_INPUT_FIELDCHECKBOX CL_SALV_WD_UIE_INPUT_CHECKBOXTOGGLEBUTTON CL_SALV_WD_UIE_INPUT_TOGGLE_BUT
TONTRISTATECHECKBOX CL_SALV_WD_UIE_CHECKBOX_TRIDROPDOWNBYKEY CL_SALV_WD_UIE_DROPDOWN_BY_KE
Y你可以在系统包 SALV_WD_CONFIG 中找到这些类。
过程
1、初始化 ALV配置模型
2、添加代码
8.2..3、可添加删除行
你可以提供用户按钮在工具条上,让用户可以添加和删除数据记录。当你在 ALV移除
写保护的时候,这些功能被激活。
你可以得到如下功能:
� Insert row如果用户没有选择一行,新的一行就在第一行。否则,它就创建在选择行的前面。
� Append row新的一行添加在 ALV的最后一行,无论是否有行被选择。
� Delete row选择的行被选择。
用户能够插入或者删除多少行在同一时刻,依赖于有多少行被选择。你可以可以定义用
户在同一时刻有多少行可以被选择。
备注:
如果你选择的选择类型是不能选择,那么用户不能选择任何行。那么插入和删除的按钮
就被隐藏。
事件处理
事件 ON_DATE_CHECK 的参数包括有插入或删除行的索引。
8.2.4、添加整页的行输入
你可以切换 ALV到巨量数据模式。因此,你可以自动创建一个空页,输入的行在 ALV的末端。用户不必一个个的行插入,而可以整页的插入。
为了切换 ALV的数据模型,可以使用接口类 IF_SALV_WD_TABLE_SETTINGS。功能 方法
激活或不能使用巨量数据模式 SET_EDIT_MODE检查数据的模式 GET_EDIT_MODE
过程
1、得到 ALV的配置模型
2、激活巨量数据模型
3、如果你想在新的行显示初始值,你可以使用方法:
8.2.5、指定检查时点
在可编辑的 ALV中,用户可以修改添加或删除行。这些改变仅仅是初始存储在 ALV的
上下文中。在预先设置的时间,系统从 ALV的 context 传输到你的应用的 context,以及检
查数据类型是否正确。这就确保正确的数据应用到后续的动作上。
你可以指定时刻让正确的数据保存到你的应用中:
� 当用户输入回车按钮或者触发系统动作(DATA_CHECK_ON_CELL_EVENT)。� 用户选择检查(DATA_CHECK_ON_CHECK_EVENT)。
� 当你触发系统的检查点(DATA_CHECK)。
由用户指定检查时刻
指定那些用户的动作被数据检查,可以使用接口类 IF_SALV_WD_TABLE_SETTINGS。功能 方法
设置时间 SET_DATA_CHECK得到时间 GET_DATA_CHECK
事件处理
当数据被检查的时候,事件 ON_DATA_CHECK被触发。
8.2.6、刷新显示
默认情况下,数据更新后,ALV 立即刷新。在列表中的数据时被更新以及设置对话框
中的设置被应用,这个结果可不能被影响。
自动刷新
系统自动更新显示和应用设置对话框设置在下列的机制下。你不能改变这些机制:
� 用户插入行,添加或删除。
� 应用修改数据
� 用户从新设置了设置对话框,并且点击了 OK� 排序 ALV.
手工刷新
当用户修改了数据的时候,或当前的设置修改的时候,你可以控制仅仅刷新影响的数据,
有 2个方法可以做到这点,每种都有 2种设置:
� SET_REFRESH_ON_DATE_CHANGE当用户改变数据或者按下回车键后,控件刷新。
� SET_REFRESH_ON_DATE_CHECK用户改变数据以及选择检查的时候,控件刷新。
下面的值是可用使用的:
� REFRESH_AND_APPLY_SERVICES数据被更新;设置对话框被从新设置
� REFRESH_DATA_ONLY数据被更新。
你可以根据组合得到各种影响:
� 完整刷新
� 这个设置时默认设置
8.3、拖拽
九、给用户提供帮助(省略)
十、部分功能使用的例子 ZDEV04_TEST_ALV_UI十一、练习:简易 BBS 系统
练习目的:综合使用 WD 的各个主要方面的技术,重点练习 ALV的使用方法。
功能需求:1、用户登录
应用系统记录当前的登录人员,为简单处理,可以不判断用户密码正确性。
2、用户发帖
记录用户的标题,内容,提交用户,提交时间
3、用户回帖
记录用户回帖内容,提交用户,提交时间
4、浏览帖子
和普通 BBS 显示形式一致。
要求:帖子的浏览用 ALV显示,点击帖子(用超链接方式),可以进入帖子内容。帖子的内
容用 ALV的方式显示,该 ALV有 2列,左边一列显示回帖人名字和回帖事件,右边一列显
示回帖的内容。在页面的最下方,有回帖区。