簡單的螢幕開發例項-ABAP
注:螢幕又叫動態程式,所有有時候會命名為DYNPRO,ABAP螢幕的主要組成部分有GUI STATUS(螢幕的狀態,和title一樣,用來分配給某個螢幕)、 GUI TITLE(螢幕的title) 、 SCREEN(螢幕的具體設定)等。
螢幕的分類:螢幕主要分為兩種,選擇螢幕和普通螢幕,選擇螢幕不需要自己定義,系統會自動生成相關的螢幕1000及螢幕邏輯流。建立一個螢幕要定義他的PBO及PAI,PBO預設會有一個螢幕狀態的函式,PAI預設有一個具有OK_CODE的函式,實現他們即可。
螢幕事件的分類:PBO(螢幕載入前事件)、PAI(螢幕載入後,螢幕輸出前事件)
螢幕元素用法:text元素,在程式中定義相應的結構體或變數,名字與其相同,TEXT
按鈕(pushbutton):按鈕會有一個功能碼選項,要大寫,小寫不識別,然後通過OK_CODE判定功能碼。OK_CODE的名字是你在螢幕引數中等定義的OK碼變數名。
以上大多出現在PAI,螢幕處理事件。
——————————————————————————————————————————————————————————————————————
我們要建立一個維護個人資訊的螢幕開發程式:首先使用者登入後可以看到自己基本資訊2000螢幕,觸發按鈕事件領取任務300螢幕,和修改個人資訊200螢幕。
首先建立一個可執行程式:在ABAP開發工作臺(SE80)建立一個程式,寫入如下程式程式碼
*&---------------------------------------------------------------------* *& Report ZFCATMODIFY01 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZFCATMODIFY01. " select-screen parameters parameters: p_zid type ZZSDPERSON-zid. data wa_person type ZZSDPERSON. *workarea for single booking to be changed data:WA_ZZSDPERSON type ZZSDPERSON. tables ZZSDPERSON. *variable for function code of user action data: ok_code like sy-ucomm. "data screen 300 data: WA_TASK_CHECKBOX type c , wa_task_checkbox2 type c, wa_task_checkbox3 type c, wa_task_checkbox4 type c. " 定義 初始選擇螢幕的狀態及標題 start-of-selection. set pf-status 'STATUS1'. set titlebar 'title2'. *selecting data using a dictionary view to get the data from sbook * and the customer name from scustom select ZID ZNICKNAME ZINTELLIGENCE ZSPIRIT ZFORCE ZCONSTITUTION ZAGILITY from ZZSDPERSON into corresponding fields of wa_person where zid = p_zid. ENDSELECT. if sy-subrc = 0. SELECT SINGLE * FROM ZZSDPERSON INTO WA_ZZSDPERSON WHERE ZID = WA_PERSON-ZID. call screen 2000. "else. " message id 'BC400' type 'S' number '047' with wa_PERSON-ZID. endif. *&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_0200 OUTPUT. SET PF-STATUS 'STATUS2'. SET TITLEBAR 'TITLE2'. ENDMODULE. " STATUS_0200 OUTPUT *&---------------------------------------------------------------------* *& Module CLEAR_OK_CODE OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* "MODULE CLEAR_OK_CODE OUTPUT. " CLEAR OK_CODE. "ENDMODULE. " CLEAR_OK_CODE OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0200 INPUT. CASE OK_CODE. WHEN 'BACK'. LEAVE to SCREEN 2000. WHEN 'SAVE'. UPDATE ZZSDPERSON SET: ZINTELLIGENCE = WA_ZZSDPERSON-ZINTELLIGENCE ZSPIRIT = WA_ZZSDPERSON-ZSPIRIT ZFORCE = WA_ZZSDPERSON-ZFORCE ZCONSTITUTION = WA_ZZSDPERSON-ZCONSTITUTION ZAGILITY = WA_ZZSDPERSON-ZAGILITY WHERE ZID = WA_ZZSDPERSON-ZID. if sy-subrc = 0. LEAVE TO SCREEN 2000. endif. WHEN OTHERS. WRITE: 'OTHERS NUMBER'. ENDCASE. ENDMODULE. " USER_COMMAND_0200 INPUT INCLUDE ZFCATMODIFY01_STATUS_2000O01. INCLUDE ZFCATMODIFY01_STATUS_0300O01.
我們在這個程式的選擇螢幕上新增一個parameters 用於輸入使用者ID.
如圖1:
圖1
然後繪製螢幕2000,顯示使用者基本資訊,繪製螢幕就不多做介紹了,就是拖拽元件。
如圖2:
圖2
2000程式碼:
*----------------------------------------------------------------------* ***INCLUDE ZFCATMODIFY01_STATUS_2000O01 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module STATUS_2000 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE STATUS_2000 OUTPUT. SET PF-STATUS 'STATUS3'. SET TITLEBAR 'TITLE3'. ENDMODULE. " STATUS_2000 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_2000 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_2000 INPUT. CASE OK_CODE. WHEN 'ADMIN'. CALL SCREEN 200. if sy-subrc = 0. LEAVE TO SCREEN 0. endif. WHEN 'TASK'. CALL SCREEN 300. if sy-subrc = 0. LEAVE TO SCREEN 0. endif. WHEN OTHERS. WRITE: 'OTHERS NUMBER'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. " USER_COMMAND_2000 INPUT
螢幕200,維護個人資訊檢視如圖3:
圖3
螢幕200的PAI及PBO在主程式中。
螢幕300,領取任務介面如圖4:
圖4
300螢幕的PBO及PAI程式碼:
*----------------------------------------------------------------------*
***INCLUDE ZFCATMODIFY01_STATUS_0300O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0300 OUTPUT.
SET PF-STATUS 'STATUS3'.
SET TITLEBAR 'TITLE4'.
ENDMODULE. " STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0300 INPUT.
" WA_ZZSDPERSON
CASE OK_CODE.
WHEN 'SUBMIT'.
if WA_TASK_CHECKBOX = 'X'.
WA_ZZSDPERSON-ZINTELLIGENCE = WA_ZZSDPERSON-ZINTELLIGENCE + 1 .
WA_ZZSDPERSON-ZMONEY = WA_ZZSDPERSON-ZMONEY + 10 .
endif.
if WA_TASK_CHECKBOX2 = 'X'.
WA_ZZSDPERSON-ZCONSTITUTION = WA_ZZSDPERSON-ZCONSTITUTION + 1 .
WA_ZZSDPERSON-ZAGILITY = WA_ZZSDPERSON-ZAGILITY + 1 .
WA_ZZSDPERSON-ZMONEY = WA_ZZSDPERSON-ZMONEY + 5 .
endif.
if WA_TASK_CHECKBOX3 = 'X'.
WA_ZZSDPERSON-ZFORCE = WA_ZZSDPERSON-ZFORCE + 1 .
WA_ZZSDPERSON-ZMONEY = WA_ZZSDPERSON-ZMONEY + 15 .
endif.
if WA_TASK_CHECKBOX4 = 'X'.
WA_ZZSDPERSON-ZSPIRIT = WA_ZZSDPERSON-ZSPIRIT + 1 .
WA_ZZSDPERSON-ZMONEY = WA_ZZSDPERSON-ZMONEY + 5 .
endif.
UPDATE ZZSDPERSON from WA_ZZSDPERSON.
if sy-subrc = 0.
leave to screen 2000.
endif.
WHEN OTHERS.
WRITE: 'OTHERS NUMBER'.
LEAVE TO SCREEN 2000.
ENDCASE.
ENDMODULE. " USER_COMMAND_0300 INPUT
最後附錄一個狀態的設定介面作為示例,其他螢幕狀態基本相同,用於這個螢幕選單欄的響應如圖5及
主螢幕2000的螢幕元素清單,結合圖2及圖6,螢幕2000程式碼中如何觸發PAI按鈕事件的程式碼就完全了。
如圖5、6:
圖5
圖6