1. 程式人生 > >簡單的螢幕開發例項-ABAP

簡單的螢幕開發例項-ABAP

注:螢幕又叫動態程式,所有有時候會命名為DYNPROABAP螢幕的主要組成部分有GUI  STATUS(螢幕的狀態,和title一樣,用來分配給某個螢幕) GUI  TITLE(螢幕的title) SCREEN(螢幕的具體設定)等。

螢幕的分類:螢幕主要分為兩種,選擇螢幕和普通螢幕,選擇螢幕不需要自己定義,系統會自動生成相關的螢幕1000及螢幕邏輯流。建立一個螢幕要定義他的PBOPAIPBO預設會有一個螢幕狀態的函式,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