请教一个abap事件AT SELECTION-SCREEN的问题。。

我在程序里面定义了ATSELECTION-SCREEN的判断条件:ATSELECTION-SCREEN.IFftr<>'y'.RETURN.ENDIF.START-OF-... 我在程序里面定义了AT SELECTION-SCREEN的判断条件:
AT SELECTION-SCREEN.
IF ftr <> 'y'.
RETURN.
ENDIF.
START-OF-SELECTION.
WRITE / 'START-OF-SELECTION事件'.
END-OF-SELECTION.
WRITE / 'END-OF-SELECTION事件'.

为什么我点了执行按钮(F8),ftr <> 'y'这个条件也符合,可是后面的START-OF-SELECTION和END-OF-SELECTION还是执行了,STOP也不行。怎样才能返回原来的屏幕不执行下面的两个事件。
谢谢回答!
展开
 我来答
nature0106
2012-11-18 · TA获得超过502个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:198万
展开全部
F8是执行程序,而你所说的返回原来的屏幕应该是选择屏幕吧,

AT SELECTION-SCREEN. 相当于选择屏幕的PAI,用来响应屏幕元素的输入,当你按F8执行程序的时候,是不会触发PAI事件的
选择屏幕的作用在于为程序输入一些限制条件什么的,AT SELECTION-SCREEN.只能响应屏幕元素,当你按F8时,(一般意义上讲)是选择屏幕条件输入完成,需要正式进入程序逻辑的执行了,选择屏幕代码的执行优先级高于 START-OF-SELECTION.事件,所以会优先出现输入屏幕,按F8后,会把选择屏幕的输入送到程序中,执行后面的代码
更多追问追答
追问
是点了工具栏上那个执行按钮,不是按了F8,会执行AT SELECTION-SCREEN的。。然后我想在里面判断,不符合条件就不执行,就是说不执行START-OF-SELECTION中的代码,怎么做才好?
追答
执行按钮的快捷键就是F8,当你执行按执行按钮后,程序会从START-OF-SELECTION执行,
你可以给屏幕添加一个按钮来代替执行按钮,然后把START-OF-SELECTION中的代码写到PAI中,如下
添加BUTTON的代码如下,添加到前面
SELECTION-SCREEN PUSHBUTTON /1(20) button USER-COMMAND go.
判断变成
IF ftr 'y'.
RETURN.
ELSE.
MESSAGE ''START-OF-SELECTION事件' TYPE 'I'.
ENDIF.
下面是初始化Button显示文本。
INITIALIZATION.
button = '执行'.
另外要告诉你的是,WRITE是打印,即是说程序执行完成后的打印(WRITE后程序就结束了),在屏幕上操作是不能用WRITE语句的,所心我用了MESSAGE抛出你要的信息
静水逐花
2012-11-19 · TA获得超过1032个赞
知道小有建树答主
回答量:733
采纳率:0%
帮助的人:489万
展开全部
This statement defines event blocks for different events selscreen_event that are triggered by the ABAP runtime environment during selection screen processing.

RETURN.
Effect
This statement ends the current processing block immediately. It can appear at any point in a processing block and ends this block irrespective of the statement block or control structure in which the block appears.

AT SELECTION-SCREEN是一个block 你在里面return 都只是退出当前这个block 不会退出整个程序,会继续执行后面的block,如果你把return换成LEAVE TO TRANSACTION SY-TCODE.会看到不同的效果。

在这里 如果你需要后面不执行 可以通过ftr的值在start-of-selection 和 end-of-selection里面做判断
更多追问追答
追问
先谢谢你的回答!我觉得如果在start-of-selection 和 end-of-selection里判断的话,那AT SELECTION-SCREEN这个事件就没发挥好它的作用,让程序多走了一步不该走的。。我想的效果是某个值不符合条件,就返回选择屏幕让用户重新选择输入,目前只知道message这种方式。。
追答
AT SELECTION-SCREEN 里面本来就只处理选择屏幕相关事宜  它的作用就是这个 你要强加一些 然后处理起来不方便也没辙 

你直接在start-of-selection里面 check一下有问题吗
而且 LEAVE TO TRANSACTION SY-TCODE 是会跳出程序 重新进入这个程序
完全能满足你输入不符合条件 重新进入选择屏幕的要求
但是从没见人在at selection screen里面写这些东西
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZeroLi1986XX
2012-11-18 · TA获得超过284个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:47.8万
展开全部
用message
message 'your message' type 'E'.
追问
除了这种方式呢。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应 | 问题解决率99% | 24小时在线
立即免费咨询律师
17821人正在获得一对一解答
青岛梦幻岛2分钟前提交了问题
贵阳山水情深1分钟前提交了问题
大连海浪之心6分钟前提交了问题
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消
还有疑问? 马上咨询31209位在线律师,3分钟快速解答
立即免费咨询律师

辅 助

模 式