天天看點

ABAP 自定義螢幕開發實作螢幕跳轉螢幕跳轉

螢幕跳轉

遇到的問題描述:在ABAP中的SCREEN的開發中,如果通過call screen 1000 starting at 11 12 ending at 23 22實作彈出小視窗的時候,右上角的關閉按鈕是無法達到關閉視窗的效果的,我們都知道如果通過call screen 1000調用螢幕的時候,關閉按鈕是可以關閉視窗的,小視窗的關閉要通過CODING來實作

1)如果沒有給這個螢幕設定GUI狀态,那麼請建立一個GUI狀态,然後給這個螢幕,通過set pf-status來實作。

2)有了GUI狀态後,再GUI狀态的功能碼上的關閉圖示上配置設定一個功能碼給它。

3)配置設定好功能碼,在按鈕事件處理,如果點選了這個按鈕,就 leave to screen 0(傳回上一個螢幕,如果上一個螢幕就退出程式)或者 leave program(退出程式)。

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        相當于        SET SCREEN <next screen>.      LEAVE SCREEN.

這兩個語句不會結束螢幕序列,它們僅僅轉向統一螢幕序列中的另一個螢幕。螢幕序列是否結束要看<next screen>是否為0或者螢幕的next screen屬性是否設定為0

可以用LEAVE TO SCREEN 0來結束目前SCREEN SEQUENCE

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.後面的語句也不會執行

CALL SCREEN是将正在運作的畫面挂起,進入所調用的畫面,當使用LEAVE TO SCREEN 0時,能夠傳回原主調畫面,可了解為嵌套調用;而LEAVE TO SCREEN是立即結束本畫面的執行,調用所指定的畫面,在調用畫面中,無法再傳回原主調畫面。

繼續閱讀