理论教育 优化ALV应用:如何处理超长字符和多行数据?

优化ALV应用:如何处理超长字符和多行数据?

时间:2023-06-12 理论教育 版权反馈
【摘要】:下面的内容将根据不同的ALV类型分开介绍。ALV表格每个格只能显示不多于128个字符,不能多行显示1条数据。ALV列表更接近标准的一览输出,如图2-2所示。实现方式●构建字段目录表,与ALV表格实现方法相同,一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’得到。图2-5适用范围●一般在输出物料清单等层级结构比较明显的数据时使用,ALV树每格最多支持128个字符。

优化ALV应用:如何处理超长字符和多行数据?

ALV是SAP List Viewer(也作ABAP List Viewer),是SAP中常用的经典报表输出格式。常用的ALV种类有以下6个:

●ALV表格(ALV Grid)。

●ALV简单列表(ALV Simple List)。

●多表格的ALV列表。

●层级显示的ALV列表(Hierarchical-Sequential List)。

●面向对象ALV。

●ALV树。

下面的内容将根据不同的ALV类型分开介绍。

1.ALV表格

ALV表格是最常用的一种报表输出格式,如图2-1所示。

978-7-111-50126-8-Chapter02-1.jpg

图2-1

(1)适用范围

●标准功能强大,且外观上可直接用鼠标拖拽栏位的宽度和顺序,一般无特别要求的报表均采用此格式。

●输出格式与Excel文档相似,当客户要求下载Excel文档时,多采用此输出格式。ALV表格每个格只能显示不多于128个字符,不能多行显示1条数据。

(2)实现方式

●构建字段目录(Field Catalog)表(输出表的表头栏位),一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’取得。

●设置字段目录表中各栏位的相关属性,一般需修改显示名称、显示长度、锁定、是否加总、是否显示等。

●输出报表:Call Function‘REUSE_ALV_GRID_DISPLAY’。

2.ALV简单列表(SimpleList)

与ALV表格相比,除了报表自身在显示上的差别外,其他大致相同。ALV列表更接近标准的一览输出,如图2-2所示。

978-7-111-50126-8-Chapter02-2.jpg

图2-2

(1)适用范围

●标准功能同ALV表格大致相同,栏位宽度已最优化显示,但不可直接用鼠标拖拽栏位的顺序,这不符合某些用户习惯,故使用范围不如ALV表格广泛,但当需要翻页时,只能采用ALV列表而不能用ALV表格。

●输出格式一览类似,一般用于执行事务后返回消息的显示,可以多行显示1条数据,但只能显示不多于90个字段的表的数据,且排序的列相同的值不能被合并。

(2)实现方式

●构建字段目录(Field Catalog)表,与ALV表格实现方法相同,一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’得到。

●设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、是否加总、是否显示等。

●输出报表:Call Function‘REUSE_ALV_LIST_DISPLAY’。

3.多表格的ALV列表

区别于ALV简单列表只有一个表身,该种ALV可在一个画面上显示多个表格,如图2-3所示。

978-7-111-50126-8-Chapter02-3.jpg

图2-3

(1)适用范围

●当一个报表包含多个表格时,需采用此种输出方式。

●ALV简单列表需要注意的地方此种列表同样需要注意。

(2)实现方式

●构建字段目录表,有几个不同的表要输出就构建几次。与ALV表格实现方法相同,一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,也可以手动构建。

●设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、是否加总、是否显示等;

初始化屏幕:调用函数‘REUSE_ALV_BLOCK_LIST_INIT’。添加数据:调用函数‘REUSE_ALV_BLOCK_LIST_APPEND’,有几个表就要调用几次。输出报表:调用函数'REUSE_ALV_BLOCK_LIST_DISPLAY’。

4.层级显示的ALV列表

层级显示的ALV List在SAP中称为层级显示列表,如图2-4所示。

978-7-111-50126-8-Chapter02-4.jpg

图2-4

(1)适用范围

这种形式的列表、表头和明细是由相关的字段联系起来的,表头和明细数据一对多。当然可以把表头和明细表分成两个列表在同一屏幕显示,但此种列表看起来更直观。所以当输出的报表数据有表头和明细的区分时,可以采用此种列表。

(2)实现方式一:Call Method(面向对象)

●捆绑表头和明细表

SALV_T_HIERSEQ_BINDING(表头和明细相关的字段表类型)SALV_S_HIERSEQ_BINDING(表头和明细相关的字段结构体)

●得到输出表:调用方法CL_SALV_HIERSEQ_TABLE=>FACTORY,取到的输出表对象(CL_SALV_HIERSEQ_TABLE)。

●显示报表:调用方法DISPLAY输出表对象(CL_SALV_HIERSEQ_TABLE)->display()。

(3)实现方式二:Call Function

●构建表头和明细的栏位。

可以调用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,表头和明细的栏位分别构建后再追加到一个表里。也可以手动构建。

●显示数据:调用函数‘REUSE_ALV_HIERSEQ_LIST_DISPLAY’。

5.ALV树

ALV树形结构可以显示多个层级,每个层级在相同的栏位名下显示;而之前的层级列表只能显示两个层级,而且两个层级之间要有主键去关联,数据显示在不同栏位名下,如图2-5所示。

978-7-111-50126-8-Chapter02-5.jpg(www.daowen.com)

图2-5

(1)适用范围

●一般在输出物料清单等层级结构比较明显的数据时使用,ALV树每格最多支持128个字符。

●不支持格合并,没有数据的过滤功能,系统标准没有下载功能,需要自己写代码。

●只能显示1000个节点,只支持平面表,不支持多维表。

(2)实现方式(简单的Tree结构,在屏幕的PBO事件中处理)

●创建并绘制屏幕和容器:容器可以不手动绘制,直接指定属性CL_GUI_CONTAINER=>SCREEN0,可全屏显示。

●构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。

●构建排序表,对输出表进行层级设置。

●实例化对象:CREATE OBJECT cl_gui_alv_tree_simple。

●输出数据:CALL METHOD实例化对象(cl_gui_alv_tree_simple)->SET_TABLE_FOR_FIRST_DISPLAY。

6.面向对象ALV

面向对象ALV是SAP提供的ALV的对象模式(Object Model),即用面向对象技术对ALV进行封装,提供相应的工具和方式,如图2-6所示。。

978-7-111-50126-8-Chapter02-6.jpg

图2-6

(1)适用范围

面向对象的方式,功能更强大、更灵活。当用普通的ALV表格解决不了某些事件的问题时,大部分使用面向对象就可以解决。

(2)实现方式

1)框架(带控件)

●在画面上定义一个定制控件并实例化对象OBJ_WCL_CONTAINER。

●生成一个CL_GUI_CUSTOM_CONTAINER类实例,在构造器参数中传入定制控件的名称。

●构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。

●显示报表:CALL METHOD类实例(CL_GUI_CUSTOM_CONTAINER)->set_table_for_first_display。

2)封装(不带控件)

a.首先要取得类CL_SALV_FUNCTIONS的实例,根据类CL_SALV_TABLE的方法get_functions可以取得功能实例。

978-7-111-50126-8-Chapter02-7.jpg

b.根据类CL_SALV_TABLE的方法set_screen_status设置功能栏。

978-7-111-50126-8-Chapter02-8.jpg

c.自定义功能的实现

ALV的自定义功能的实现动作要通过类的事件来处理。

●首先定义事件的操作类。

978-7-111-50126-8-Chapter02-9.jpg

●实现事件的操作类。

978-7-111-50126-8-Chapter02-10.jpg

●注册事件。

978-7-111-50126-8-Chapter02-11.jpg

d.显示列表

978-7-111-50126-8-Chapter02-12.jpg

总结:以上是ALV类型的简单介绍,具体每种类型的详细用法,参照如下函数的详细说明。就ALV的形式和实现总结如下:

a.基于ABAP基本列表的ALV。

●简单表单实现:调用函数REUSE_ALV_LIST_DISPLAY。

●多表单实现:调用函数REUSE_ALV_HIERSEQ_LIST_DISPLAY。

●树形表单实现:调用函数RS_TREE_LIST_DISPLAY。

b.基于SAP控制框架(Control Framework)。

函数调用实现(全画面模式):调用函数REUSE_ALV_GRID_DISPLAY和REUSE_ALV_GRID_DISPLAY_LVC。

●面向对象实现:使用类CL_GUI_ALV_GRID及CL_GUI_ALV_TREE。

c.基于面向对象的封装。

●通过封装调用以下类中的方法:CL_SALV_TABLE、CL_SALV_HIERSEQ_TABLE

和CL_SALV_TREE。

注:面向对象的方式创建ALV表格控件,是控制框架(Control Framework)中的一个组件,另外也可以采用CL_SALV_TABLE、CL_SALV_HIERSEQ_TABLE、CL_SALV_TREE等。后者创建可以是列表(List)形式,也可以是表格(Grid)形式,是目前SAP推荐的创建方式,是在NetWeaver 2004以后支持的版本。

全屏幕的表格控件有个对应的函数REUSE_ALV_GRID_DISPLAY_LVC,支持面向对象的处理。面向对象的方式功能更强大一些,这种方式支持求最大值、最小值等标准功能。目前SAP中的组件已经以面向对象方式重写,采用面向对象方式来编写是以后的发展方向。

●相关类:

CL_GUI_ALV_GRID:ALV表格组件类,ALV List Viewer。

CL_GUI_CUSTOM_CONTAINER:画面中客户化控件的容器类。

●相关类型:

LVC_T_FCAT:清单观察器控制的字段目录。

LVC_S_FCAT:ALV控制的字段目录。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈