----------------------------------------2007-8-7------------------------------

 

----------------------------------------2007-8-7------------------------------

使用摘录数据集提炼数据

双击事件

获得光标位置处的信息

使用摘录数据集提炼数据

 

WWWDATA:this table record Import/Export data information

batch写程式的时候,如果要用到批量的情况,一定要记得把BDCDATA在每次循环的时候清空一下,系统不会自动清空的.

下面语句的形式可以有效提高查询语句的效率

SELECT * FROM SFLIGHT INTO WA_SFLIGHT

    FOR ALL ENTRIES IN FTAB

WHERE CARRID = FTAB-CARRID AND CONNID = FTAB-CONNID .

 

 

双击事件

双击事件是在STATUSF3上放上处理码,然后在User-Commend中相应就行了.这里常用到下面的内容,来获得双击时光标的位置.

 

获得光标位置处的信息

要在交互式事件中检索光标位置处的信息,请使用GET CURSOR语句引用字段或行。

关于该字段的信息,请使用语法:

 

语法

 

GET CURSOR FIELD <f> [OFFSET <off>] [LINE <lin>]

                     [VALUE <val>] [LENGTH <len>].

在用户行为中,该语句将光标位置处的字段名传送到变量<f>中。如果光标在字段上,则系统将SY-SUBRC设置为0,否则,将其设置为4

系统传送子程序的全局变量、常量、字段符号或引用参数的名称。对子程序的文字、局部字段和VALUE参数,系统

SY-SUBRC设置为0,但将SPACE作为名称传输。

选项有下列作用:

?   OFFSET <off>

字段<off>包含光标在字段中的位置。如果光标在第一列上,则<off>=0

?   LINE <lin>

字段<lin>包含光标所在列表行的行号(SY-LILLI)

?   VALUE <val>

字段<val>包含光标所在字段的字符串输出表示法。表示法包括格式化字符。

?   LENGTH <len>

字段<len>包含光标所在字段的输出长度。

GET CURSOR LINE <lin> [OFFSET <off>] [VALUE <val>] [LENGTH <len>].

此语句将用户行为期间光标所在行的行号传输到变量<lin>中。如果光标在列表行上,则系统将SY-SUBRC设置为0,否则,将其设置为4。可以使用此语句避免用户选择无效行。

选项有下列作用:

?   OFFSET <off>

字段 <off>包含光标在列表行中的位置。如果光标在第一列上,则<off>=0

?   VALUE <val>

字段<val>包含光标所在行的字符串输出表示法。表示法包括格式化字符。

?   LENGTH <len>

字段<len>包含光标所在行的输出长度。

 

 

使用摘录数据集提炼数据

由于内表具有固定的行结构,所以它不适于处理具有变化结构的数据集。出于这种考虑,ABAP/4提供了创建所谓的摘录数据集的可能性。摘录数据集是报表存储区中的顺序数据集。这意味着只能在循环中访问它的数据。不能象对内表操作那样通过索引访问其单个行。在报表运行过程中,系统可以正确地创建一个摘录数据集。至于内表,因为系统可根据需要展开它,所以原则上摘录数据集的大小是没有限制的。摘录数据集由一系列预定义的结构的记录组成。但是,不是所有记录的结构都必须相同。在一个摘录数据集中,可以一个接一个地存储不同长度和结构的记录。不必为要存储的不同结构创建单个的数据集。这实际上大大减少了维护工作。与内表不同,系统在存储摘录数据集时,将部分压缩摘录数据集。这减少了所需的存储空间。另外,不必在报表的开始处指定摘录数据集的结构,而可以在程序流过程中动态决定其结构。

 

创建并填充摘录数据集

要在报表中创建并填充摘录数据集 ,请执行下列三个步骤 :

1.  将要在摘录数据集中使用的记录类型定义为字段组。

FIELD-GROUPS <fg>.

特殊字段组 HEADER:在它里面放的field,其它字段组都能访问.(可以避免数据冗余)

2.  通过分配字段定义每个记录类型的结构。

INSERT <f1> ... <fn> INTO <fg>

3.  将所需的数据摘录到数据集中。

EXTRACT <fg>.

 

读取摘录数据集

LOOP.

  ...

  [AT FIRST | AT <fgi> [WITH <fgj>] | AT LAST.

    ...

   ENDAT.]

  ...

ENDLOOP.

语句LOOP-ENDLOOP终止创建报表的摘录数据集并在数据集的所有记录上执行循环。在每个循环过程中,系统将读取一个摘录记录并将其数据值直接放回到源字段中。可以连续执行多个循环。

与内表不同,对于摘录数据集不必使用特殊的工作区作为接口(参见访问内表)。对于每个记录的读取,都可以使用它们原始字段名在循环的语句块中处理读取的数据。

与内表上的LOOPAT-ENDLOOP循环不同,在摘录数据集上不能使用嵌套的LOOP-ENDLOOP循环,否则将产生运行时错误。

在循环的语句块中及处理循环后,不允许再使用EXTRACT语句。否则将产生运行时错误。

循环控制

如果只需对数据集的某些记录执行一些语句,则可使用控制语句ATENDAT

系统将针对AT不同的选项处理控制语句之间的语句块,如下所示:

?   AT FIRST

系统将针对数据集的第一条记录执行一次该语句块。

?   AT <fgi> [WITH<fgj>]

如果当前读取的摘录记录的记录类型是用字段组<fgi>定义的,系统就处理该语句块。使用WITH <fgj>选项时,在摘录数据集中,字段组<fgi>当前读取的记录后面必须紧跟字段组<fgj>的记录。

?   AT LAST

系统将针对数据集的最后一条记录执行一次该语句块。

关于如何使用控制语句ATENDAT处理控制级的信息,参见处理控制级。

关于在循环结束前如何终止该循环的信息,参见终止循环。

posted on 2007-10-22 12:31  LongSky  阅读(191)  评论(0编辑  收藏  举报

导航