ABAP data formating and control level processing

at events发生时,break field右边的character field都会被初始化为*numeric field都会被clear,如果有sum关键字,那么就会按照现在的break level对所有的numeric fields进行汇总,在at events之后,所有的fields的值便会重新恢复到当前的loop pass。在进行control level处理的时候,在进行control level处理时,AT EVENT后面的break field要与内表中定义的fields的顺序保持一致。Extract dataset用来做大量数据的处理,Internal tableapplication server memory的影响,而extract dataset是通过硬盘上的sequential file来处理的。创建extract dataset的主要步骤包括:

l         通过field group定义extract dataset,每个field group都必须定义header

l         通过INSERT…INTO…来为field group指定内容,用来把变量或field symbol放到相应的field group中,field group中的data object必须是global的。通过在field groups中放field symbol你就可以动态指定field group中的内容了。如果filed symbol没有被assigned时,其在field group中就会被忽略。INSERT不像DATATYPESdeclarative statement,所以其在START-OF-SELECTIONG事件中执行,一旦field group的第一个EXTRACT执行后,这个field group就不能再被扩展了。

l         FILL EXTRACT用来向field group中写入内容,HEADER是必需的,并被放在field group的起始位置,可以用来排序。可以通过LOOP…ENDLOOP来处理filed group。不需要对HEADER field group进行extract,系统会在其它的field group之前自动处理。在其它field group之前向header field group中填充值时,如果fieldvalue为空就会填充16进制的zero,这些zero可以作为hierarchy keyzero越多说明你进的control level层次越深。

通过sort可以按照HEADER中的字段顺序进行排序,通过BY <F1> <F2>可以控制排序的顺序。通过LOOP…ENDLOOP,可以处理extract dataset中的内容,field group中的内容会被重新放回到相同名字的program field中。Control break只能适用于HEARD field group中的fields。可以通过AT <field group>来单独处理extract dataset中的一条记录。Extract中不像internal table那样可以使用SUM,但是在extract dataset中有两种特殊的方法可以实现相似功能,在AT END OF事件中,你可以计算当前control level的记录数量,你可以对指定的字段进行SUM。可以对HEADER field group中的alphanumeric字段使用CNT关键字,而SUM关键字可以使用任何field group中的字段。语法如下:

WRITE: / CNT(<header_field_group_field>),

           SUM(<any_numeric_field_goup_field>).

SUMCNT只能在AT END OFAT LAST事件中使用。

AT <field_group_1> WITH <field_group_2fg_2>是当field group1后面有field group2时才处理,这在header/detail中,只有detail才显示header的模式中非常有用。Extract datasetloop不能嵌套。

可以用field symbol来替代data object插入到field group中,可以在一个程序中产生不同格式的list。步骤也非常简单:

l         声明所需的field symbols

l         声明HEADER field group和其他所需的field groups

l         定义radio button group来让用户选择报表样式

l         根据radio button的值将data object分配到field symbol

l         field symbol insert到相应的field group

Control level的顺序要与sort的顺序保持一致

Totals只能在control footer中处理

EXTRACT DATASETinternal table的比较

Internal table

Extract

一个程序中可以定义多个

一个程序中只能有一个

control header中也可以作total

只能在control footer中做total

Internal table可以做insert,modify,deleteappend

只能做append sortsequential processing

随时可以修改internal table中的内容

sortloop之后不能进行extract

每一行的结构都是一样的

每一行的结构可以不同

Line typestatic

Record typedynamic

Control level的顺序是按照line type中字段的顺序来执行的

Control level的顺序是按照sort中字段的顺序来执行的

Total的性能负担较大

Total算法被优化

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章