[SAP ABAP开发技术总结]列表屏幕

目录导航

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!
原文出自:

13.             列表屏幕... 111

13.1.         标准LIST. 112

13.2.         自定义LIST. 112

13.3.         LIST事件... 113

13.4.         Detail Lists 创建... 113

13.5.         标准的 List Status. 113

13.6.         列表屏幕上的数据与程序间的传递... 114

13.6.1.     SY-LISEL. 114

13.6.2.     HIDE. 114

13.6.3.     READ LINE. 114

13.7.         从Screen Processing 屏幕处理切换到Lists列表输出... 115

13.8.         LIST 打印输出... 115

13.         列表屏幕

在START/END-OF-SELECTION事件处理块中,用WRITE语句向列表缓冲区(List Buffer)输出要显示的内容,当该事件结束的时候,所有在列表缓冲区中的内容将被显示到一个基本列表屏幕(Basic List)上

当用户在基础列表屏幕上双击一行或按功能键“F2”时,将会触发ABAP事件AT LINE-SELECTION,如果还想进一步显示该行数据的详细信息,则可以继续使用WRITE语句输出要显示的内容,这次生成另外一个详细列表屏幕(Details List Screen)。此详细列表屏幕将覆盖其上一层的基础列表屏幕,若在其界面的工具条上点“返回”或按功能键F3,将返回到基础列表屏幕。

在详细列表屏幕上,当用户双击一行数据或按功能键F2,AT LINE-SELECTION事件将会再次触发,因此还可以继续生成下一级的详细列表屏幕

ABAP提供了全屏变量sy-lsind来区别屏幕的层次,sy-lsind的值主要用于在 AT LINE-SELECTION事件处理块中进行程序流程控。0表示为基础列表屏幕,1表示第一级详细列表屏幕,依次类推,最多可以有20个详细列表

13.1.     标准LIST

至少包括二行standard header,第一行standard header包括了listheader和pagenumber,第二行standard header是一条水平线。当程序是可执行报表程序时,listheader存储在SY-TITLE中。如果有必要,可以给standardheader添加最多四行的columnheaders与一条水平线。在水平或垂直滚动时standardheader是不会动的。

13.2.     自定义LIST

TOP-OF-PAGE.

REPORT <rep> NO STANDARD PAGE HEADING.

REPORT <rep> LINE-SIZE <width>            当前页面宽度存储在SY-LINSZ系统变量中

REPORT <rep> LINE-COUNT <length>[(<n>)]   如果指定了<n>参数,系统会保留<n>行给page footer,页面的实际可输出正本行数为<length>减去page header length,再减去<n>。每页的行数包含了列表头(headings)、列表内容与列表脚注行(footer lines);系统变量SY-LINCT会存储页面行数<length>,注意:如果REPORT语句没有设置该值,则该系统变量值为0,除非使用NEW-PAGE语句进行了设置。

SY-PAGNO系统变量存储了当前页码

END-OF-PAGE.                              触发的条件是数据要满一页时才触发,否则不会被触发
NEW-PAGE

RESERVE <n> LINES                         在调用此语句时,如果最后一次输出到Page Footer之间所剩行小于(注意:等于时不会分页)<n>时会进行分页,在开始新页之前会触发END-OF-PAGE事件(如果最后一页数据不足一页,还是不会显示页脚)

NEW-PAGE [NO-TITLE|WITH-TITLE] [NO-HEADING|WITH-HEADING] WITH-TITLE、NO-TITLE:控制NEW-PAGE新开启的页面以及后面使用NEW-PAGE开启的页面是否使用标准的list header

NO-HEADING、WITH-HEADING:控制NEW-PAGE新开启的页面以及后面使用NEW-PAGE开启的页面是否使用标准的column header

NEW-PAGE LINE-COUNT <length>       系统变量SY-LINCT会存储页面行数(即<length>)。该选项决定了随后的所有(除非又重新通过该语句的这个选项重新指定了)使用NEW-PAGE语句分出的页面的允许的最大数据行数

NEW-PAGE LINE-SIZE <width>         SY-SCOLS:存储了当前窗口在没有滚动条的情况下允许的最大字符数(或叫Column),而LINE-SIZE选项指的是列表本身最大允许的字符数,与窗口大小没有关系(如果LIST列表的宽度LINE-SIZE大于了窗口允许的最大字符数SY-SCOLS,则会出现滚动条,否则窗口不会出现滚动条)

13.3.     LIST事件

AT PF<nn>(obsolete)已过时

键盘上的F<nn>(01 到 24)键不再具有系统预置功能,它们都将与function codes PF<nn>关联

AT LINE-SELECTION

当用户在LIST屏幕上的某行上按F2或者鼠标双击时,就会触发该事件块,并且此时的function code默认名为PICK

AT USER-COMMAND

除上面PF<nn>与PICK两个Function code以外,其他的function codes将被runtime environment(预置按钮的FunCode会被运行时环境捕获)拦截或者是触发AT USER-COMMAND事件。

除了通过手动触发LIST屏幕事件之外,还可以直接通过编程的方式来触发:

SET USER-COMMAND <fc>.

该语句会在当前列表事件块里的所有输出结束后生效(这意味着该语句放在输出语句的前后都没有关系),并在列表显示之前触发与<fc>对应的事件。其作用与用户手动选择了相应的Function Code是一样的

13.4.     Detail Lists 创建

凡事在AT PF<nn>、AT LINE-SELECTION、AT USER-COMMAND三个事件块里输出的内容,都会创建一个新的detail lists

13.5.      标准的 List Status

如果在报表程序中没有设置(Basic List与Detail List都未设置时)GUI status,则系统会将list screen的Status设置为系统内置的default list status;在其他类型的程序中(如当你在Screen中创建一个list时),你可以明确的调用下面语句来设置成系统内置的default list status:

SET PF-STATUS space.

该语句定义了Standard List所拥有的默认functions,系统所提供的内置default list status如下(这些功能都已实现,可直接使用):

13.6.     列表屏幕上的数据与程序间的传递

13.6.1.           SY-LISEL

SY-LISEL类型为C(255),它是将整行的内容都存储下来了,所以要取得每个Field,则需要通过offset方式来截取

13.6.2.           HIDE

HIDE <f>.

变量<f>可以是整行或部分输出列的变量,甚至是其他与行内容无关的变量。

当单击List屏幕中的行时,如果对应的行设置了隐藏字段,则HIDE隐藏字段变量<f>会自动被存储值填充,当然也可以使用READ LINE来手动控制读取填充隐藏域

注:局部变量不能存储到HIDE区域中

语句要在数据行被WRITE语句输出到列表缓冲区后,在后面紧着编写(为了隐藏的数据与当前输入的数据一致),并且当被双击时,保存在隐藏域中的字段的值将自动被传回到原始字段中

隐藏域实质上是一个内表,其行结构包含了三个字段:被选中行的行号、字段名、字段值,当保存数据时,每个被保存的字段在隐藏域中形成一行:

上图中已将wa_spfli-carrid、wa_spfli-connid存入了隐藏域中了,所以在双击行后,可以直接使用AT LINE-SELECTION.事件中使用

13.6.3.           READ LINE

READ LINE <lin> [INDEX <idx>]
      [FIELD VALUE <f1>[INTO <g1>]...<fn>[INTO <gn>]] [OF CURRENT PAGE|OF PAGE <p>].

该语句会将事件触发所在的List((index SY-LILLI))中的第<lin>行的内容存储到SY-LISEL系统变量中,并且随之将<lin>行所对应的HIDE字段也进行相应填充。另外会将Write显示输出的名为<fn>字段的值存储到<gn>全局变量中

13.7.     从Screen Processing 屏幕处理切换到Lists列表输出

为了将dialog processor控制权转交给list processor,你可在PBO dialog modules 中调用下面这样的语句:

LEAVE TO LIST-PROCESSING[AND RETURN TO SCREEN<nnnn>]

该语句可以使用在PBO 或者PAI event中,它的作用是在当前屏幕的PAI processing(一般在PBO块里使用SUPPRESS DIALOG.或LEAVE SCREEN.语句后不会显示这个屏幕,此时在PBO事件块结束后立即显示Basic List)结束后开始list processor并显示Basic List。调用该语句所在屏幕的PBO and PAI modules中的list output都会被输出到Basic List中缓存起来,待该屏幕处理完后显示(如果没有在PBO中使用SUPPRESS DIALOG.或LEAVE SCREEN.语句,则在PAI结束后显示;如果使用了这两个语句,则会在PBO块结束后就会显示)

可以使用以下两种方式来离开list processing:

?    在basiclist中点击Back,Exit,orCancel

?    在list processing程序中使用:LEAVE LIST-PROCESSING.

以上两种方式都会使控制权从list processor转交到dialog processor。

在默认的情况下,不带AND RETURN TO SCREEN选项的LEAVE TO LIST-PROCESSING语句在当list processor 处理结束后(如关闭list列表输出窗体时),dialog processor将会又会返回到LEAVE TO LIST-PROCESSING语句调用所在屏幕的PBO事件块,并重新执行PBO事件块(所以这样使用会出现死循环:关不掉List列表输出窗口);选项AND RETURN TO SCREEN允许你指定当前屏幕序列(即LEAVE TO LIST-PROCESSING语句调用所在屏幕所在的屏幕序列)中的某个屏幕,当list processor 处理结束后,dialog processor将会回到指定的屏幕并执行其相应的PBO事件块

13.8.     LIST 打印输出

打印参数设置:

SET_PRINT_PARAMETERS

GET_PRINT_PARAMETERS

从程序中启动打印:NEW-PAGEPRINTON

时间: 2024-08-25 21:48:34

[SAP ABAP开发技术总结]列表屏幕的相关文章

[SAP ABAP开发技术总结]选择屏幕——按钮、单选复选框

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.6.         按钮.单选复选框.下拉框的FunCode. 91 12.6.1.     选择屏幕中的按钮... 92 12.6.2.     选择屏幕中的单选/复选按钮:点击时显示.隐藏其他屏幕元素... 92 12.6.     按钮.单选复选框.下拉框的FunCode 如果复选框与单选按钮没有设置Function Code,则它们就会像普通的输入框一样,

[SAP ABAP开发技术总结]选择屏幕——SELECT-OPTIONS

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.4.         SELECT-OPTIONS. 89 12.4.1.     输入ABAP程序默认值时,需要加上“=”. 89 12.4.2.     选择条件内表多条件组合规则... 89 12.4.3.     使用SELECT-OPTIONS替代PARAMETERS. 90 12.4.     SELECT-OPTIONS SELECT-OPTIONS

[SAP ABAP开发技术总结]DIALOG屏幕流逻辑

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.7.     屏幕流逻辑 PROCESS BEFORE OUTPUT.PROCESS AFTER INPUT.PROCESS ON HELP-REQUEST.PROCESS ON VALUE-REQUEST. 12.7.1.           FIELD FIELD <f>. 使用FIELD语句后,屏幕字段<f>需要在该语句处理完后才传递到ABAP程序相应的字

ABAP开发顾问必备:SAP ABAP开发技术总结

声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 该文档是根据我过去多年学习文档与工作文档总结而成,项目开发过程中我都会参考此文档,主要ABAP很多细节上的东西不可能你记得很牢固,或者你记得一时,但过不了几天做别的项目就会

[SAP ABAP开发技术总结]ABAP程序之间数据共享与传递

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 19.             数据共享与传递... 222 19.1.         程序调用.会话.SAP/ABAP内存 关系... 222 19.2.         ABAP Memory数据共享... 224 19.2.1.     EXPORT. 224 19.2.2.     IMPORT. 226 19.2.3.     DELETE. 227 19.3

[SAP ABAP开发技术总结]各种选择屏幕元素演示

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.5.     各种屏幕元素演示 TABLES: mara,marc.DATA: g_pg(24). SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.  PARAMETERS: p_bukrs LIKE t001-bukrs OBLIGATORY."Company code  SELECT-OPTION

[SAP ABAP开发技术总结]屏幕DIALOG——PARAMETERS

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.3.     PARAMETERS PARAMETERS {para[(len)]}|{para [LENGTH len]}type_options [{ TYPE type [DECIMALS dec] }| { LIKE dobj }| { LIKE (name) }]screen_options[{ {[OBLIGATORY|NO-DISPLAY] [VISI

[SAP ABAP开发技术总结]动态修改选择屏幕

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 12.16.             动态修改屏幕 选择屏幕.对话屏幕都有对应的SCREEN内表,下面是几个重要属性: NAME:Name of the screen field.如果参数是select-options类型参数,则参数名以LOW与HIGH后缀来区分. GROUP1:选择屏幕元素通过 MODIF ID 选项设置GROUP1(对话屏幕通过属性设置),将屏幕元素分为一组,

[SAP ABAP开发技术总结]业务对象和BAPI

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 18.3.         业务对象和BAPI 184 18.3.1.     SAP业务对象(SWO1)... 184 18.3.1.1.           业务对象类型的组成... 185 18.3.1.2.           业务对象(BO)设计... 185 18.3.1.2.1.       创建业务表... 185 18.3.1.2.2.       创建