电竞比分网-中国电竞赛事及体育赛事平台

分享

選擇屏幕開發(fā).

 細(xì)想生活 2014-12-15
    用戶通過屏幕操作來實現(xiàn)與SAP數(shù)據(jù)的交互, 而SAP的屏幕開發(fā)一般分為兩種:
第一種是通過SAP ABAP 語法創(chuàng)建屏幕元素, 稱之為選擇屏幕.
第二種是通過SAP的屏幕編輯器開發(fā).

1. 屏幕元素創(chuàng)建的語法.
SELECT-OPTIONS: 對象名稱 FOR 參考對象.
PARAMETERS:     對象名 TYPE/LIKE 參考對象.

例如:
TABLES: mara.
SELECT-OPTIONS: s_matnr for mara-matnr.
PARAMETERS:     s_matnr like mara-matnr.
PARAMETERS:     s_matnr type matnr.

SELECT-OPTIONS 在程序中生成一個含有四個組件的內(nèi)表---選擇表, 該表具體格式如下:
DATA: BEGIN OF seltab OCCURS 0,
        SING(1),
        OPTION(2),
        LOW LIKE f,
        HIGH LIKE F,
ENND OF seltab.

SIGN 是標(biāo)志位, 允許值為 I 和 E, 其意義為確定儲存在字段 OPTION 中的運(yùn)算符是否需要取反, I 表示"包含", E 表示"排除", 等于在邏輯表達(dá)式中加一個NOT.
OPTION 包含選擇運(yùn)算符. 如果 HIGH 字段為空, 則可以填充 EQ(=), NE(<>), GT(>), GE(>=), LT(<), LE(<=), CP, NP. 其中 CP 和 NP 只有當(dāng)在輸入字段中使用了通配符("*"或"+")時它們才有效. 
如果 HIGH 字段不為空, 則可以使用 BT (位于) 和 NB(不位于), 其功能相當(dāng)于 BETWEEN 和 NOT BETWEEN.

選擇表可以進(jìn)行多行選擇標(biāo)準(zhǔn)的設(shè)定.
基本規(guī)則是: 如果選擇表為空, 則選擇所有的數(shù)據(jù); 如果選擇表有多行, 則將所有的 SIGN 為 "I" 數(shù)據(jù)選出后, 再排除掉其中所有的滿足標(biāo)志為 "E" 的數(shù)據(jù)行. 具體規(guī)則如下:
  • 如果選擇表為空, 即用戶未輸入任何數(shù)據(jù), 則條件 f IN seltab 恒為真.
  • 如果選擇表中只包含 SIGN 為 I 的行 "i1" ... , "in", 則相當(dāng)于條件( i1 OR ... OR in ) 的組合.
  • 如果選擇表中只包含 SIGN 為 E 的行 "e1" ... , "em", 則相當(dāng)于條件( NOT e1 ) AND ... AND ( NOT em) 的組合.
  • 如果選擇表中即包含 SIGN 為 I 的行 "i1" ... , "in", 又包含 SIGN 為 E 的行 "e1" ..., "em" ,則相當(dāng)于條件(i1 OR ... OR in ) AND ( NOT e1 ) AND ... AND ( NOT em) 的組合.

動態(tài)定義輸入域的參考對象.
DATA: name TYPE string.
SELECT-OPTIONS: s_name for (name).
AT SELECTION-SCREEN OUTPUT.
  name = 'MARA-MATNR'.

2. 屏幕輸入域顯示參數(shù)控制.
  • OBLIGATORY 必輸項控制.
  • NO-DISPLAY 顯示控制.
  • VISIBLE LENGTH vlen 顯示長度控制.
  • NO-EXTENSION 多行輸入控制. 限制 SELECT-OPTIONS 多行輸入.
  • NO-INTERVALS. 輸入范圍控制.
  • MODIFY ID modid 編輯組控制. 該參數(shù)可以將所定義的屏幕對象進(jìn)行分組, 以方便在程序運(yùn)行中對分組的對象屬性進(jìn)行統(tǒng)一修改及控制.
  • VALUE CHECK 進(jìn)行值檢查. 如果參數(shù)字段參照數(shù)據(jù)字典中的類型定義, 可以使用該選項檢查用戶輸入值是否符合該字段的約束表中的數(shù)據(jù)或者是否屬于數(shù)據(jù)字典中定義的值列表, 否則系統(tǒng)將給出錯誤消息.
  • MEMORY ID pid.
  • AS CHECKBOX. 創(chuàng)建復(fù)選框.
  • RADIOBUTTON GROUP radi. 創(chuàng)建單選按鈕組.
  • PARAMETERS <對象名> AS LISTBOX VISIBLE LENGTH vlen. 創(chuàng)建下拉列表.
SELECT-OPTIONS: p1 FOR mara-matnr MODIF ID g1,
                p2 FOR mara-matnr MODIF ID g1,
                p3 FOR mara-matnr MODIF ID g2,
                p4 FOR mara-matnr MODIF ID g2.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF NOT screen-group1 IS INITIAL.
      IF screen-group1 'G2'.
        screen-input 0.
        screen-invisible 0.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.
******************************************
下拉列表.
PARAMETER: p_lang(20) AS LISTBOX VISIBLE LENGTH 22.
AT SELECTION-SCREEN OUTPUT.
  PERFORM setlist.
FORM setlist .
  TYPE-POOLS vrm.
  DATA values TYPE vrm_values WITH HEADER LINE.
  values-key 'CHINESE'.
  values-text '中國人'.
  APPEND values.
  values-key 'AMERICAN'.
  values-text '美國人'.
  APPEND values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              'P_LANG'
      values          values[]
    EXCEPTIONS
      id_illegal_name 1
      OTHERS          2.
ENDFORM.

3. 輸入值的控制.
  • 控制輸入默認(rèn)值.  SELECT-OPTIONS, Default val1 [TO val2] [OPTION opt] [SIGN sgn].             
  • DEFAULT val1.    控制 PARAMETER 對象輸入的默認(rèn)值.
  • LOWER CASE 容許輸入小寫字母. SAP 所有屏幕字段輸入后都會將字母默認(rèn)轉(zhuǎn)換為大寫, 加上該參數(shù)后允許輸入小寫字母.
  • MATCHCODE OBJECT search_help. 為屏幕對象加上指定的 F4 幫助.
  • MEMORY ID pid 定義 SELECT-OPTIONS 內(nèi)存參數(shù). 可以將屏幕對象輸入的值保存到指定的內(nèi)在參數(shù)中, 通過 GET parameter 方法可以直接從內(nèi)存讀取該對象的值.
      DATA: s_date TYPE d.
      SELECT-OPTIONS: d1 FOR sy-datum MEMORY ID m1 NO INTERVALS.                       
      START-OF-SELECTION.
        GET PARAMETER ID 'M1' FIELD s_date.
        WRITE s_date.

4. 其它選擇屏幕元素.
  • SELECTION-SCREEN SKIP [n].  產(chǎn)生空行.
  • SELECTION-SCREEN ULINE [[/]jpos(len)]. 在選擇屏幕中給一行或幾行中的一部分加下劃線. 其中 "/" 用于換行控制.
  • SELECTION-SCREEN COMMENT [/]pos(len) comm [ FOR FIELD f].  如果使用 FOR FIELD f. 則該注釋分配給參數(shù)或選擇標(biāo)準(zhǔn)f. 如果用戶在該元素f的注釋上請求幫助(F1), 則系統(tǒng)顯示分配給字段f的幫助文本.  SELECTION-SCREEN COMMENT /1(20) text-t01.
  • 組合選擇屏幕元素. SELECTION-SCREEN BEGIN OF LINE.                                                               ..........                                                                                   SELECTION-SCREEN END OF LINE.
                        這些元素將出現(xiàn)在屏幕的同一行中.
      SELECTION-SCREEN BEGIN OF BLOCK block [WITH FRAME [TITLE title]] [NO INTERVALS].                   .........
      SELECTION-SCREEN END OF BLOCK block.

5. 屏幕對象的F1/F4輸入幫助功能.
   1). HELP-REQUEST [ FOR LOW|HIGH ]. 字段的 F1 幫助功能.
   當(dāng)在SAP選擇屏幕的字段中按下 F1 鍵時, 可以調(diào)用自定義的程序或系統(tǒng)幫助文件. F1 幫助可以通過 ABAP 事件 AT SELECTION-SCREEN 來控制, 在自定義程序中, 可以通過調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù) HELP_OBJECT_SHOW 或 HELP_OBJECT_SHOW_FOR_FIELD 來實現(xiàn). 

SELECT-OPTIONS: s_date FOR sy-datum.

AT SELECTION-SCREEN ON HELP-REQUEST FOR s_date-low.
  PERFORM show_f1.

FORM show_f1 .
  DATA: t_link LIKE STANDARD TABLE OF tline WITH HEADER LINE.
  CALL FUNCTION 'HELP_OBJECT_SHOW'
    EXPORTING
      dokclass                            'DE'
      doklangu                            sy-langu
      dokname                             'SYDATUM'
    TABLES
      links                               t_link .
ENDFORM. 

  2). VALUE-REQUEST [ FOR LOW|HIGH ]. 字段的 F4 鍵幫助.
在指定的字段按 F4 鍵時, 可以調(diào)用自定義的程序或系統(tǒng)幫助數(shù)據(jù). 也是通過 AT SELECTION-SCREEN 來調(diào)用. 與 F1 不同的是, F1 是進(jìn)行信息提示, 而 F4 是顯示填充值的列表. 可以調(diào)用 F4IF_FIELD_VALUE_REQUEST 參照某一個具體表字段來維護(hù) F4 幫助.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_date-low.
  PERFORM show_f4.
FORM show_f4 .
  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      tabname                   'SYST'      "參照表
      fieldname                 'DATUM'     "參照字段
      dynpprog                  sy-repid
      dynpnr                    sy-dynnr
      dynprofield               'S_DATE'.   "解發(fā)事件的屏幕對象名稱.
  IF sy-subrc <> 0.
Implement suitable error handling here
  ENDIF.  
ENDFORM. 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_file1.
  PERFORM get_file_name USING s_file1 'O'.
FORM get_file_name  USING  p_path LIKE rlgrap-filename  mode TYPE c.
  DATA tmp_filename LIKE rlgrap-filename.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         'D:\ '
      mask             ',*.*,*.*.'
      mode             mode
    IMPORTING
      filename         tmp_filename
    EXCEPTIONS
      inv_winsys       1
      no_batch         2
      selection_cancel 3
      selection_error  4
      OTHERS           5.
  IF sy-subrc 0.
    p_path tmp_filename.
  ENDIF.
ENDFORM. 

6. 在屏幕上輸出自定義文本及圖標(biāo).
TYPE-POOLS: icon.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (12) mytext.
PARAMETER: name LIKE sy-uname.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  CONCATENATE icon_manager '輸入人員編號' INTO mytext.

在文本元素中加入圖標(biāo).
每個圖標(biāo)都由一個兩位長度的代碼進(jìn)行標(biāo)識, 在字符前面加上 "@"符號表示對該圖標(biāo)進(jìn)行引用. 可以通過數(shù)據(jù)字典查看 TYPE Group: ICON, 通過 ICON NAME 尋找對應(yīng)的 ID 列. 或通過程序 RSTXICON 來查看SAP中所有圖標(biāo)及代碼的對應(yīng)關(guān)系列表.
選擇屏幕開發(fā).

選擇屏幕開發(fā).

7. 在屏幕中實現(xiàn)按鈕效果.
TYPE-POOLS: icon.
TABLES: sscrfields.  引用屏幕字段屬性
創(chuàng)建屏幕按鈕對象
SELECTION-SCREEN: PUSHBUTTON 2(10)  but1 USER-COMMAND cli1,
                  PUSHBUTTON 20(30) but2 USER-COMMAND cli2 VISIBLE LENGTH 10.
INITIALIZATION.
  CONCATENATE icon_message_information '按鈕1' INTO but1.
  CONCATENATE icon_message_information '按鈕2' INTO but2.
AT SELECTION-SCREEN.
  CASE sscrfields.    捕捉按鈕功能代碼, 也可以用 SY-UCOMM.
    WHEN 'CLI1'.
      MESSAGE '按鈕1事件' TYPE 'I'.
    WHEN 'CLI2'.
      MESSAGE '按鈕2事件' TYPE 'I'.
  ENDCASE.

8. 子屏幕的創(chuàng)建.
子屏幕分為兩種, 一種為 Include Screen, 可以通過 Report 端程序直接調(diào)用; 一種為 SubScreen, 需要通過 Screen Painter 所創(chuàng)建屏幕引用.
Include Screen 相關(guān)語法如下:

PARAMETERS: type as CHECKBOX.
CALL SELECTION-SCREEN 123 STARTING AT 10 10 ENDING AT 80 10.
SELECTION-SCREEN BEGIN OF SCREEN 123 as WINDOW TITLE text-t01.
PARAMETERS: matnr LIKE mara-matnr.
PARAMETERS: werks like marc-werks.
SELECTION-SCREEN END OF SCREEN 123.

9. 在工具欄上新增功能按鈕.
按鈕的定義保存在結(jié)構(gòu)體 SSCRFIELDS 中, n 為一個整數(shù)類型的序號, 例如當(dāng) n 等于1時, 按鈕的描述保存在字段 SSCRFIELDS-FUNCTXT_01 中, 按鈕的功能代碼將默認(rèn)賦值為 "FC01", 保存在字段 SSCRFIELDS-UCOMM 中.

TABLES: sscrfields.
PARAMETERS: parm LIKE mara-matnr.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.

INITIALIZATION.
  MOVE 'BUTTON1' TO sscrfields-functxt_01.
  MOVE 'BUTTON2' TO sscrfields-functxt_02.
  
AT SELECTION-SCREEN.
  IF SSCRFIELDS-UCOMM 'FC01'.
    MESSAGE '按鈕1事件' TYPE 'I'.
  ELSEIF SSCRFIELDS-UCOMM 'FC02'.
    MESSAGE '按鈕2事件' TYPE 'I'.
  ENDIF.

10. 在屏幕上創(chuàng)建頁簽.
SELECTION-SCREEN BEGIN OF TABBED BLOCK <block> FOR n lines.
每個頁簽都是由一個單獨(dú)的子屏幕控制, n 代表分頁控件的高度, 屏幕載入進(jìn)必須先通過 INITIALIZATION 事件對其屬性初始化.
TABLES: mara.
定義子屏幕 100
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: mat1 FOR mara-matnr NO INTERVALS.
SELECTION-SCREEN SKIP 1.
PARAMETERS: chk1 AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN END OF SCREEN 100.
定義子屏幕 200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
PARAMETERS: mat2 LIKE mara-matnr.
SELECTION-SCREEN END OF SCREEN 200.
定義一個TAB空間, 取名為MYTAB, 控件高為5, 共有兩個頁簽.
兩個頁簽的功能代碼分別為 PUSH1, PUSH2.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR LINES,
                     TAB (20) button1 USER-COMMAND push1,
                     TAB (20) button2 USER-COMMAND push2,
END OF BLOCK mytab.
為TAB控件分配初始化值.
INITIALIZATION.
  button1 text-010.
  button2 text-020.
  mytab-prog sy-repid.
  mytab-dynnr 100.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'PUSH1'.
      mytab-dynnr 100.
      mytab-activetab 'BUTTON1'.
    WHEN 'PUSH2'.
      mytab-dynnr 200.
      mytab-activetab 'BUTTON2'.
  ENDCASE.

屏幕元素屬性的控制.
屏幕中所有的對象都有獨(dú)立的屬性, 在SAP程序執(zhí)行中, 可以通過系統(tǒng)變量SCREEN來讀取每個屏幕對象的具體屬性, SCREEN是一個標(biāo)準(zhǔn)的結(jié)構(gòu)體, 其常用屬性及參數(shù)如下:
  • NAME: 屏幕對象的名稱.
  • INPUT: 設(shè)置屏幕輸入域?qū)ο蟛环裨试S輸入值( 0: 不可輸入, 1: 可輸入), 默認(rèn)值為 1.
  • INVISIBLE: 設(shè)置對象在輸出到屏幕后時是否可見, ( 0: 可見, 1: 不可見).
PARAMETERS: mat1 like mara-matnr.
INITIALIZATION.
  LOOP AT SCREEN.
    IF screen-name 'MAT1'.
      screen-input '0'.
      screen-invisible '0'.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

選擇屏幕事件.
選擇屏幕的處理也是通過事件驅(qū)動的, 這些事件是一些預(yù)定義的ABAP代碼塊. 選擇屏幕中不存在任何由程序員設(shè)定的流邏輯(普通屏幕的行為由流邏輯進(jìn)行控制), 取而代之的是在程序中定義一系列相關(guān)的事件塊, 由運(yùn)行環(huán)境在處理選擇屏幕的過程中觸發(fā). 選擇屏幕中各個事件在程序中出現(xiàn)的位置是任意的, 與其調(diào)用順序無關(guān). 選擇屏幕事件將出現(xiàn)在 INITIALIZATION 事件和 START-OF-SELECTION 事件中間; 對于使用 CALL SELECTION-SCREEN 調(diào)用的自定義選擇屏幕, 這些選擇屏幕將出現(xiàn)在當(dāng)前處理塊中.
所有的選擇屏幕事件都使用 AT SELECTION SCREEN 語句引導(dǎo).

INITIALIZATION 事件.
該事件在屏幕未顯示之前執(zhí)行, 對程序設(shè)置值及屏幕元素進(jìn)行初始化賦值.

TOP-OF-PAGE.
創(chuàng)建新的 Write List 時觸發(fā).

TOP-OF-PAGE DURING LINE-SELECTION.
An event block is triggered for the corresponding events during the creation of details lists.
You have to use system fields like sy-lsind to distinguish between the individual details lists.

START-OF-SELECTION 事件.
該事件由程序單擊執(zhí)行按鈕時觸發(fā).

END-OF-SELECTION 事件.
該事件應(yīng)用于所有數(shù)據(jù)處理完成, 即START-OF-SELECTION相關(guān)事件執(zhí)行完成,但輸出屏幕還未顯示之前.在實際開發(fā)中主要用于一些執(zhí)行結(jié)果的檢驗等, 其輸出數(shù)據(jù)疊加于同一輸出屏幕中.

AT SELECTION-SCREEN OUTPUT事件.
選擇屏幕的PBO事件, 在每次選擇屏幕被調(diào)用之前觸發(fā), 可以在其中進(jìn)行選擇屏幕輸出之前的準(zhǔn)備工作, 比如在程序中動態(tài)地對選擇屏幕元素的輸出屬性進(jìn)行修改.

AT SELECTION-SCREEN 事件.
是選擇屏幕的PAI事件, 在用戶輸入的所有數(shù)據(jù)都被傳輸?shù)匠绦蛑兄蟊挥|發(fā), 也是選擇屏幕中最后被觸發(fā)的事件. 在選擇屏幕中, 用戶回車, 選擇某GUI按鈕,功能鍵或者菜單鍵之后, 如果系統(tǒng)檢查無誤, 將觸發(fā)該事件.

AT SELECTION-SCREEN ON field 事件.
是針對選擇屏幕中某字段輸入的PAI事件, 當(dāng)該字段值被傳遞給程序時被觸發(fā), 可以應(yīng)用于該字段本身的正確性檢查, 如果系統(tǒng)提示錯誤, 則可以在該字段中重新輸入, 此時其它字段元素呈灰色, 不接受輸入.

AT SELECTION-SCREEN ON BLOCK block 事件.
是針對選擇屏幕某元素區(qū)域輸入的PAI事件, 當(dāng)該區(qū)域內(nèi)的所有字段的值被傳遞給程序時被觸發(fā), 可以應(yīng)用于該區(qū)域元素整體的正確性檢查.

AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
作為單選按鈕, 必須整體進(jìn)行輸入檢查, 不能單獨(dú)使用 ON field選項進(jìn)行.

AT SELECTION-SCREEN ON seltab.
AT SELECTION-SCREEN ON END OF seltab.
這兩個事件只有在使用多行選擇對話框時才可能被觸發(fā), 其中 ON seltab 用于用戶逐行輸入后的正確性檢查, 而 ON END OF seltab 用于整個選擇表輸入結(jié)束后各行的檢查.

AT SELECTION-SCREEN ON HELP-REQUEST FOR field.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR field.
選擇屏幕中的POH和POV事件, 當(dāng)光標(biāo)位于某屏幕字段時, 用戶按下F1和F4鍵, 將觸發(fā) ON HELP-REQUEST 和 
ON VLAUE-REQUEST事件.

AT LINE-SELECTION.
在 Write List 中雙擊某行觸發(fā).

屏幕事件的中止.
EXIT: 中止當(dāng)前事件模塊.
STOP: 強(qiáng)制中止所有事件.
REJECT: 應(yīng)用于讀取邏輯數(shù)據(jù)庫的程序.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多