SAP-DYNPRO開發實例


運行效果部分截圖:

 11220676-1

查詢功能:

11220676-2

添加功能:

11220676-3

修改功能:

 11220676-4 

 

工具條:

 11220676-5

 

11220676-6 

100屏幕:

 11220676-7

100屏幕邏輯流

PROCESS BEFORE OUTPUT.
  MODULE status_100.
  CALL SUBSCREEN: sub01 INCLUDING sy-repid '0200',
                  sub02 INCLUDING sy-repid '0300'.
PROCESS AFTER INPUT.
  CALL SUBSCREEN sub01.
  CALL SUBSCREEN sub02.
  MODULE exit_command_100 AT EXIT-COMMAND.


200屏幕

11220676-8

200屏幕邏輯流:

PROCESS BEFORE OUTPUT.
  MODULE set_screen_200.
PROCESS AFTER INPUT.
  MODULE user_command_0200.


300屏幕:

11220676-9
300屏幕邏輯流:

PROCESS BEFORE OUTPUT.
  MODULE set_screen_300.
PROCESS AFTER INPUT.

  


程序代碼:
主程序:ZSY_TEST001

REPORT zsy_test001.
INCLUDE zsy_test001_top.
INCLUDE zsy_test001_o01.
INCLUDE zsy_test001_i01.
INCLUDE zsy_test001_f01.


zsy_test001_top.子程序

TABLES: spfli.
DATA: BEGIN OF gs_data,
         carrid    TYPE spfli-carrid,    " 航線代碼
         connid    TYPE spfli-connid,    " 航班連接ID
         countryfr TYPE spfli-countryfr, " 起飛國家
         cityfrom  TYPE spfli-cityfrom,  " 起飛城市
         airpfrom  TYPE spfli-airpfrom,  " 起飛機場
         countryto TYPE spfli-countryto, " 目標國家
         cityto    TYPE spfli-cityto,    " 目標城市
         airpto    TYPE spfli-airpto,    " 目標機場
         fltime    TYPE spfli-fltime,    " 航班時間
         deptime   TYPE spfli-deptime,   " 啟程時間
         arrtime   TYPE spfli-arrtime,   " 到達時間
       END OF gs_data.
DATA: ok_code TYPE sy-ucomm,
      bk_code TYPE sy-ucomm,
      l_initial(1) TYPE c.
START-OF-SELECTION.
  CALL SCREEN 100.

 

zsy_test001_o01

*&---------------------------------------------------------------------*
*&      Module  STATUS_100  OUTPUT
*&---------------------------------------------------------------------*
*       text  工具條
*----------------------------------------------------------------------*
MODULE status_100 OUTPUT.
  DATA: BEGIN OF ex_tab OCCURS 0,
         fcode LIKE sy-ucomm,
      END OF ex_tab.
  CLEAR: ex_tab[].
  IF bk_code IS INITIAL OR bk_code = 'SEL' OR bk_code = 'DEL'.
    ex_tab-fcode = 'SAVE'.  "" 隱藏保存按鈕
    APPEND ex_tab.
  ENDIF.
  " 工具條
  SET PF-STATUS 'STATUS_BAR' EXCLUDING ex_tab.
  " 標題
  SET TITLEBAR 'TITLE_BAR'.
ENDMODULE.                 " STATUS_100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  SET_SCREEN_200  OUTPUT
*&---------------------------------------------------------------------*
*       text  200屏幕屬性設置
*----------------------------------------------------------------------*
MODULE set_screen_200 OUTPUT.
  LOOP AT SCREEN.
    IF bk_code = 'UPD' AND screen-group1 = 'H1'.
      screen-input = 0.
      MODIFY SCREEN.
    ELSEIF ( bk_code = 'INS' or bk_code = 'UPD' ) AND screen-group1 = 'B1'.
      screen-input = 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDMODULE.                 " SET_SCREEN_200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  SET_SCREEN_300  OUTPUT
*&---------------------------------------------------------------------*
*       text  300屏幕屬性設置
*----------------------------------------------------------------------*
MODULE set_screen_300 OUTPUT.
  LOOP AT SCREEN.
    IF bk_code IS INITIAL.
      screen-active = 0.
      MODIFY SCREEN.
    ELSEIF ( bk_code = 'SEL' OR bk_code = 'UPD' ) AND
            ( gs_DATA-carrid IS INITIAL OR gs_DATA-connid IS INITIAL ).
      screen-active = 0.
      MODIFY SCREEN.
    ELSEIF ( bk_code = 'INS' OR bk_code = 'UPD' ) AND screen-group1 = 'D1'.
      screen-input = 1.
      MODIFY SCREEN.
    ELSEIF ( bk_code = 'INS' OR bk_code = 'UPD' ) AND screen-group1 = 'B1'.
      screen-input = 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDMODULE.                 " SET_SCREEN_300  OUTPUT

 

zsy_test001_i01.子程序

*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND_100  INPUT
*&---------------------------------------------------------------------*
*       text  退出功能
*----------------------------------------------------------------------*
MODULE exit_command_100 INPUT.
  DATA: l_exit(1) TYPE c.
  PERFORM are_you_sure1 USING '確認退出'
                              '確定要退出嗎?'
                              'X'
                      CHANGING l_exit.
  IF l_exit = 'J'.
    LEAVE TO SCREEN 0.
  ENDIF.
ENDMODULE.                 " EXIT_COMMAND_100  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_100  INPUT
*&---------------------------------------------------------------------*
*       text  按鈕功能
*----------------------------------------------------------------------*
MODULE user_command_100 INPUT.
  bk_code = ok_code.
  CASE bk_code.
    WHEN 'SEL'." 查詢
      PERFORM input_check_200.
      PERFORM sel_data.
    WHEN 'INS'. " 添加
      CLEAR: gs_DATA,gs_data.
    WHEN 'UPD'. " 修改
      PERFORM input_check_200.
    WHEN 'DEL'. " 刪除
      PERFORM input_check_200.
      PERFORM DEL_DATA.
    WHEN 'SAVE'. " 保存
      CLEAR: spfli.
      PERFORM input_check_300.
      PERFORM save_data.
    WHEN 'CANC'. " 取消
      CLEAR: gs_DATA,gs_data.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_100  INPUT

  

zsy_test001_f01.子程序

*&---------------------------------------------------------------------*
*&      Form  input_check_200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM input_check_200.
  CLEAR: l_initial.
  IF gs_data-carrid IS INITIAL.
    l_initial = 'X'.
    MESSAGE '航線代碼不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-connid  IS INITIAL.
    l_initial = 'X'.
    MESSAGE '航班連接Id不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.                    "input_check_200
*&---------------------------------------------------------------------*
*&      Form  input_check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM input_check_300.
  IF gs_data-countryfr IS INITIAL.
    l_initial = 'X'.
    MESSAGE '起飛國家不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-cityfrom IS INITIAL.
    l_initial = 'X'.
    MESSAGE '起飛城市不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-airpfrom IS INITIAL.
    l_initial = 'X'.
    MESSAGE '起飛機場不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-countryto IS INITIAL.
    l_initial = 'X'.
    MESSAGE '目標國家不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-cityto IS INITIAL.
    l_initial = 'X'.
    MESSAGE '目標城市不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-airpto IS INITIAL.
    l_initial = 'X'.
    MESSAGE '目標機場不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-fltime IS INITIAL.
    l_initial = 'X'.
    MESSAGE '航班時間不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-deptime IS INITIAL.
    MESSAGE '啟程時間不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF gs_data-arrtime IS INITIAL.
    l_initial = 'X'.
    MESSAGE '到達時間不能為空!' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.                    "input_check
*&---------------------------------------------------------------------*
*&      Form  sel_data
*&---------------------------------------------------------------------*
*       text  查詢
*----------------------------------------------------------------------*
FORM sel_data.
  CHECK l_initial IS INITIAL.
  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF gs_data
    FROM spfli
    WHERE carrid = gs_data-carrid
    AND   connid = gs_data-connid.
ENDFORM.                    "sel_data
*&---------------------------------------------------------------------*
*&      Form  del_data
*&---------------------------------------------------------------------*
*       text  刪除
*----------------------------------------------------------------------*
FORM del_data .
  CHECK l_initial IS INITIAL.
  DELETE spfli.
  IF sy-subrc EQ 0.
    COMMIT WORK.
    CLEAR: gs_data.
    MESSAGE '刪除成功!' TYPE 'S'.
  ELSE.
    ROLLBACK WORK.
    MESSAGE '刪除失敗!' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.                    " DEL_DATA
*&---------------------------------------------------------------------*
*&      Form  save_data
*&---------------------------------------------------------------------*
*       text  保存數據
*----------------------------------------------------------------------*
FORM save_data.
  CHECK l_initial IS INITIAL.
  IF bk_code = 'INS'.
    " 查詢是否已添加記錄
    SELECT SINGLE * FROM spfli WHERE carrid = gs_data-carrid AND connid = gs_data-connid.
    IF sy-subrc EQ 0.
      MESSAGE '重復添加,請檢查!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
  ENDIF.
  CLEAR: spfli.
  MOVE-CORRESPONDING: gs_data TO spfli.
  MODIFY spfli. " 保存數據
  IF sy-subrc EQ 0.
    COMMIT WORK.
    MESSAGE '保存成功!' TYPE 'S'.
  ELSE.
    ROLLBACK WORK.
    MESSAGE '保存失敗!' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.                    "save_data
*&---------------------------------------------------------------------*
*&      Form  are_you_sure1
*&---------------------------------------------------------------------*
*       text  退出提示窗口
*----------------------------------------------------------------------*
*      -->I_TITLE      text
*      -->I_TEXTLINE1  text
*      -->I_DISPLAY    text
*      -->E_SUCCESS    text
*----------------------------------------------------------------------*
FORM are_you_sure1  USING    i_title TYPE char50
                              i_textline1
                              i_display
                     CHANGING e_success.
  CLEAR e_success.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
      defaultoption  = 'J'
      textline1      = i_textline1
      titel          = i_title
      cancel_display = i_display
    IMPORTING
      answer         = e_success.
ENDFORM.                    "are_you_sure1

 

---------------------
作者:rztyzxzy
來源:CSDN
原文:https://blog.csdn.net/rztyzxzy/article/details/46756761
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM