關於螢幕程式設計(轉)

weilish發表於2010-12-08
ABAP中開發的程式分2種。REPORTDIALOG.REPORT程式設計中, SAP系統中已經安排了事件流執行順序。我們只要在相應的事件塊塊中敲上程式碼,程式會按照事件塊的先後順序執行的。

REPORT事件流大概如下:INITIALIZATION——》AT-SELECTION——》AT-SELECTION-OUTPUT ——》START-OF-SELECTION——》AT USER_COMMAND——》AT LINE-SELECTION.——》TOP-OF-PGAE——》END-OF-PAGE ——END-OF-SELECTION.

DIALOG中由flow logic 控制, flow logic分成PBO(Process Before Output)PAI(Process After Input)。一個螢幕流的執行過程是:螢幕對應的PBO(螢幕輸出前處理塊)——》輸出相應的螢幕——》 PAI(螢幕輸出後處理塊)。如果在PAI中沒有去觸發執行下一個螢幕事件的話,會在當前的螢幕流中進行迴圈,也就是當前PBO->顯示螢幕->PAI進行迴圈。

PBO過程中處理的大部分是內表資料填充到要顯示的螢幕欄位中。

PAI過程中處理的大部分是把更新的螢幕資料更新到內表,根據相應的螢幕命令動作做相應的事件。比如儲存按鈕的畫,要把資料從內表更新到資料庫中。

如果輸出螢幕是數字的畫,在SE51製作的螢幕欄位中,後面要加大寫的‘V’,否則負數會導致系統的SHORT DUMP.

在一個dialog中一個內表很有可能貫穿好幾個螢幕,這時就要非常小心螢幕的流向了。比如這樣一個場景:在500中抓取資料放入一個內表中,在600螢幕中發生一個動作到螢幕700進行一個資料的更新,資料跟新完之後跳回螢幕600,螢幕600進行儲存後返回到螢幕500。而這時又開始執行螢幕500PBO,這時這個內表資料照理說要重新抓取的哦!但是問題是如果在螢幕500中抓取的這個內表資料是根據後續的一些條件來抓取的話就會產生一些問題。這時候千萬要注意的是在抓取資料到這個內表要進行內表清空的動作。否則這個內表在第二次進入500螢幕時是還存在值的,不一定是我們想要的!所以在抓取資料到一個內表前對內表的清空操作是必要的。以免引起不必要的麻煩!

區別於REPORT的一點是REPORT就按事件流執行下來完就完成了,而在DIALOG中常常存在著殺回馬槍的動作,而這時資料該是什麼樣的要非常小心,就因為沒寫一個CLEAR就會要了你的命!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16794144/viewspace-681304/,如需轉載,請註明出處,否則將追究法律責任。

相關文章