第107章交互式列表.docx

上传人:b****5 文档编号:5971841 上传时间:2023-01-02 格式:DOCX 页数:53 大小:64.99KB
下载 相关 举报
第107章交互式列表.docx_第1页
第1页 / 共53页
第107章交互式列表.docx_第2页
第2页 / 共53页
第107章交互式列表.docx_第3页
第3页 / 共53页
第107章交互式列表.docx_第4页
第4页 / 共53页
第107章交互式列表.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

第107章交互式列表.docx

《第107章交互式列表.docx》由会员分享,可在线阅读,更多相关《第107章交互式列表.docx(53页珍藏版)》请在冰豆网上搜索。

第107章交互式列表.docx

第107章交互式列表

第七章1交互式列表

概览

内容

什么是交互式报表?

交互式列表的事件控制

基本列表和次列表

创建基本列表

创建次列表

维护列表

次列表系统字段

次列表的页眉

列表中的消息

交互式列表的用户界面

允许行选择

允许功能键选择

定义单独的用户界面

在对话窗口中显示列表

从程序中触发事件

将数据从列表传递到报表

自动传递数据

通过程序语句传递数据

传递列表属性

使用交互式列表

滚动交互式列表

从程序中设置光标

修改列表行

调用程序

调用报表

调用事务

ABAP/4允许创建交互式列表。

从屏幕上的交互式列表中,用户可以选择行、键入输入以及使用功能键、菜单条或按钮输入命令。

交互式列表用对话框功能增强了输出列表的传统类型,因此更接近对话式编程。

交互式列表为用户提供所谓的“交互式报表”功能。

后面的主题说明

 

1什么是交互式报表?

传统的、非交互式报表由创建单个列表的一个程序组成。

这意味着启动报表之后,它创建的列表必须包含所有要求的数据,而不管用户想查看的细节的数目。

该过程可能导致扩展列表,用户必须从该列表中挑选相关的数据。

对于后台处理,这是唯一可能的方法。

启动后台作业之后,没有任何方法影响程序。

必须预先做出所要求的选择,并且报表必须提供详细信息。

对于对话框会话,没有这种限制。

执行时用户在场,可以直接控制和操作程序流。

为了能够利用联机环境的所有优点,传统报表已发展为交互式报表。

交互式报表允许用户在会话期间积极参与检索和提出数据。

交互式报表创建的不是一个扩展的和详细的列表,而是一个精简的基本列表,通过定位光标并输入命令,用户可以从该列表中调用详细信息。

因此,交互式报表减少了实际需要检索的数据信息。

在次列表中显示详细信息。

次列表完全覆盖基本列表,或者出现在屏幕上的附加对话窗口中。

次列表本身也可以是交互式的。

除了创建次列表之外,交互式报表还允许从列表中调用事务和其它报表。

然后,这些程序将显示在列表中的值用作输入值。

例如,用户可以从列表中调用事务以更改数据库表格,该数据库表的数据显示在列表中。

 

本节说明如何编程对话列表并解释可以用来调用报表和事务的ABAP/4语句,并在不同组件之间传递数据。

关于说明交互式报表主要特征的示例,参见HIDE技术(页18)。

1交互式列表的事件控制

ABAP/4程序由事件关键字控制(参见ABAP/4中流控制的概念(页错误!

链接无效。

))。

事件关键字是交互地使用列表所必需的。

交互式列表事件

下列事件是交互式列表环境特有的:

_ATLINE-SELECTION

_ATPF

_ATUSER-COMMAND

如果在程序中为这些事件之一定义处理块,则程序可以对某些用户动作做出反应。

如果用户随后执行显示列表中的已定义的行为,则系统将触发相应事件。

系统将在上述事件之一的处理块中编写的所有输出语句的输出写入到所谓的次列表中。

关于次列表的详细信息,参见基本列表和次列表(页2)。

交互式列表上的动作

必须在列表的界面定义中确定用户可以在列表上执行的,并触发特定事件的动作。

可以为每个列表定义单独的界面。

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

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

_ATPF出现在用户按下相应功能键之后。

_ATUSER-COMMAND出现在用户选择自定义行为之后。

关于用户动作和用户界面的详细信息,参见交互式列表的用户界面(页6)。

事件控制带来的结果

使用事件关键字编写交互式列表的事实带来下列重要结果:

如通过事件控制ABAP/4程序流(页错误!

链接无效。

)中所述那样,不能嵌套处理块,这是由于每个新事件关键字终止前面的处理块。

因此,无法在交互式列表的处理块内处理其它事件。

尤其不能

_使用GET和GETLATE之类的事件检索次列表的数据,但必须使用SELECT语句。

只有对基本列表才能使用分配给报表的逻辑数据库。

如果要在交互式事件期间使用逻辑数据库,必须调用使用SUBMIT的独立报表(参见调用程序(页30))。

_使用事件TOP-OF-PAGE和END-OF-PAGE影响次列表结构。

为了设置次列表的页眉,必须使用事件TOP-OF-PAGEDURINGLINE-SELECTION(参见次列表的页眉(页4))。

_使用独立的处理块处理其它交互式事件。

一定的用户动作总是触发程序中同一个处理块。

必须使用处理块内的控制语句(IF和CASE),以确保系统处理要求的语句。

在该环境中有几个系统字段帮助完成该操作(参见次列表系统字段(页4))。

 

2基本列表和次列表

本主题概述基本列表和次列表。

2创建基本列表

ABAP/4程序将处理与数据检索(START-OF-SELECTION、GET,等等)相关的事件时创建的输出数据放置到所谓的基本列表中。

默认情况下,基本列表具有标准页眉(参见标准页眉(页错误!

链接无效。

))。

创建基本列表时,如果发生事件TOP-OF-PAGE和END-OF-PAGE,则系统将后续所有输出写入基本列表的页眉或页脚。

处理完所有与数据检索相关的事件之后,系统在输出屏幕上显示基本列表。

SY-LSIND系统字段包含当前创建的列表的索引。

创建基本列表时,SY-LSIND等于0。

基本列表的示例,参见创建列表(页错误!

链接无效。

)。

2创建次列表

如果用户界面允许触发事件的动作,并且相应的交互式事件的关键字出现在报表中,则该列表就是交互式列表(参见交互式列表的事件控制(页1))。

在交互式列表事件中执行的所有输出语句将其数据写入具有索引SY-LSIND的新列表中(列表级别)。

每次发生交互式列表事件,系统自动使SY-LSIND加1。

处理完事件关键字的整个处理块之后,或者由于EXIT或CHECK而离开处理块之后,系统显示该列表。

默认情况下,新列表完全覆盖前面的列表。

如果要编写只覆盖部分前面列表的窗口,参见在对话窗口中显示列表(页14)。

在交互式列表事件中创建的所有列表都是次列表。

每个交互式列表事件创建新次列表。

使用一个ABAP/4报表,可以维护一个基本列表和最多20个次列表。

如果用户在下一级上创建列表(即,SY-LSIND增加),则系统将存储前面的列表,并显示新列表。

只有一个列表是活动的,并且它总是最近创建的列表。

要删除现有列表,参见维护列表(页3)。

对于次列表,系统不显示标准页眉。

要为次列表创建页眉,参见次列表的页眉(页4)。

REPORTSAPMZTST.

WRITE:

'BasicList,SY-LSIND=',SY-LSIND.

ATLINE-SELECTION.

WRITE:

'SecondaryList,SY-LSIND=',SY-LSIND.

执行程序之后,系统将显示下列基本列表:

如果将工具栏与标准列表的用户界面(页错误!

链接无效。

)的标准工具栏进行比较,发现没有任何区别。

然而,在行上定位光标之后,事件关键字ATLINE-SELECTION将导致这种区别,通过选择“编辑->选择”、双击鼠标或按功能键F2触发该事件(参见允许行选择(页7))。

因此,该列表是交互式的,并且在用户完成动作之后,输出屏幕发生变化:

第一个次列表覆盖基本列表。

该列表没有标准页眉。

它又是交互式列表。

通过选择“选择”,用户现在最多可以创建20个这样的列表。

试图生成多于20个列表将导致运行错误。

使用“返回”,用户可以返回到前面列表。

关于返回到前面列表的详细信息,参见维护列表(页3)。

3维护列表

要从高列表级返回到较低级(SY-LSIND),用户选择次列表上的“返回”。

然后,系统释放当前显示的列表,并激活前一步创建的列表。

系统删除已释放列表的内容。

要显式地指定在其中放置输出的列表级,请设置SY-LSIND字段。

系统只接受与现有列表级相对应的索引值。

然后,删除其索引大于或等于指定索引所有现有列表级。

例如,将SY-LSIND设置为0,系统将删除所有次列表,并用当前次列表覆盖基本列表。

系统只在事件结束处,直接在显示次列表之前对SY-LSIND的操作做出反应。

所以,如果在处理块中使用语句,该语句的INDEX选项使用SY-LSIND索引(如SCROLL)访问列表,则应确保只在处理这些报表之后使用SY-LSIND字段。

避免无意混淆的最好方法是,总是将使用SY-LSIND的语句作为处理块的最后一条语句输入。

REPORTSAPMZTST.

WRITE:

'BasicList,SY-LSIND=',SY-LSIND.

ATLINE-SELECTION.

IFSY-LSIND=3.

SY-LSIND=0.

ENDIF.

WRITE:

'SecondaryList,SY-LSIND=',SY-LSIND.

执行程序之后,系统显示基本列表,包含以下行:

BasicList,SY-LSIND=0

由于ATLINE-SELECTION语句的缘故,该列表是交互式的,并使用户动作“选择”可用(参见允许行选择(页7))。

如果用户将光标定位在列表行上,并选择“选择”以触发ATLINE-SELECTION事件,系统将显示次列表,包含以下行:

SecondaryList,SY-LSIND=1

再次选择“选择”将产生:

SecondaryList,SY-LSIND=2

“转向->后退”将转到前一列表级。

第三次选择“选择”将产生次列表,由于IF条件,该次列表包含以下行:

SecondaryList,SY-LSIND=0

系统删除列表级1和2。

如果现在选择“转向->后退”,将返回到启动报表的屏幕。

如果选择“选择”,系统将创建次列表,其索引为1。

但是,0级上的列表不再是基本列表(无页眉),但还是次列表。

4次列表系统字段

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

系统字段

信息

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很重要(参见定义单独的用户界面(页8))。

可以使用包含在上面所列出的系统字段中的信息构造次列表。

详细信息及示例,参见自动传递数据(页16)。

4次列表的页眉

系统在次列表上不显示标准页眉,并且不触发事件TOP-OF-PAGE。

要创建次列表的页眉,必须增强TOP-OF-PAGE:

语法

TOP-OF-PAGEDURINGLINE-SELECTION.

对每个次列表,系统都触发该事件。

如果要为不同列表级创建不同的页眉,必须相应地编写该事件的处理块,例如,通过使用系统字段,如控制语句(IF和CASE)中的SY-LSIND或SY-PFKEY。

用户垂直滚动次列表时,系统将保留页眉而只滚动页眉下面的列表行。

REPORTSAPMZTST.

WRITE'BasicList'.

ATLINE-SELECTION.

WRITE'SecondaryList'.

TOP-OF-PAGEDURINGLINE-SELECTION.

CASESY-LSIND.

WHEN1.

WRITE'FirstSecondaryList'.

WHEN2.

WRITE'SecondSecondaryList'.

WHENOTHERS.

WRITE:

'SecondaryList,Level:

',SY-LSIND.

ENDCASE.

ULINE.

用户执行上面的程序之后,系统将显示基本列表,与创建次列表(页2)中的示例列表相似。

用户可以选择“选择”以创建次列表。

列表级1的次列表如下所示:

列表级3的次列表如下所示:

由于TOP-OF-PAGEDURINGLINE-SELECTION处理块内的CASE控制语句的缘故,系统为每个次列表创建不同页眉。

 

5列表中的消息

ABAP/4允许您根据错误的严重程度通过显示影响程序流的消息对错误或有疑问的用户输入做出反应。

处理消息是对话编程中详细描述的主题(参见处理错误和消息(页Error!

Notavalidlink.))。

该主题只解释信息对交互式列表处理的影响。

在表T100中存储和维护消息。

消息是通过语言、双字符标识和三个数字的号码存储的。

可以为输出的各种消息分配不同消息类型。

消息对程序流的影响取决于消息类型。

在程序中使用MESSAGE语句静态或动态地输出信息,并确定信息类型。

如果要静态地使用程序中特定标识的消息,请使用REPORT或PROGRAM语句的MESSAGE-ID选项:

语法

REPORTMESSAGE-ID.

由于该语句的作用,报表可以使用存储标识下表格T100中的所有消息。

如果动态地指定消息标识,则可以忽略此选项。

要静态地指定消息号,请使用:

语法

MESSAGE[WITH...].

该语句输出存储在号码下表格T100中的消息,它的标识与REPORT语句中的标识相同,与消息类型一样。

要在运行时动态地指定消息标识、类型和号码,请使用:

语法

MESSAGEIDTYPENUMBER[WITH...].

该语句输出其标识、号码和类型存储在字段中的消息。

对该语句,不需要REPORT语句中的MESSAGE-ID选项。

消息可以有五种不同类型。

列表处理期间,这些消息类型有下列作用:

_A(=终止):

系统在对话窗口中显示该消息类型的消息。

用户使用ENTER确认信息之后,系统终止整个事务(例如,SE38)。

_E(=错误)或W(=警告):

系统在状态行中显示该消息类型的消息。

用户选择ENTER之后,系统将按下列情况运作:

-创建基本列表时,系统终止报表。

-创建次列表时,系统终止相应处理块,并继续显示前面的列表级。

_I(=信息):

系统在对话窗口中显示该消息类型的消息。

用户选择ENTER之后,系统在当前程序位置继续处理。

S(=成功):

在输出屏幕上,系统在当前创建的列表的状态行中显示该消息类型的消息。

字符‘&’在消息中起占位符的作用。

如果使用WITH选项,系统用字段的内容替代消息中的占位符‘&’,并根据号码替代数字化的占位符‘&I’。

要在信息中输出‘&’,必须写‘&&’。

要创建、显示或更改信息,只需简单地在ABAP/4编辑器中双击标识或信息号。

如果该对象还不存在,则系统将询问是否创建它。

通过从ABAP/4编辑器中选择“编辑->插入语句...”,可以很容易地将静态MESSAGE语句包括到程序中。

选择MESSAGE作为语句:

使用此方法,既可以复制已存在的信息,也可以创建新对象(标识和号码)。

另外,系统以注释的方式将信息文本包括到程序中。

假定下列信息存储在标识HB下的T100表格中:

 

下列程序使用这些信息:

REPORTSAPMZTSTMESSAGE-IDHBNOSTANDARDPAGEHEADING.

WRITE'BasicList'.

MESSAGES100.

ATLINE-SELECTION.

IFSY-LSIND=1.

MESSAGEID'HB'TYPE'I'NUMBER100.

ENDIF.

IFSY-LSIND=2.

MESSAGEE200WITHSY-LSIND.

ENDIF.

WRITE:

'SecondaryList,SY-LSIND:

',SY-LSIND.

执行程序之后,系统将显示基本列表,并在状态行中显示成功信息100。

通过双击选择行之后,将出现ATLINE-SELECTION事件。

系统创建第一个次列表时,它将显示信息为100的对话窗口。

因为信息200的信息类型为E,所以不可以创建第二个次列表:

 

6交互式列表的用户界面

如果希望用户在列表显示时与系统通讯,列表必须是交互式的。

可以在列表的用户界面(GUI)的状态中定义特定交互式可能性。

要在R/3系统中定义界面状态,请使用菜单绘制器工具。

在菜单绘制器中为特定交互式可能性分配功能代码。

用户行为出现在整个界面上之后,ABAP/4处理器将检查功能代码,并且,如果有效,将触发相应事件。

可以从程序中使用SY-UCOMM系统字段访问功能代码。

可以为报表定义单独的界面,并在报表中将它们分配到任何列表级。

如果在报表中不指定自定义的界面,而是在程序中使用三个事件关键字ATLINE-SELECTION、ATPF或ATUSER-COMMAND中的至少一个,则系统自动使用适当的预定义标准界面。

这些标准界面提供的功能与标准列表(页错误!

链接无效。

)中所描述的标准列表相同。

按照事件关键词,它们为用户提供与系统交互作用的附加可能性。

下面两个主题说明与预定义的标准界面连接的事件ATLINE-SELECTION和ATPF

ATUSER-COMMAND事件主要处理自己的功能代码。

这种情况下,应该使用菜单绘制器创建单独界面,并定义这样的功能代码。

下列主题解释如何定义单独的界面和如何使用ATUSER-COMMAND事件。

也可以在对话窗口中显示列表,而不是全屏显示:

不但可以从界面中触发交互式事件,而且可以从程序中触发交互式事件:

 

这部分介绍的用户界面只适用于类型为1的程序(联机程序)。

系统相应地设置界面,并使用列表处理器。

注意,创建事务的程序使用不同的环境。

7允许行选择

要允许用户从列表中选择行,请在程序中定义并写入ATLINE-SELECTION事件的处理块:

语法

ATLINE-SELECTION.

.

如果没有为列表定义单独的界面,则系统自动使用预定义的交互式界面。

此界面的外观与标准界面相同(参见标准列表(页错误!

链接无效。

))。

但是,系统对下列用户行为做出反应:

_选择菜单条目“编辑->选择”。

_按下功能键F2。

_双击列表行或单击热点(参见将字问涑_为热点(页错误!

链接无效。

))。

在列表行上定位光标之后(包括页眉或页脚行),选择上面所描述的四个行为中的某一个,将出现ATLINE-SELECTION事件。

功能代码PICK内部触发ATLINE-SELECTION事件。

在预定义界面中,将“编辑->选择”和F2分配到PICK。

设置功能键F2自动激活鼠标功能。

详细信息,参见定义单独的用户界面(页8)。

REPORTSAPMZTST.

WRITE'BasicList'.

ATLINE-SELECTION.

WRITE:

'SecondaryListbyLine-Selection',

/'SY-UCOMM=',SY-UCOMM.

执行该程序之后,系统将显示此界面:

用户可以在上面所描述的行为之间选择。

通过程序创建的所有次列表显示都象这样:

对每个交互式用户行为,SY-UCOMM返回值‘PICK’。

7允许功能键选择

要允许用户通过按下功能键选择,请在程序中定义并编写ATPF事件处理块:

语法

ATPF.

.

如果没有为列表定义单独的界面,则系统使用预定义的交互式界面。

标准界面和此预定义界面之间的区别是,把预定义系统功能没有使用的键盘F的所有功能键都设置为功能代码PF,这里是01和24之间的数。

如果用户按下这些键中的某一个,系统将触发相应事件。

这种情况下,与光标位置无关。

要查看用系统功能预定义的键列表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1