ABAP學習(18):ABAP彈窗function


ABAP彈出框

        SAP中可以使用function,顯示彈窗。根據不同彈窗類型,SAP對彈出框進行了分組,例如:SPO1,SPO2等。SAP系統中有一些這些分組的函數的樣例函數,可以通過 RS+分組+* 進行搜索,例如SPO4的彈窗樣例,使用RSSPO4*進行搜索。所有的function源碼都在Package:SZP下。

1.SP01類型

        包含一些提示信息,讓用戶確認的彈窗。

示例1:POPUP_TO_CONFIRM函數使用

"顯示彈窗
FORM spo1_pop.
  "接收選擇結果
  DATA:ANSWER(1) TYPE C.
  "傳入表,沒啥用
  DATA:parm LIKE TABLE OF SPAR WITH HEADER LINE.
  "使用popup_to_confirm,一個確認彈窗
  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      "彈窗標題
      TITLEBAR                    = '請確認'
      "額外文本,可以使用se61維護Dialog Text,
      "示例中使用:TEXT1_ZUM_POPUP_TO_CONFIRM
      DIAGNOSE_OBJECT             = ''
      "彈窗顯示確認問題文本
      TEXT_QUESTION               = '這是彈窗顯示確認問題'
      "最左邊按鈕文本,默認yes
      TEXT_BUTTON_1               = 'yes'
      "最左邊按鈕圖標:Table:Icon,Tcode:Icon都可以查看圖標,傳入icon名
      ICON_BUTTON_1               = 'ICON_CHECKED'
      "中間按鈕文本,默認no
      TEXT_BUTTON_2               = 'No'
      "中間按鈕圖標
      ICON_BUTTON_2               = 'ICON_INCOMPLETE'
      "初始選中按鈕
      DEFAULT_BUTTON              = '1'
      "是否顯示cancel按鈕
      DISPLAY_CANCEL_BUTTON       = 'X'
      "顯示一個info按鈕,幫助信息,但是se61找不到對應值
      USERDEFINED_F1_HELP         = 'TEST_TEXT_ZUR_SPO1'
      "彈窗開始列
      START_COLUMN                = 25
      "彈窗開始行
      START_ROW                   = 6
      "彈窗文本左邊圖標
      POPUP_TYPE                  = 'ICON_MESSAGE_INFORMATION'
      "未知功能
*      IV_QUICKINFO_BUTTON_1       = ''
*      IV_QUICKINFO_BUTTON_2       = ''
    IMPORTING
      "選擇值1:yes;2:no;A:cancel;
      ANSWER                      = ANSWER
    TABLES
      "傳入table,源碼沒使用?
      PARAMETER                   = parm
*   EXCEPTIONS
*     TEXT_NOT_FOUND              = 1
*     OTHERS                      = 2
            .
  IF SY-SUBRC <> 0.
    MESSAGE s000 WITH 'error'.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

示例2:POPUP_TO_CONFIRM_STEP使用

FORM spo1_pop1.
  "提示do not use
  "接收選擇結果
  DATA:ANSWER(1) TYPE C.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
      DEFAULTOPTION        = 'Y'
      "顯示兩行文本
      TEXTLINE1            = 'textline 1'
      TEXTLINE2            = 'textline 2'
      "彈窗標題
      TITEL                = 'popup title'
      START_COLUMN         = 25
      START_ROW            = 6
      "是否顯示cancel按鈕
      CANCEL_DISPLAY       = ''
    IMPORTING
      "返回值J:yes;N:no;A:cancel
      ANSWER               = ANSWER.
  IF SY-SUBRC <> 0.
    MESSAGE s000 WITH 'error'.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

示例3:POPUP_TO_CONFIRM_WITH_VALUE函數使用

FORM spo1_pop2.
  "提示do not use
  "接收選擇結果
  DATA:ANSWER(1) TYPE C.
  CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_VALUE'
    EXPORTING
      "默認按鈕
      DEFAULTOPTION        = 'Y'
      "顯示文本
      OBJECTVALUE          = '100'
      "文本后綴
      TEXT_AFTER           = '%'
      "文本前綴
      TEXT_BEFORE          = '百分比:'
      TITEL                = 'title'
      START_COLUMN         = 25
      START_ROW            = 6
      CANCEL_DISPLAY       = 'X'
    IMPORTING
      ANSWER               = ANSWER.
  IF SY-SUBRC <> 0.
    MESSAGE s000 WITH 'error'.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
View Code

類似還有函數:POPUP_TO_CONFIRM_WITH_MESSAGE,POPUP_TO_CONFIRM_LOSS_OF_DATA,但是都不推薦使用,這種提示信息的直接使用POPUP_TO_CONFIRM就夠了。

 

2.SPO2類型

    和SPO1類似,顯示一些信息供用戶確認。

示例1:POPUP_TO_DECIDE函數使用

"顯示三行文本彈窗
FORM spo2_pop1.
  "do not use
  "接收選擇結果
  DATA:ANSWER(1) TYPE C.
  "顯示彈窗
  CALL FUNCTION 'POPUP_TO_DECIDE'
    EXPORTING
      "默認按鈕
      DEFAULTOPTION     = '1'
      "三行文本
      TEXTLINE1         = 'first line'
      TEXTLINE2         = 'second line'
      TEXTLINE3         = 'third line'
      "按鈕1,2的文本
      TEXT_OPTION1      = 'yes'
      TEXT_OPTION2      = 'no'
      "按鈕1,2的圖標
*     ICON_TEXT_OPTION1 = ' '
*     ICON_TEXT_OPTION2 = ' '
      "彈窗標題
      TITEL             = 'title'
      "開始行列
      START_COLUMN      = 25
      START_ROW         = 6
      "是否顯示cancel按鈕
      CANCEL_DISPLAY    = 'X'
    IMPORTING
      "選擇返回1:按鈕1;2:按鈕2;A:cancel按鈕
      ANSWER            = ANSWER.
  IF SY-SUBRC <> 0.
    MESSAGE s000 WITH 'error'.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

示例2:POPUP_TO_DECIDE_WITH_MESSAGE函數使用

FORM spo2_pop2.
  "do not use
  "接收選擇結果
  DATA:ANSWER(1) TYPE C.
  "顯示彈窗
  CALL FUNCTION 'POPUP_TO_DECIDE_WITH_MESSAGE'
    EXPORTING
      "默認按鈕
      DEFAULTOPTION           = '1'
      "diagno文本,必須有一個
      DIAGNOSETEXT1           = 'dia1'
*      DIAGNOSETEXT2           = 'dia2'
*      DIAGNOSETEXT3           = 'dia3'
      "text文本行,至少有一個
      TEXTLINE1               = 'text1'
*      TEXTLINE2               = 'text2'
*      TEXTLINE3               = 'text3'
      "按鈕文本
      TEXT_OPTION1            = 'yes'
      TEXT_OPTION2            = 'no'
      "按鈕圖標
*       ICON_TEXT_OPTION1       =
*       ICON_TEXT_OPTION2       =
      "標題
      TITEL                   = 'title'
      START_COLUMN            = 25
      START_ROW               = 6
      CANCEL_DISPLAY          = 'X'
     IMPORTING
      ANSWER                  = answer.
  IF SY-SUBRC <> 0.
    MESSAGE s000 WITH 'error'.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

 

3.SPO4類型

        接收用戶輸入信息彈窗。

示例1:使用POPUP_GET_VALUES函數

使用table類型參數fields結構:

 

tabname:接收值所在數據庫表名

fieldname:字段名

value:值,用戶輸入或預設

field_obl:是否必輸欄位

fieldtext:欄位文本

"顯示輸入值彈窗
FORM spo4_pop.
  "接收值的字段
  DATA:fileds TYPE TABLE OF sval WITH HEADER LINE.
  DATA:retcode(1) TYPE C.

  "設置字段
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CARRID'.
  fileds-value = '02'.
*  fileds-fieldtext = '航班id'.
  APPEND fileds.
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CONNID'.
  fileds-field_obl =  'X'.
  APPEND fileds.

  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
      "是否值檢查
      NO_VALUE_CHECK        = ''
      "標題
      POPUP_TITLE           = 'title'
      "設置位置
      START_COLUMN          = '5'
      START_ROW             = '5'
    IMPORTING
      "點擊cancel,返回A
      RETURNCODE            = retcode
    TABLES
      "接收值的字段內表
      FIELDS                =  fileds.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH retcode.
  ELSE.
    MESSAGE s000 WITH retcode.
    LOOP AT fileds.
      WRITE: / fileds-fieldname,fileds-value.
    ENDLOOP.
  ENDIF.
ENDFORM.
View Code

示例2:POPUP_GET_VALUES_DB_CHECKED函數,填寫數據會驗證是否在數據庫中存在

FORM spo4_pop1.
  "接收值的字段
  DATA:fileds TYPE TABLE OF sval WITH HEADER LINE.
  DATA:retcode(1) TYPE C.
   "設置字段
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CARRID'.
  APPEND fileds.
  CALL FUNCTION 'POPUP_GET_VALUES_DB_CHECKED'
    EXPORTING
      "是否檢查填寫數據是否存在
      CHECK_EXISTENCE       = 'X'
      "title
      POPUP_TITLE           = 'title'
      "位置設置
      START_COLUMN          = '5'
      START_ROW             = '5'
    IMPORTING
      RETURNCODE            = retcode
    TABLES
      FIELDS                = fileds.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH retcode.
  ELSE.
    MESSAGE s000 WITH retcode.
    LOOP AT fileds.
      WRITE: / fileds-fieldname,fileds-value.
    ENDLOOP.
  ENDIF.
ENDFORM.
View Code

示例3:POPUP_GET_VALUES_USER_CHECKED函數,可以執行額外程序的子form程序,做欄位輸入檢查

FORM spo4_pop2.
  "接收值的字段
  DATA:fileds TYPE TABLE OF sval WITH HEADER LINE.
  DATA:retcode(1) TYPE C.
  "設置字段
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CARRID'.
  APPEND fileds.
  "彈窗獲取輸入值執行額外form
  CALL FUNCTION 'POPUP_GET_VALUES_USER_CHECKED'
    EXPORTING      "執行的form名
      FORMNAME                  = 'CHECK_EXIT'
      POPUP_TITLE               = 'title'
              "form所在program名
      PROGRAMNAME               = 'TEST_POPUP'
              "開始行列
      START_COLUMN              = '5'
      START_ROW                 = '5'
          "???
      NO_CHECK_FOR_FIXED_VALUES = ''
    IMPORTING
      RETURNCODE                = retcode
    TABLES
      FIELDS                    = fileds.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH retcode.
  ELSE.
    MESSAGE s000 WITH retcode.
  ENDIF.
ENDFORM.

"執行用戶自定義檢查邏輯,當error有值,顯示info彈窗
FORM check_exit TABLES fileds STRUCTURE sval
                  CHANGING error  STRUCTURE svale.
  LOOP AT fileds.
    "自定義檢查是否數據庫存在
    SELECT SINGLE * FROM SPFLI WHERE CARRID = fileds-value.
    IF sy-subrc <> 0.
      "數據庫表
      ERROR-ERRORTAB   = 'SPFLI'.
      "檢查字段
      ERROR-ERRORFIELD = 'CARRID'.
      "package:SZP下message classes中可以找到對應值
      ERROR-MSGTY      = 'I'.
      ERROR-MSGID      = 'S4'.
      ERROR-MSGNO      = '510'.
    ENDIF.
  ENDLOOP.
ENDFORM.
View Code

示例4:POPUP_GET_VALUES_USER_HELP函數,可以執行額外程序的子form程序,做欄位輸入檢查,自定義f1,f4幫助

FORM spo4_pop3.
  "接收值的字段
  DATA:fileds TYPE TABLE OF sval WITH HEADER LINE.
  DATA:retcode(1) TYPE C.
  "設置字段
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CARRID'.
  APPEND fileds.
  CALL FUNCTION 'POPUP_GET_VALUES_USER_HELP'
    EXPORTING
      "F1幫助from名
      F1_FORMNAME                     = 'F1_HELP'
      "F1幫助form所在program
      F1_PROGRAMNAME                  = 'TEST_POPUP'
      "F4幫助form名
      F4_FORMNAME                     = 'F4_HELP'
      "F4幫助所在program
      F4_PROGRAMNAME                  = 'Z_TEST_POPUP'
      "自定義檢查form名
*     FORMNAME                        = ' '
      POPUP_TITLE                     = 'title'
      "自定義檢查form所在program
*     PROGRAMNAME                     = ' '
      "設置顯示位置
*     START_COLUMN                    = '5'
*     START_ROW                       = '5'
*     NO_CHECK_FOR_FIXED_VALUES       = ' '
    IMPORTING
      RETURNCODE                      = retcode
    TABLES
      FIELDS                          = fileds.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH retcode.
  ELSE.
    MESSAGE s000 WITH retcode.
  ENDIF.
ENDFORM.

FORM f1_help USING TABNAME FIELDNAME.
  MESSAGE s000 WITH TABNAME FIELDNAME 'no f1 help'.
ENDFORM.

"F4幫助邏輯
FORM f4_help USING TABNAME FIELDNAME DISPLAY
             CHANGING  RETURNCODE VALUE.
  DATA: BEGIN OF F_TAB OCCURS 10.
          INCLUDE STRUCTURE HELP_VALUE.
  DATA: END OF F_TAB,
        BEGIN OF V_TAB OCCURS 200,
          VALUE(40) TYPE C,
        END OF V_TAB.

  "字段表
  F_TAB-TABNAME    = 'SPFLI'.
  F_TAB-FIELDNAME  = 'CARRID'.
  F_TAB-SELECTFLAG = 'X'.
  APPEND F_TAB.
  "填充值
  SELECT * FROM SPFLI.
    V_TAB = SPFLI-CARRID.
    APPEND V_TAB.
  ENDSELECT.
  "顯示獲取到的值
  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
    EXPORTING
*     CUCOL                               = 0
*     CUROW                               = 0
     DISPLAY                             = DISPLAY
     FIELDNAME                           = FIELDNAME
     TABNAME                             = TABNAME
*     NO_MARKING_OF_CHECKVALUE            = ' '
*     TITLE_IN_VALUES_LIST                = ' '
*     TITEL                               = ' '
*     SHOW_ALL_VALUES_AT_FIRST_TIME       = ' '
*     NO_CONVERSION                       = ' '
    IMPORTING
      SELECT_VALUE                        = VALUE
    TABLES
      FIELDS                              = F_TAB
      VALUETAB                            = V_TAB.
ENDFORM.
View Code

示例5:POPUP_GET_VALUES_USER_BUTTONS函數,可以執行額外程序的子form程序,自定義f1,f4幫助,多兩個功能按鈕執行額外邏輯

FORM spo4_pop4.
  "接收值的字段
  DATA:fileds TYPE TABLE OF sval WITH HEADER LINE.
  DATA:retcode(1) TYPE C.
  DATA:ICON_OK_PUSH LIKE ICON-NAME VALUE ICON_OKAY.
  DATA:ICON_CREATE_PUSH LIKE ICON-NAME VALUE ICON_CREATE.
  DATA:ICON_SEARCH_PUSH LIKE ICON-NAME VALUE ICON_SEARCH.
  "設置字段
  CLEAR fileds.
  fileds-tabname = 'SPFLI'.
  fileds-fieldname = 'CARRID'.
  APPEND fileds.
  CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS'
    EXPORTING
      "F1幫助from名,form所在program名
*     F1_FORMNAME                     = ' '
*     F1_PROGRAMNAME                  = ' '
      "F4幫助from名,form所在program名
*     F4_FORMNAME                     = ' '
*     F4_PROGRAMNAME                  = ' '
      "用戶點擊按鈕響應form,form所在program名
      FORMNAME                        = 'USER_CODE'
      PROGRAMNAME                     = 'Z_TEST_POPUP'
      "title
      POPUP_TITLE                     = 'title'
      "ok按鈕文本,圖標及提示
      OK_PUSHBUTTONTEXT               = 'ok'
      ICON_OK_PUSH                    = ICON_OK_PUSH
      QUICKINFO_OK_PUSH               = 'ok'
      "按鈕1文本,圖標及提示
      FIRST_PUSHBUTTON                = 'creat'
      ICON_BUTTON_1                   = ICON_CREATE_PUSH
      QUICKINFO_BUTTON_1              = 'creat something'
      "按鈕2文本,圖標及提示
      SECOND_PUSHBUTTON               = 'seach'
      ICON_BUTTON_2                   = ICON_SEARCH_PUSH
      QUICKINFO_BUTTON_2              = 'search something'
*     START_COLUMN                    = '5'
*     START_ROW                       = '5'
*     NO_CHECK_FOR_FIXED_VALUES       = ' '
    IMPORTING
      RETURNCODE                      = retcode
    TABLES
      FIELDS                          = fileds
*   EXCEPTIONS
*     ERROR_IN_FIELDS                 = 1
*     OTHERS                          = 2
            .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH retcode.
  ELSE.
    MESSAGE s000 WITH retcode.
  ENDIF.
ENDFORM.

"響應用戶選點擊按鈕
FORM USER_CODE TABLES   FIELDS STRUCTURE SVAL
               USING    CODE
               CHANGING ERROR  STRUCTURE SVALE SHOW_POPUP.
   CASE CODE.
    "點擊ok按鈕
    WHEN 'FURT'.
      MESSAGE s000 WITH 'button ok' code.
      "按鈕響應后,是否彈窗繼續顯示,為空直接關閉,為X不不關閉
      SHOW_POPUP = ''.
    "點擊button1
    WHEN 'COD1'.
      MESSAGE s000 WITH 'button1' code.
      SHOW_POPUP = 'X'.
    "點擊button2
    WHEN 'COD2'.
      MESSAGE s000 WITH 'button2' code.
      SHOW_POPUP = 'X'.
  ENDCASE.
ENDFORM.
View Code

4.SPO5類型

示例1:POPUP_TO_DECIDE_LIST函數,顯示彈窗包含一個選項表,供用戶選擇,單選或多選。

FORM spo5_pop.
  "選擇列表
  DATA:   t_selist LIKE SPOPLI OCCURS 5 WITH HEADER LINE.
  DATA:   answer TYPE C.
  "選擇標志
  t_selist-SELFLAG = 'X'.
  "選項
  t_selist-VAROPTION = '選項1'.
  "INACTIVE字段控制是否不可選
*  t_selist-INACTIVE = 'X'.
  APPEND t_selist.
  t_selist-SELFLAG = ''.
  t_selist-VAROPTION = '選項2'.
  APPEND t_selist.
  "顯示一個選擇列表
  CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
    EXPORTING
      "光標所在選項行
      CURSORLINE   = 1
      "單選按鈕,多選框
      "MARK_FLAG不設置,MARK_MAX = 1單選
      "MARK_FLAG="X",MARK_MAX = 0 多選checkbox
*      MARK_FLAG    = 'X'
      MARK_MAX     = 1
      "設置彈窗位置
*     START_COL    = 0
*     START_ROW    = 0
      TEXTLINE1    = 'text1'
      TEXTLINE2    = 'text2'
      TEXTLINE3    = 'text3'
      "title
      TITEL        = 'title'
      "僅顯示
*      DISPLAY_ONLY = 'X'
    IMPORTING
      ANSWER       = answer
    TABLES
      T_SPOPLI     = t_selist.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH answer.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

5.SPO6類型

示例1:POPUP_DISPLAY_TEXT函數,顯示se61創建文本

FORM spo6_pop.
  DATA: CANCELLED(1) TYPE C.
  "顯示文本text,只能是se61創建text
  CALL FUNCTION 'POPUP_DISPLAY_TEXT'
    EXPORTING
      "語言
*      LANGUAGE             = SY-LANGU
      "標題
      POPUP_TITLE          = 'title'
      "位置
*     START_COLUMN         = 10
*     START_ROW            = 3
      "文本對象,se61,dialog text類型創建
      TEXT_OBJECT          = 'SPO_EXAMPLE_1'
      "helpmodal
*     HELP_MODAL           = 'X'
    IMPORTING
      CANCELLED            = CANCELLED.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH CANCELLED.
  ELSE.
    MESSAGE s000 WITH CANCELLED.
  ENDIF.

  "POPUP_DISPLAY_TEXT_WITH_PARAMS函數
  "text_objext = 'SPO_EXAMPLE_2',可以在se61中找到,參數名規則:"&參數名&"
  "定義參數表,可以在文本中插入參數
  "DATA:params LIKE SPAR OCCURS 0 WITH HEADER LINE.
  "PARAM字段:參數名;VALUE字段:參數值

ENDFORM.
View Code

示例2:POPUP_DISPLAY_TEXT函數,顯示se61創建文本,顯示自定義按鈕button

FORM spo6_pop1.
  DATA:params LIKE SPAR OCCURS 0 WITH HEADER LINE.
  DATA:USER_BUTTONS LIKE SMP_DYNTXT OCCURS 0 WITH HEADER LINE.
  DATA:answer LIKE RSNEWLENG-FCODE.
  params-PARAM = 'V1'.
  params-VALUE = '參數1'.
  APPEND params.
  "設置自定義按鈕
  USER_BUTTONS-TEXT      = 'tips1'.
  USER_BUTTONS-ICON_ID   = ICON_CLOSE.
  USER_BUTTONS-ICON_TEXT = 'exit'.
  APPEND USER_BUTTONS.
  CALL FUNCTION 'POPUP_DISPLAY_TEXT_USER_BUTTON'
    EXPORTING
      "語言
*     LANGUAGE                    = SY-LANGU
      "title
      POPUP_TITLE                 = 'title'
      "位置
*     START_COLUMN                = 5
*     START_ROW                   = 5
*     DOCU_CLASS                  = 'DT'
      "文本對象,se61建立dialog text類型創建
      TEXT_OBJECT                 = 'SPO_EXAMPLE_2'
      "是否顯示ok,cancel按鈕
      DISPLAY_OK_BUTTON           = 'X'
      DISPLAY_CANCEL_BUTTON       = 'X'
    IMPORTING
      ANSWER                      = answer
    TABLES
      "用戶自定義按鈕
      USER_BUTTONS                = USER_BUTTONS
      PARAMETER                   = params.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    MESSAGE s000 WITH answer.
  ELSE.
    MESSAGE s000 WITH answer.
  ENDIF.
ENDFORM.
View Code

 


免責聲明!

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



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