【问题标题】:How to return to previous popup?如何返回上一个弹出窗口?
【发布时间】:2023-02-17 15:55:52
【问题描述】:

我正在打开一个 Popup(1) - Screen_0300

CASE sy-ucomm.
  WHEN 'POPUP1'.
    CALL SCREEN 0300 STARTING AT 10 08 ENDING AT 70 15.
ENDCASE.

在此 Popup 中,我调用另一个屏幕 Popup(2) - Screen_0400。

MODULE user_command_0300 INPUT.
  CASE sy-ucomm.
    WHEN 'POPUP2'.
      CALL SCREEN 0400 STARTING AT 10 08 ENDING AT 70 15.
  ENDCASE.
ENDMODULE.

现在,当我关闭 Popup(2) 时,我想返回到 Popup(1)。目前两个弹出窗口同时关闭。我已经尝试在 Popup(2) 的 PAI 中使用 Leave to ScreenSet Screen 调用 Popup(1)。有什么办法可以做到这一点?

【问题讨论】:

    标签: popup abap dynpro


    【解决方案1】:

    要使用 CALL SCREEN 保留屏幕显示,请在 PAI (MODULE ... INPUT) 执行期间使用 SET SCREEN 0,程序将在语句 CALL SCREEN 之后继续。

    0 是一个特殊值,用于保留当前的“屏幕调用序列”。

    【讨论】:

    • 遗憾的是,这会关闭两个弹出窗口,但我想返回到第一个弹出窗口。
    • 这是由于您的代码。它会留下两者,因为您每个屏幕执行一次 set screen 0。请调试它。
    【解决方案2】:

    我自己找到了答案,并将其发布,以便其他人可以更快地找到答案。这似乎与this 的问题相同。

    用以下方法修复它:

    data next_screen type sy-dynnr.
    CASE sy-ucomm.
     WHEN 'POPUP1'.
      next_screen = '0300'.
      while next_screen is not INITIAL.
      CALL SCREEN next_screen STARTING AT 10 08 ENDING AT 70 15.
      endwhile.
    ENDCASE.
    

    在第二个弹出窗口中:

    MODULE user_command_0300 INPUT.
      CASE sy-ucomm.
        WHEN 'CANCEL' OR 'ENTER'
          CLEAR next_screen.
        WHEN 'POPUP2'.
          CALL SCREEN 0400 STARTING AT 10 08 ENDING AT 70 15.
      ENDCASE.
    ENDMODULE.
    

    这样,每当使用 sy-ucomm CANCELEXIT 关闭第一个 Popup 时,next_screen 就会被清除,并且主程序再次成为焦点。否则 next_screen 一直是 300 并且会一直被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多