作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 02:05:05
请教一个abap事件AT SELECTION-SCREEN的问题.
我在程序里面定义了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也不行.怎样才能返回原来的屏幕不执行下面的两个事件.
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抛出你要的信息
再问: 不管是F8快捷键还是点那个执行按钮,AT SELECTION-SCREEN事件都是会执行的,大哥。。然后才是START-OF-SELECTION,不信你写个最简单的选择屏幕程序,随便放几个按钮上面,测试一下就知道了!
再答: 你说的对,我之前是说错了,执行程序是会触发PAI事件 是我理解错你的需求了,不想执行程序的话,你可以让选择屏幕抛出'E'类型的Message,这样程序就因为报出Error类型的message会停留在选择屏幕上 即是说将你的代码中的RETURN,换成一个类似如下的Message语句(E类型) MESSAGE ' ftr y ' TYPE 'E' .