屏幕序列Screen Sequences

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292556.html

屏幕序列Screen Sequences. 337

Static Next Screen. 338

Dynamic Next Screen. 338

Leaving a Screen from a Program.. 339

Starting a Screen Sequence. 339

Using a Transaction Code. 340

From an ABAP Program.. 340

Inserting Screen Sequences(嵌套屏幕序列)... 340

Calling Modal Dialog Boxes(以弹出对话框显示,非全屏幕)... 341

CALL SCREEN的误用... 341

CALL SCREEN/SET SCREEN/LEAVE TO SCREEN区别... 342

CALL SCREEN与LEAVE TO SCREEN的区别?... 343

CALL TRANSACTION/LEAVE TO TRANSACTION/SUBMIT… AND RETURN/ SUBMIT

屏幕序列Screen Sequences

SY-DYNNR系统变量存储了当前屏幕的屏号

ABAP program中的dialog modules 仅仅只能在同一程序中的screens中调用

可以在同一程序中从一个屏幕导航到别一个屏幕,也可以重复某个屏幕序列中某个屏幕N次

如果要开启一个屏幕序列,你可以调用它的第一个屏幕。开启屏幕序列的方法有两种:通过Tcode(在事务码中设置序列中的首屏幕),或者在ABAP program中通过CALLSCREEN语句。如果是通过CALLSCREEN语句来开启的,则会将新开启的屏幕序列嵌套到当前屏幕序列中去。

可能在Screen Painter中为每一个屏幕设置它的nextscreen,这是一种static screen sequence。但是,可以在处理块中重写statically-defined next screen,这就是dynamic screensequences

如果不想让屏幕序列中的某个屏幕显示,则可以在该屏幕是的PBO中使用SUPPRESS DIALOG语句阻止它们的显示。当使用SUPPRESS DIALOG语句时,虽然屏幕不会显示,但PBO 与 PAI块还是会被处理。当你在屏幕序列中显示一个List是很有用的(屏幕与List之间的切换实例可以参考这里

某个屏幕的nextscreen为zero时,所在的当前屏幕序列就会结束。如果该序列是通过CALL SCREEN开启的,则返回到该屏幕序列首屏幕被调用的地方(CALL SCREEN XXX的地方);如果该序列是通过Tcode开启的,将会返回到事务码执行处;如果Next Screen非0,则会执行下一屏幕的PBO事件块。

Static Next Screen

所有的屏幕都有Next screen静态属性,但这个静态属性可以在程序中动态的绕过这个静态的Next screen。

如果静态属性next screen没有设置或设置为0,且在程序运行时没有重写它,则当前屏幕就是它所在屏幕序列的最后一个屏幕。当屏幕处理完后,控件权将返回到屏幕序列调用处(即屏幕序列的启始处):如果屏幕序列是嵌套的,系统将返回到前一个屏幕序列中开启(调用)当前屏幕序列的CALL SCREEN语句处(注意:每调用一次CALL SCREEN语句就会开启一个新的屏幕序列,如果是在某个屏幕的PBO或是PAI块里调用的CALL SCREEN语句,则就会形成嵌套的屏幕序列)。

注:默认选择屏幕1000的Next Screen默认是自己,即1000

Dynamic Next Screen

可以动态的使用SET SCREEN 语句来重新设置静态定义的next screen:

SET SCREEN <next screen>.

该语句只是暂的修改静态定义的next screen,静态next screen会保持。如果<next screen>为0,则当前屏幕将会是屏幕序列中的最后一个屏幕。

注:此语句不会终止当前屏幕后续语句的执行,如是要立即离开当前屏幕不执行该语句后续语句,则要使用LEAVE语句。

Leaving a Screen from a Program

如果要离开屏幕,则可能使用下面词句:

LEAVE SCREEN.

or

LEAVE TO SCREEN <next screen>.

LEAVE SCREEN语句会结束当前屏幕并调用下一屏幕,next scree可以是static next screen,或者是dynamic next screen,如果是动态的,你必须在使用LEAVE SCREEN语句前使用SET SCREEN语句来重写static next screen。

LEAVE TO SCREEN语句会结束当前屏幕并跳转到指定的下一屏幕<next screen>,其作用等效于下面两条语句:

SET SCREEN <next screen>.

LEAVE SCREEN.

这两个语句不会结束屏幕序列,它们仅仅是转向同一屏幕序列中的另一屏幕。屏幕序列是否结束要看<next screen>是否为0或者next screen是否设置为0。

Starting a Screen Sequence

以下情况都可以开启一个新的屏幕序列

Using a Transaction Code

From an ABAP Program

CALL SCREEN <dynnr>.

Inserting Screen Sequences(嵌套屏幕序列)

Calling Modal Dialog Boxes(以弹出对话框显示,非全屏幕)

CALL SCREEN<scrn>

STARTING AT <X1><Y1>

ENDING AT <X2><Y2>.

x1、y1、x2、y2分别表示选择屏幕显示的左上角和右下角的列号、行号

CALL SCREEN的误用

最近一个网友提到他在做SCREEN编程时,一旦屏幕之间切换次数过多就会出现堆栈溢出的错误。经过分析他提供的信息,我得出错误的原因是他错误地使用CALL SCREEN语句来做屏幕之间的切换。由于SAP系统每次碰到CALL SCREEN语句就会产生新的SCREEN SEQUENCE(参见下图),而且SAP系统设置了SCREEN SEQUENCE堆栈不能超过50,一旦超过就会出溢出错误。网友就是错误的使用CALL SCREEN 100 和 CALL SCREEN 200进行屏幕切换,不断地产生新的SCREEN SEQUENCE,可想而知溢出是必然的。在SCREEN调用碰到下一屏幕为0时,SCREEN SEQUENCE的才会结束,程序在这个时候才回到CALL SCREEN的调用之处(也就是说我们可以用LEAVE TO SCREEN 0结束当前SCREEN SEQUENCE)。

注:如果某个选择屏幕是被其他屏幕通过CALL SELECTION-SCREEN XXX调用显示的,则按此选择屏幕上标准工具栏中的 Back 按钮时,会结束掉该选择屏幕所在的屏幕序列,返回到调用CALL SELECTION-SCREEN XXX语句所在的屏幕序列(即选择屏幕所在序列的上一屏幕序列)。注:如果所按的Back按钮不是最上层屏幕,则Back按钮还是会返回到同一屏幕序列中的上一个屏幕,所以Back按钮要想结束掉当前屏幕所在的序列,则要求Back按钮所在的屏幕为当前屏幕序列中的第一个屏幕。

为了避免产生新的SCREEN SEQUENCE,我们常常使用静态下一屏幕或动态下一屏幕来进行屏幕之间的切换。

方法如下:

1)静态制定下一屏幕

在进行屏幕设计时制定下一个屏幕;

2)动态设置下一屏幕

SET SCREEN 200. "该语句只是动态制定下一个屏幕,但不结束当前屏幕处理(即不立即跳转下一屏幕),只有LEAVE SCREEN才会结束屏幕的处理(后面的语句才不会执行)
LEAVE SCREEN.

或者

LEAVE TO SCREEN 200."相当于上面两包的组合:SET SCREEN 200. LEAVE SCREEN.

请使用SET SCREEN XXX / LEAVE SCREEN,LEAVE TO SCREEN XXX来在同一屏幕序列里动态的进行屏幕切换跳转,而不要使用CALL SCREEN XXX来进行屏幕序列的跳转与切换

CALL SCREEN/SET SCREEN/LEAVE TO SCREEN区别

1、CALL SCREEN XXXX将在Screen调用栈(CALL STACK)上面添加一层调用(进栈,即重新开启一个新的屏幕序列),调用XXXX的PBO和PAI,如果XXXX的Next Screen不为0,那么将继续其Next Screen的PBO和PAI,如此继续~~~当最后碰到Next Screen为0时,该层调用将从调用栈中退出(出栈),然后系统将继续执行CALL SCREEN XXXX之后的语句。

2、SET SCREEN XXXX设置调用栈当前层次的Next Screen为XXXX,它并不影响调用栈的层数(即不会重新开启一个新的屏幕序列,只是做屏幕序列方向的扭转换,只做屏幕之间的切换,而不是屏幕序列之间的切换),除非XXXX为0,那将导致调用栈退掉一层(出栈)。要注意的是,PAI中SET SCREEN XXXX后的语句,系统将照样执行,只有执行完毕该PAI整个逻辑后,才考虑Next Screen的PBO和PAI。

3、LEAVE TO SCREEN XXX与SET SCREENXXX比较类似(也不会重新开启一个新的屏幕序列,只是做屏幕序列方向的扭转换,只做屏幕之间的切换,而不是屏幕序列之间的切换),所不同的是,LEAVE TO SCREEN XXXX将强行中断当前SCREEN的PAI,直接执行XXXX的PBO和PAI。换言之,PAI中LEAVE TO SCREEN XXXX后面的语句,系统将不会执行到。

4、LEAVE SCREEN. 后面的语句也不会执行

注:上面语句的XXX也可以是选择屏幕的屏幕号,而不只是对话屏幕号

CALL SCREEN与LEAVE TO SCREEN的区别?

CALL SCREEN是将正在运行的画面挂起,进入所调用的画面,当使用LEAVE TO SCREEN 0时,能够返回原主调画面,可理解为嵌套调用;而LEAVE TO SCREEN是立即结束本画面的执行,调用所指定的画面,在调用画面中,无法再返回原主调画面。

CALL TRANSACTION/LEAVE TO TRANSACTION/SUBMIT… AND RETURN/ SUBMIT

在ABAP中,CALL TRANSACTION和SUBMIT report_nameAND RETURN语句,也都是在调用栈上添加一层调用,与CALL SCREEN有点类似。而LEAVE TO TRANSACTION以及SUBMIT report_name则是在调用栈当前层次的一个跳转(调用语句后面的语句不在执行),与LEAVE TO SCREEN类似。

时间: 2024-10-05 18:35:32

屏幕序列Screen Sequences的相关文章

列表屏幕(List Screen)

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292407.html 列表屏幕(List Screen). 205 生成列表屏幕... 205 复杂LIST. 206 标准LIST. 206 standard page header. 206 自定义LIST. 207 自定义Page H

选择屏幕(Selection Screen)

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292295.html 选择屏幕(Selection Screen). 156 创建选择屏幕... 157 SELECTION-SCREEN.. 157 SELECTION-SCREEN - BEGIN OF SCREEN.. 157 标准选

Activity之概览屏幕(Overview Screen)

概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除任务将其从列表中移除. 对于 Android 5.0 版本(API 级别 21),包含不同文档的同一 Activity 的多个实例可能会以任务的形式显示在概览屏幕中.前边是文档中说的,比较虚,下面来一个gif你就懂啦. 可以看到左边的任务视图是两个重叠在一块的,这也就是概览屏幕. 通常,您应该允许系

Flutter - 给App增加启动屏幕(Splash Screen)并且设置背景颜色

先看一下效果图,启动图最好设置为png格式的透明图,以防图片填充不满的时候背景图会非常的煞白(Flutter 默认背景色是白色). 打开android\app\src\main\res\drawable\launch_background.xml, <?xml version="1.0" encoding="utf-8"?> <!-- Modify this file to customize your launch splash screen -

Ubuntu 16.04屏幕阅读Screen Reader导致快捷键失灵的问题解决

开启和关闭快捷键:[Alt]+[Win]+[S] 如果关了之后开机还自动启动时,那么直接把它卸载: sudo apt-get remove gnome-orca killall orca 参考: https://askubuntu.com/questions/278693/how-do-i-stop-orca-screen-reader 原文地址:https://www.cnblogs.com/EasonJim/p/8266735.html

HTML5+ 手机设备的信息, 屏幕信息, 音量信息, 系统信息的获取 device, screen, display, os

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>WebApp启动页</title> <script type

C# Screen 类(多屏幕开发)

Screen 类 下面的代码示例演示如何使用 Screen 类的各种方法和属性. 该示例调用 AllScreens 属性来检索连接到系统的所有屏幕的数组. 对于每个返回的 Screen,该示例将设备名称.边界.类型.工作区和主屏幕添加到 ListBox. 1 private void button1_Click(object sender, System.EventArgs e) 2 { 3 int index; 4 int upperBound; 5 6 // Gets an array of

屏幕 Dynpro

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292250.html 对话屏幕Dynpro(SE51). 11 屏幕元素... 11 屏幕属性... 11 PAI事件的触发.屏幕元素Function Code设置... 12 屏幕流逻辑Screen Flow Logic. 12 对话屏幕

sap screen design

定义屏幕: SAP 系统中的屏幕包括: 标准屏幕: 选择屏幕: 列表输出屏幕: 1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP 程序, 其中需要设计的内容包括屏幕布局以及隐含在其后的流逻辑. 流逻辑则包含ABAP代码模块, 实际控制着屏幕的交互, 功能, 各事务流程(如后续屏幕设定), 当然还有设定屏幕的GUI状态, 包括菜单, 屏幕标题行和工具栏等. 2. 屏幕流逻辑分为两个基本处理块: PBO(process before output), 在向用户显示屏幕之前触发. PA