设为首页 收藏本站
查看: 1327|回复: 0

[经验分享] [SAP ABAP开发技术总结]列表屏幕

[复制链接]

尚未签到

发表于 2015-9-19 14:28:50 | 显示全部楼层 |阅读模式
DSC0000.gif
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4265450.html   
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
DSC0001.png
至少包括二行standard header,第一行standard header包括了listheader和pagenumber,第二行standard header是一条水平线。当程序是可执行报表程序时,listheader存储在SY-TITLE中。如果有必要,可以给standardheader添加最多四行的columnheaders与一条水平线。在水平或垂直滚动时standardheader是不会动的。
DSC0002.jpg
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如下(这些功能都已实现,可直接使用):
DSC0003.jpg
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语句输出到列表缓冲区后,在后面紧着编写(为了隐藏的数据与当前输入的数据一致),并且当被双击时,保存在隐藏域中的字段的值将自动被传回到原始字段中
隐藏域实质上是一个内表,其行结构包含了三个字段:被选中行的行号、字段名、字段值,当保存数据时,每个被保存的字段在隐藏域中形成一行:
DSC0004.png
上图中已将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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115915-1-1.html 上篇帖子: sap ftp 处理 下篇帖子: sap zsql 制作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表