12.18. 屏幕跳轉
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
可以用LEAVE TO SCREEN 0來結束當前SCREEN SEQUENCE
12.18.1. CALL SCREEN誤用
每次碰到CALL SCREEN語句就會產生新的SCREEN SEQUENCE,而且SAP系統設置了SCREEN SEQUENCE堆棧不能超過50個,一旦超過就會出溢出錯誤,所以不要使用 CALL SCREEN 進行屏幕的切換
為了避免產生新的SCREEN SEQUENCE,針對上圖,可以使用LEAVE...SCREEN進行屏幕切換,而不是CALL SCREEN:
SET SCREEN 110."該語句只是動態制定下一個屏幕,但不結束當前屏幕處理(即不立即跳轉下一屏幕),只有LEAVE SCREEN才會結束屏幕的處理(后面的語句才不會執行)
LEAVE SCREEN.
或者使用:LEAVE TO SCREEN 110.相當於上面兩包的組合:SET SCREEN 110. LEAVE SCREEN.
請使用SET SCREEN XXX / LEAVE SCREEN,LEAVE TO SCREEN XXX來在同一屏幕序列里動態的進行屏幕切換跳轉,而不要使用CALL SCREEN XXX進行屏幕序列的跳轉與切換
12.18.2. CALL SCREEN/SET SCREEN/LEAVE TO SCREEN區別
CALL SCREEN XXXX將在Screen調用棧(CALL STACK)上面添加一層調用(進棧,即重新開啟一個新的屏幕序列),調用XXXX的PBO和PAI,如果XXXX的Next Screen不為0,那么將繼續其Next Screen的PBO和PAI,如此繼續~~~當最后碰到Next Screen為0時,該層調用將從調用棧中退出(出棧),然后系統將繼續執行CALL SCREEN XXXX之后的語句。
SET SCREEN XXXX設置調用棧當前層次的Next Screen為XXXX,它並不影響調用棧的層數(即不會重新開啟一個新的屏幕序列,只做屏幕之間的切換,而不是屏幕序列之間的切換),除非XXXX為0,那將導致調用棧退掉一層(出棧)。要注意的是,PAI中SET SCREEN XXXX后的語句,系統將照樣執行,只有執行完畢該PAI整個邏輯后,才考慮Next Screen的PBO和PAI。
LEAVE TO SCREEN XXX與SET SCREEN XXX比較類似(也不會重新開啟一個新的屏幕序列,只做屏幕之間的切換,而不是屏幕序列之間的切換),所不同的是,LEAVE TO SCREEN XXXX將強行中斷當前SCREEN的PAI,直接執行XXXX的PBO和PAI。換言之,PAI中LEAVE TO SCREEN XXXX后面的語句,系統將不會執行到。
LEAVE SCREEN.后面的語句也不會執行
注:上面語句的XXX也可以是選擇屏幕的屏幕號,而不只是對話屏幕號
CALL SCREEN是將正在運行的畫面掛起,進入所調用的畫面,當使用LEAVE TO SCREEN 0時,能夠返回原主調畫面,可理解為嵌套調用;而LEAVE TO SCREEN是立即結束本畫面的執行,調用所指定的畫面,在調用畫面中,無法再返回原主調畫面。