使用正确的ALV工具
如果准备使用ALV,首先要确定使用哪个ALV工具合适。首先最好使用ALV FULLSCREEN而不是ALV GRID。因为前者按照系统需求可以切换为ALV LIST,这种切换是系统级别的与应用无关。
下面是几种ALV工具:
l ALV LIST:在自己的屏幕上显示简单的ALV列表
l ALV FULL SCREEN: 是基于控制的ALV GRIDg工具,在自己的屏幕上显示简单的列表
l ALV GRID:类CL_GUI_ALV_GRID,基于控件的ALV,定位在屏幕容器上的简单列表
l ALV TREE: 类CL_GUI_ALV_TREE,基于控件的ALV,定位在屏幕容器上的树形结构。
一般情况下ALV FULL SCREE和ALV GRID,由于他们是基于控件的,所以他们在界面上要更优于ALV LIST和ALVHierSeq。
功能比较
由于对着四种ALV工具来说功能基本是一样的,主要的区别又一下几点:
l 多于一个表的数据:如果你要显示不止一个表的数据,你需要在屏幕上定位不同的ALV GRID。不过他们是建立在不同实例基础之上的。
l 字段的大小:基于列表的alv list只能显示不多于90个字段的表的数据,基于控件的ALV GRID和ALV FULLSCREEN每个格只能显示不多于128个字符。
l 格合并:基于控件的alv grid和alv fullscreen,排序的列相同的值就会被合并。这对于基于列表的alv list是不可能的。
l 多行显示:对于基于列表的alv list你可以用屏幕上三行显示表中的一行数据。这对于基于控件的alv grid和alv fullscreen是不可能的。
l 交互性:ALV不能感知数据表之外的任何信息。与alv的交互,对于alv grid通过控件事件和方法调用实现,而对于基于列表的alv则通过call back来实现。
l 前导空格:前导空格在alv grid和alv fullscreen中会自动消失,
使用ALV
l 数据:ALV并不清楚应用程序将会发生什么,你只能够在与alv显示的数据一致的表上工作,数据表就象是alv的指针。那么在alv grid的处理中,必须保证数据表是可见的,尤其是对于本地变量数据表。
l FIELDCATALOG:fieldcatalog用来描述数据表本身,即你不能通过设置fieldcatalog来改变字段内在属性。
l PRINT:基于控件的alv grid和alv fullscreen不能被直接打印。也就是说只有转换成alv list才能被打印。ALV GRID不能在他所在的屏幕上打印,而只能在其独立的屏幕上打印。
l 列头:列头在alv中有着重要的作用,包括排序,汇总等,没有列头也就没有了这些功能。列头只有一行,即不存在多行的列头。
l 汇总:ALV有一些列的汇总功能,如求和,最大值,计数等等。但是不支持根应用程序相关的功能。
l CALLBACKS: 可以用来写write语句。但是尽量避免使用。
l Batch processing:
从grid切换到list
在大量数据的情况下切换到grid可能是必要的。如果使用已有的alv工具,使用alv fullscreen会减少工作量。
ALV TREE
ALV TREE也是基于控件的这样的它与GRID便有相似之处。不过也有一些特性需要考虑。以下适用于ALV TREE和FULLSCREEN TREE
l 字段的大小:每格最多支持128个字符
l 格合并:不支持格合并
l Batch:不支持batch input和CATT
l Filter:没有过滤功能
l Download:不能下载到其他系统。
其他信息
Alv的帮助文档:Controls-〉ALV GRID CONTROL
Alv example BCALV_* especial BCALV_TEST_*
重要信息
有些情况并不适合alv,在从list转换到alv时应考虑到以下几点:
l 大量数据:alv并不适合做大量数据的处理。他只是一种显示工具并把所显示的数据保留在内存中。更具体的说alv可以显示大容量数据,实际中可以到10000个数据集,不过在大量数据处理时一定要考虑资源的消耗。
Alv tree有更严格的限制,它只能显示1000个节点。
l DEEP STRUCTURE:ALV TREE只支持flat table。所以你需要把deep table转换为flat table
l Page oriented output: not possible
l Batch input: batch input not possible
l 列之间的关系:除货币和数量字段外。ALV不支持建立列之间的关系。
0 件のコメント:
コメントを投稿