------------------------------------2007-07-18-------------------------------------------

来源:互联网 发布:t淘宝客户关系管理在哪 编辑:程序博客网 时间:2024/05/17 05:18
 
--------------------------------------------------2007-07-18-------------------------------------------
交互式列表的事件控制
次列表系统字段
在对话窗口中显示列表
从程序中触发事件

 

交互式列表 的事件控制

交互式列表事件.默认情况下,事件发生在列表的下列动作之后:

1.    AT LINE-SELECTION出现在用户双击某行之后,单击热点或者选择“编辑 -> 选择”。

2.    AT PF<nn> 出现在用户按下相应功能键之后。

3.    AT USER-COMMAND出现在用户选择自定义行为之后。

注意事项

1.  不能嵌套处理块

2.    不能使用GETGET LATE之类的事件检索次列表的数据,但必须使用SELECT 语句。只有对基本列表才能使用分配给报表的逻辑数据库 。如果要在交互式事件期间使用逻辑数据库, 必须调用使用SUBMIT的独立报表

3.    不能使用事件TOP-OF-PAGEEND-OF-PAGE 影响次列表结构。为了设置次列表的页眉,必须使用事件 TOP-OF-PAGE DURING LINE-SELECTION

4     不能使用独立的处理块处理其它交互式事件。一定的用户动作总是触发程序中同一个处理块。 必须使用处理块内的控制语句(IF CASE ,以确保系统处理要求的语句。在该环境中有几个系统字段帮助完成该操作。

5. 每次发生交互式列表事件,系统自动使 SY-LSIND1(初始值是0)

处理完事件关键字的整个处理块之后,或者由于 EXIT CHECK而离开处理块之后,系统显示该列表。默认情况下,新列表完全覆盖前面的列表。如果要编写只覆盖部分前面列表的窗口,参见在对话窗口中显示列表。在交互式列表事件中创建的所有列表都是次列 表。

每个交互式列表事件创建新次列表 。使用一个ABAP/4报表,可以维护一个基本列表和最多20个次列表。 如果用户在下一级上创建列表(即 SY-LSIND 增加),则系统将存储前面的列表,并显示新列表。只有一个列表是活动的,并且它总是最近创建的列表。要删除现有列表,参见维护列表。

对于次列表 ,系统不显示标准页眉。要为次列表创建页眉,参见次列表的页眉。

要从高列表级返回到较低级 (SY-LSIND) 用户选择次列表上的“ 返回”。然后,系统释放当前显示的列表,并激活前一步创建的列表。系统删除已释放列表的内容。

要显式地指定在其中放置输出的列表级,请设置SY-LSIND字段。系统只接受与现有列表级相对应的索引值。然后,删除其索引大于或等于指定索引所有现有列表级。例如,将sY-LSIND 设置为 0,系统将删除所有次列表,并用当前次列表覆盖基本列表。

系统只在事件结束处,直接在显示次列表之前对SY-LSIND的操作做出反应。所以,如果在处理块中使用语句,该语句的INDEX 选项使用SY-LSIND索引(如 SCROLL)访问列表,则应确保只在处理这些报表之后使用 SY-LSIND 字段。避免无意混淆的最好方法是,总是将使用SY-LSIND的语句作为处理块的最后一条语句输入。

 

次列表系统字段

 

用每个交互 式事件,系 统自动设置 下列系统字 段:

 

系统字段       信息

SY-LSIND     当前事件中创建的列表索引(基本列表= 0

SY-LISTI       触发事件的列表级索引

SY-LILLI       触发事件的行的绝对号

SY-LISEL      触发事件的行的内容

SY-CUROW   触发事件的行在窗口中的位置(计数开始于1

SY-CUCOL    触发事件的列在窗口中的位置(计数开始于2

SY-CPAGE     触发事件的列表显示的第一页的页号

SY-STARO    触发事件的列表显示的第一页第一行的行号(计数开始于1)。该行可能是页眉

SY-STACO    触发事件的列表显示的第一列的列号(计数开始于1

SY-UCOMM   触发事件的功能代码

SY-PFKEY     显示列表的状态

如果使用自定义的列表界面,则系统字段 SY-UCOMM SY-PFKEY 很重要(参 定义单独的用户界面)。

可以使用包含在上面所列出的系统字段中的信息构造次列表。详细信息及示例,参见自动传递数据。

 

 

在对话窗口中显示列表

WINDOW STARTING AT <left> <upper> [ENDING AT <right> <lower>].

此语句使当前列表(索 SY-LSIND 在对话窗口中显示。使用<left><upper>指定左上角的列和行,借此指定基本列表的输出屏幕。如果 <upper> 等于0,则列表全屏幕显示 。右下角的坐标取决于次列表需要的空间。可以指定 ENDING选项,使用<right><lower>设置右下角的列和行。 窗口不会超出这些值。默认情况下 ,系统使用发生事件的窗口右下角的值。

WINDOW 语句只在交互式事件处理块中有效 ,也就是只影响次列表 。对话窗口中的列表的列表功能与全屏幕中的列表的列表功能相同。

如果没有设置自定义状态,但设置了报表中AT LINE-SELECTION AT PF<nn> 的程序处理块(从该处 理块中将列表写入对话 窗口),则系统使用这些窗口的预定义界面。

 

从程序中触发事件

SET USER-COMMAND <fc>.

此语句在完成当前列表后生效。系统显示列表之前,将触发与存储在 <fc> 中的功能代码对应的事件,而独立于应用的用户界面。这意味着,对于自定义的功能代码,将发生AT USER-COMMAND事件,对于功能代码PICK PF<nn>,将发生事件 AT LINE-SELECTION AT PF<nn>

只有把光标置于列表行上时,功能代码 PICK 才触发事件(参见示例 )。

对于为系统功能定义的功能代码,系统不触发事件,而是执行相应行为。例如, 要一起显示列表和“搜索”对话窗口,请在 <fc> 中指定‘%SC’。通过指定适当的滚动功能代码, 可以在显示列表之前将滚动到一 定位置。

系统不提供菜单条或标准工具栏。在应用程序工具栏中, 预设置了功能代码 PRI%SC %SC+ RW 以允许用户打印列表、 搜索式样和离开窗口。 对于任何其他功能,请使用使用交互式列表的菜单绘制器工具 中所述的菜单绘制器。

下列功能代码是预定义的,并已分配给状态的不同元素。请注意,此设置只针对列表,如果创建屏幕的新状态,则不是这样。

另外, 下列功能代 码是预定义 的,但没有 设置为状态 功能,可以 随意分配到 任何空的状 态元素:

 

 系统直接查询和处理上表中列出的所有功能代码(除 PICK PF<nn> 之外)。这些功能代码不触发事件 ,不能用于AT USER-COMMAND 事件。无论何时光标位于列表行,功能代码 PICK 都触发 AT LINE-SELECTION 事件,功能代码 PF<nn> 总是触发AT PF<nn> 事件。因此 ,二者都不能用于AT USER-COMMAND事件中。

上述功能代码是固定的 。对于其他任何功能, 可以定义任意单独的四字符的功能代码。使用有意义的短格式,例如SORT,触发排序处理。由于许多系统定义功能以 P 开头,所以不应该使用 P 作为自己功能代码的第 一个字母。

至于相关的功能键,请注意下列两种特殊情况

功能键 F2

双击鼠标总是等于按下功能键 F2。因此,通过双击激活分配到 F2 的每个功能代码。只有当功能代码 PICK 分配到F2 之后,双击才触发 AT LINE-SELECTION 事件。如果将自己的功能代码分配到 F2,则双击将触发 AT USER-COMMAND 事件。如果将预定义的功能代码分配到 F2,则双 击将触发相应系统行为

功能键 F10

功能键 F10 总是将光标放置于菜单条中选择菜单功能。不可以将任何其他(自己的或预定义的)功能代码分配到 F10

可以按照需要修改菜单绘制器中建议的特定列表的预定义 。可以

1.    用自己的功能代码替代功能代码PICK,以避免在报表中触发AT LINE-SELECTION 事件。然后可以在单个处理块中编码对用户行为的反应 (AT USER-COMMAND)

2.    删除不想支持其功能的预定义功能代码。例如,可能不希望用户直接打印列表或将列表保存到表示服务器上的文件中。

3.    修改标准键设置。例如,可以将自己的功能代码分配到F3,以根据需要在列表中导航,而不是返回到上一列表 级(“返回 ”)。如果在相同逻辑级上保留好 几个列表, 并因此不希望按照标准 F3 设置删除显示列表,则这一点就显得很重要。 或者希望在离开列表级之前显示警告(参见列表中的消息)。

如果创建列表时使用好几个SET USER-COMMAND语句,系统只执行最后一个语句。

REPORT SAPMZTST NO STANDARD PAGE HEADING.

SET USER-COMMAND 'MYCO'.

WRITE 'Basic List'.

AT USER-COMMAND.

  CASE SY-UCOMM.

    WHEN 'MYCO'.

      WRITE 'Secondary List from USER-COMMAND,'.

      WRITE: 'SY-LSIND', SY-LSIND.

      SET USER-COMMAND 'PF05'.

  ENDCASE.

AT PF05.

             WRITE 'Secondary List from PF05,'.

             WRITE: 'SY-LSIND', SY-LSIND.

            SET CURSOR LINE 1.

             SET USER-COMMAND 'PICK'.

AT LINE-SELECTION.

             WRITE 'Secondary List from LINE-SELECTION,'.

             WRITE: 'SY-LSIND', SY-LSIND.

             SET USER-COMMAND 'PS+10'.