1. 程式人生 > >SAP事件 Event Flow(轉 感謝原創)

SAP事件 Event Flow(轉 感謝原創)

1報表過程事件 報表過程事件是在報表執行過程中由系統自動控制,按照一定次序被觸發的事件,其目的是從資料庫中選擇資料並整理,準備進行列表輸出。這些事件從報表程式啟動開始就被系統順序觸發,現分述如下: INITIATION: 初始化事件,用於程式初始化,例如選擇螢幕中欄位預設值的填充。 START-OF-SELECTION: 選擇開始事件,如果報表中含有選擇螢幕,則在選擇螢幕的處理結束後觸發,使報表程式的預設事件塊。如果程式中部分程式碼不隸屬於任何事件關鍵字,則自動被插入該事件塊的初始部分。 END-OF-SELECTION:選擇結束事件,如果程式中使用邏輯資料庫,則在所有邏輯資料處理結束後觸發。一般在該事件中輸出列表。 2選擇螢幕事件
如果報表需要使用選擇螢幕接受使用者輸入,除定義選擇螢幕元素之外,還需要編輯選擇螢幕事件塊來選擇螢幕行為進行控制,與其相關的系列事件將在INITIATION之後START-OF-SELECTION之前被觸發。現分述如下: AT SELECTION-SCREEN OUTPUT :選擇螢幕PBO事件,顯示選擇螢幕之前觸發。 AT SELECTION-SCREEN。。。選擇螢幕PAI事件,使用者在選擇螢幕中執行某些功能後被觸發。該事件關鍵字語句包含多個附加項,可以用於控制選擇螢幕狀態,並對其中的使用者互動進行響應。例如,當用戶輸入不正確的值時,給處錯誤訊息。或是進行一些妥當性檢查。 3邏輯資料庫事件
如果報表中使用到邏輯資料庫,則在START-OF-SELECTION事件結束後將觸發資料庫事件。現說明如下: GET node 。。。選擇邏輯資料庫中當前級別資料中的資料。 GET node LATE 選擇邏輯資料庫中上一級別資料來源中的資料。 邏輯資料庫事件的作用也是選擇並整理資料,因而也可以將其看作是一種報表過程事件。 4列表事件 在所有報表過程和選擇螢幕事件結束後,系統將開始觸發列表事件,這些事件塊控制列表輸出狀態,負責處理列表過程中的互動並響應使用者行為。主要有以下四種列表事件塊。 TOP-OF-PAGE:頁首控制,在每個新頁面開始時觸發。 END-OF-PAGE:頁尾控制,在當前頁面結束時觸發。 AT LINE-SELECTION:行選擇控制,使用者選擇某列表行時觸發。 AT USER-COMMAND : 使用者互動控制,使用者選擇某個GUI功能時觸發。 如果一個報表中定義了後兩種事件之一,則稱其為互動之列表,因為這種表不僅能顯示列表輸出,還可以根據使用者的行為給出更多其他的互動式資訊。 一般性的報表事件觸發過程如下: 1         一旦使用者開始執行報表過程的可執行程式,事件LOAD-OF-PROGRAM首先被觸發,程式開始執行。 2         INITIALZATIONG 被觸發。 3         如果程式中定義了供使用者輸入的選擇螢幕,每次選擇螢幕輸出之前,事件AT SELECTION-SCREEN OUTPUT 被觸發。 4         如果使用者在選擇螢幕中輸入某些值後執行某些功能,系統將觸發AT SELECTION-SCREEN。 5         之後觸發START-OF-SELECTION事件。 6         如果報表中使用到邏輯資料庫,則接下來觸發的事件為GET和GET LATE。 邏輯資料庫是一種資料來源,為程式提供資料篩選和整理的方式,在邏輯資料庫內部,資料條目通過迴圈一行一行讀入程式,並可以在GET事件塊內部進行處理。 7         之後執行END-OF-SELECTION事件,如有列表,一般在該事件之後輸出列表,此後系統執行時環境將控制交給顯示伺服器。 8         然後觸發頁首,頁尾控制的TOP-OF-PAGE和END-OF-PAGE. 9         如果程式中定義有列表事件,則系統可以響應使用者在列表螢幕中的行為,觸發各種程式中互動事件。行選擇互動事件(AT LINE-SELECTION)允許使用者從列表中選擇某行,並將觸發響應的事件。如果使用者選擇其他子定義的功能程式碼(功能程式碼與相關選單,按鈕或鍵盤熱鍵有關,又程式設計師在GUI狀態中定義),將觸發使用者指令互動,即AT USER-COMMAND事件。 事件塊的中止 事件塊的中止分為有條件中止和無條件中止。 1 有條件中止 CHECK CHEXK:如果CHECK語句中的條件為假,則系統離開當前事件並轉向下一個事件塊(不一定是END-OF-SELECTION)。但是如果CHECK用在事件塊內部的迴圈語句中,則只作用於當前迴圈。 2 無條件中止STOP,EXIT STOP:立即結束任何當前事件,直接轉向END-OF-SELECTION. EXIT:立即離開任何模組,直接轉向列表輸出螢幕,不執行END-OF-SELECTION。

AT SELECTION-SCREEN

(1).其實就像一個FORM,所以在這個事件裡宣告的變數都是區域性變數。

(2).根據SY-UCOMM這個系統變數可以判斷使用者的命令

(3).在這個事件裡響應的是螢幕上選擇條件中的事件,例如CHECKBOX的選擇與否,RADIOBUTTON的選擇,LISTBOX的選擇等等。

所以分為以下幾個方面:

1. ... ON field :在PARAMETER變化時觸發的事件,對於選擇螢幕某欄位輸入的PAI事件,當該欄位的值被傳遞給程式時被觸發,可以應用於改欄位本身的正確性檢查,如可系統提示錯誤,則可以在該欄位中重新輸入,此時其他元素呈灰色,不接受輸入

2. ... ON END OF sel :SELECT-OPTION觸發的事件,用於整個選擇表輸入結束後各行的檢查

3. ... ON VALUE-REQUEST FOR psel_low_high :當游標位於某螢幕欄位時,選擇的幫助(F4)

4. ... ON HELP-REQUEST FOR psel_low_high :當游標位於某螢幕欄位時,選擇的幫助(F1)

5. ... ON RADIOBUTTON GROUP radi :單選按鈕事件,必須進行整體輸入檢查

6. ... ON BLOCK block :框架的觸發事件

7. ... OUTPUT :響應螢幕上的事件,修改選擇螢幕的唯一方法

例項:

Event in ABAP report determine process flow of a program. The events are triggered depended on the way the output is generated. They begin after event keyword and end when the next event reached.

Event keyword:
INITIALIZATION.
Occurs when report initialized.
We can use it to check user authorization or prepare output for selection screen.



AT SELECTION-SCREEN OUTPUT :
Occurs each time selection screen about to generated.
We can use it to modify selection screen, for example hide / unhide parameter.

AT SELECTION-SCREEN.
Occurs each user command in selection screen. we can use it to perform checking on user input.

START-OF-SELECTION
Occurs after the standard selection screen has been processed.,
data is read in this event.

END-OF-SELECTION
Occurs after start-of-selection.

TOP-OF-PAGE
Occurs when a new page starts.
Use it for write report header.

END-OF-PAGE
Occurs when a page ends.
Use it for write report footer.

AT LINE-SELECTION
Occurs when the user double-click on report.

AT USER-COMMAND
Occurs when the user push toolbar button.

This is program to demonstrate how to use event properly.


REPORT ZAALGAL0008
LINE-COUNT 10(1).

*http://abap-gallery.blogspot.com

TABLES: sflight.

DATA: BEGIN OF t_report OCCURS 3,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
END OF t_report.

*begin selection screen
PARAMETERS p_datum LIKE sy-datum.
PARAMETERS p_check AS CHECKBOX.
*end selection screen

INITIALIZATION.
*begin initialization
MOVE sy-datum TO p_datum.
*end initialization

AT SELECTION-SCREEN.
*begin at selection-screen
MESSAGE I888(sabapdocu) WITH 'At selection-screen'.
IF p_check = 'X'.
MESSAGE E888(sabapdocu) WITH 'Clear checkbox'.
ENDIF.
*end at selection-screen

AT SELECTION-SCREEN OUTPUT.
*begin at selection-screen output
MESSAGE I888(sabapdocu) WITH 'At selection-screen output'.
*end at selection-screen output

START-OF-SELECTION.
*begin start-of-selection.
MESSAGE I888(sabapdocu) WITH 'start-of-selection'.
SELECT * FROM sflight.
MOVE sflight-carrid TO t_report-carrid.
MOVE sflight-connid TO t_report-connid.
APPEND t_report.
ENDSELECT.
*end start-of-selection.

END-OF-SELECTION.
*begin end-of-selection.
MESSAGE I888(sabapdocu) WITH 'end-of-selection'.
FORMAT COLOR col_normal.
DO 30 TIMES.
LOOP AT t_report.
WRITE / t_report-carrid.
WRITE t_report-connid.
ENDLOOP.
ENDDO.
*end end-of-selection.

TOP-OF-PAGE.
FORMAT COLOR col_heading.
WRITE 'This is header'.

END-OF-PAGE.
FORMAT COLOR col_total.
WRITE 'This is footer'.

AT LINE-SELECTION.
WRITE: / 'Cursor Row:', sy-curow.
WRITE: / 'Cursor Col:', sy-cucol.