如何关闭Popup(2)后返回Popup(1)?ABAP弹窗跳转问题
ABAP嵌套弹窗关闭后返回上一层的解决方案
核心问题分析
当前问题源于默认CALL SCREEN的屏幕栈逻辑,错误的关闭指令会直接清空栈,导致两个弹窗同时关闭。以下是几种可行的解决方法:
方法1:在Popup(2)的PAI中使用LEAVE SCREEN
直接使用LEAVE SCREEN指令,仅关闭当前Popup(2),自动返回调用它的Popup(1)。注意不要使用LEAVE TO SCREEN 0或SET SCREEN 0这类清空屏幕栈的指令。
代码示例:
MODULE user_command_0400 INPUT. CASE sy-ucomm. WHEN 'BACK' OR 'CANCEL' OR 'EXIT'. LEAVE SCREEN. " 仅关闭当前弹窗,返回上一层Popup(1) ENDCASE. ENDMODULE.
方法2:调用Popup(2)时添加AND RETURN(ABAP 7.40+)
如果系统版本为ABAP 7.40及以上,在调用Popup(2)时加上AND RETURN关键字,明确保留Popup(1)的上下文,关闭Popup(2)后会自动返回:
MODULE user_command_0300 INPUT. CASE sy-ucomm. WHEN 'POPUP2'. CALL SCREEN 0400 STARTING AT 10 08 ENDING AT 70 15 AND RETURN. ENDCASE. ENDMODULE.
方法3:检查屏幕属性设置
确保弹窗屏幕的退出行为配置正确:
- 打开屏幕编辑器(SE51/SE80),进入Popup(2)的屏幕属性。
- 在「退出」选项中,选择「返回上一屏幕」,而非「结束程序」。
- 同理,Popup(1)的退出属性也设置为「返回上一屏幕」,避免关闭时直接退出主程序。
常见错误规避
- 不要用
LEAVE TO SCREEN 0300:这种方式会强制跳转至Popup(1),但会破坏原有屏幕栈逻辑,可能引发异常。 - 不要用
SET SCREEN 0:该指令会标记当前屏幕为栈的最后一个,执行后会清空整个屏幕栈,导致两个弹窗同时关闭。
内容的提问来源于stack exchange,提问作者SBECK1
相关产品推荐
相关产品推荐

