一, 屏幕基本元素(單值輸入框,RANGE輸入,單選按鈕,複選框定義)
TABLES: SFLIGHT.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
PARAMETERS: P_CARRID LIKE SFLIGHT-CARRID ." 單值輸入框
SELECT-OPTIONS: "定義RANGE輸入
S_CARRID FOR SFLIGHT-CARRID ,
S_CONNID FOR SFLIGHT-CONNID ,
S_1 FOR SCARR-CARRID DEFAULT 'AA' TO 'AZ' OPTION BT SIGN E . "設置默認值
SELECTION-SCREEN SKIP 1. "屏幕換行
PARAMETERS: PR_01 RADIOBUTTON GROUP gp1 DEFAULT 'X', "定義RADIOBUTTON
PR_02 RADIOBUTTON GROUP gp1.
PARAMETERS: p_old TYPE c AS CHECKBOX. "定義複選框
SELECTION-SCREEN ULINE.
SELECTION-SCREEN SKIP 1. "屏幕換行
SELECTION-SCREEN COMMENT 1(65) TEXT-T02 ."屏幕上輸出文本
SELECTION-SCREEN SKIP 1. "屏幕換行
SELECTION-SCREEN PUSHBUTTON 30(10) PHB_01 USER-COMMAND PB1 . "添加按鈕
SELECTION-SCREEN END OF BLOCK bk1.
DEFAULT 'A' | 設置初始值 | ||
LENGTH N | 定義長度,只適用於C,N,X,P | ||
DECIMALS des | 指定小數點位數 | ||
MEMORY ID pid | 指定SAP內存參數ID | ||
MATCHCODE OBJECT mobj | 設定使用的Search Help (SE11 中定義搜索幫助) | ||
MODIF ID | 通過screen-group1爲屏幕元素分組 | ||
NO-DISPLAY | 不顯示在畫面上 | ||
LOWER CASE | 區分大小寫(默認大寫) |
DEFAULT 'A' | 始值初始值 |
DEFAULT g... OPTION op... SIGN s | 設置初始的option和sign |
DEFAULT g TO h |
設置初始的LOW值和HIGH值 ,SIGN爲 ‘BT’ |
DEFAULT g TO h OPTION op... SIGN s | 設置初始的OPTION,SIGN, LOW值和HIGH值 ,SIGN只能爲BT 或 NB |
MEMORY ID pid | 指定SAP內存參數ID |
MATCHCODE OBJECT mobj | 設定使用的Search Help |
OBLIGATORY | 設定必輸項,畫面上顯示?,不輸入時自動報錯 |
VISIBLE LENGTH vlen | 設置顯示長度 |
NO-EXTENSION | 隱藏多指輸入按鈕 |
NO INTERVALS | 隱藏HIGH 輸入部分 |
1.2 添加 FUNCTION KEY .
TABLES: SSCRFIELDS .
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 3.
DATA LS_DYNTXT TYPE SMP_DYNTXT .
CLEAR LS_DYNTXT .
LS_DYNTXT-ICON_ID = ICON_CREATE .
LS_DYNTXT-QUICKINFO = 'CREATE' .
SSCRFIELDS-FUNCTXT_02 = LS_DYNTXT .
CLEAR LS_DYNTXT .
LS_DYNTXT-ICON_ID = ICON_DISPLAY .
LS_DYNTXT-QUICKINFO = 'DISPLAY' .
SSCRFIELDS-FUNCTXT_02 = LS_DYNTXT .
CLEAR LS_DYNTXT .
LS_DYNTXT-ICON_ID = ICON_DELETE .
LS_DYNTXT-QUICKINFO = 'DELETE' .
SSCRFIELDS-FUNCTXT_02 = LS_DYNTXT .
二,SELECTION-SCREEN BEGIN OF LINE 應用, 將多個參數組合後顯示在一行中,在行組中不能使用SELECT-OPTIONS, SELECTION-SCREEN SKIP N 語句
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_BOX AS CHECKBOX.
"指定關於參數的描述 SELECTION-SCREEN COMMENT fmt name
SELECTION-SCREEN COMMENT 5(29) text-001.
PARAMETERS: P_TEXT TYPE string.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE. "list 帶描述
SELECTION-SCREEN COMMENT 1(31) TEXT-L01 FOR FIELD P_LIST.
PARAMETERS: P_LIST TYPE T001-BUKRS AS LISTBOX VISIBLE LENGTH 10 USER-COMMAND LS1.
PARAMETERS: P_BUTXT TYPE T001-BUTXT.
SELECTION-SCREEN END OF LINE.
SELECT SINGLE BUTXT FROM T001 INTO P_BUTXT WHERE BUKRS = P_LIST .
爲下拉框賦值 CALL FUNCTION 'VRM_SET_VALUES'
TYPE-POOLS VRM.
DATA: VID TYPE VRM_ID VALUE 'xxx', "下拉框的名稱
VLIST TYPE VRM_VALUES,
VALUES LIKE LINE OF VLIST.
SELECT ZKEY AS KEY
TEXT
FROM ZSTU_SALARY
INTO CORRESPONDING FIELDS OF TABLE VLIST[]
ORDER BY KEY
.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = VID
VALUES = VLIST
EXCEPTIONS
ID_ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE '下拉框出錯,請聯繫管理員!' TYPE 'I' DISPLAY LIKE 'S'.
ENDIF.
三, 動態修改選擇屏幕
3.1 SCRENN 參數
選擇屏幕、對話屏幕都有對應的SCREEN內表,下面是幾個重要屬性:
Name : Name of the screen field。如果參數是select-options類型參數,則參數名以LOW與HIGH後綴來區分。
GROUP: 選擇屏幕元素通過MODIF ID 選項設置GROUP1(對話屏幕通過屬性設置),將屏幕元素分爲一組,方便屏幕的元素的批量修改
REQUIRED:控制文本框、下拉列表屏幕元素的必輸性,使用此屬性後會忽略OBLIGATORY選項。取值如下:
0:不必輸,框中前面也沒有鉤
1:必輸,框中前面有鉤,系統會自動檢驗是否已輸入,相當於OBLIGATORY選項
2:不必輸,但框中前面有鉤,系統不會檢查是否已輸入,此時需要手動檢驗INPUT:控制屏幕元素(包括複選框、單選框、文本框)的可輸性
ACTIVE:控制屏幕元素的可見性
3.2 屏幕假必輸,將輸入框的REQUIRED屬性設置爲2(顯示必須的鉤,但系統不會自動進行必輸驗證),去掉OBLIGATORY選 項(不去掉也會被忽略),並在AT SELECTION-SCREEN ON field事件裏時手動進行爲空驗證
PARAMETERS P_INPUT(128) MODIF ID mxy .
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN .
"的必輸性:外觀上打鉤,但不自動校驗
IF screen-group1 = 'MXY'.
screen-required = '2'."外觀上打鉤,但不自動校驗
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN ON P_INPUT.
IF P_INPUT IS INITIAL
MESSAGE e055(00).
ENDIF.
3.3 屏幕隱藏字段
PARAMETERS: RB_01 RADIOBUTTON GROP G1 USER-COMMAND RA1,
RB_02 RADIOBUTTON GROP G1 .
LOOP AT SCREEN .
CASE 'X' .
WHEN RB_01 .
IF SCREEN-GROUP1 = '***'
SCREEN-ACTIVE = 1 .
MODIFY SCREEN .
ENDIF.
WHEN RB_02 .
IF SCREEN-GROUP1 = '***'
SCREEN-ACTIVE = 0 .
MODIFY SCREEN .
ENDIF.
ENDLOOP.
四, 屏幕事件
INITIALIZATION "初始化屏幕字段(SET TITLEBAR ,GUI STATUS, SET PF-STATUS),主要用於顯示SELECTION-SCREEN之前
AT SELECTION-SCREEN " 屏幕跳出之前
START-OF-SELECTION "取數據
END-OF-SELECTION "展示數據
TOP-OF-PAGE "普通報表輸出頁頭
END-OF-PAGE "普通報表輸出頁尾
AT SELECTION-SCREEN(類似一個FORM),在屏幕中INPUT FIELD的值有變更時執行的事件,例如CHECKBOX的選擇與否,RADIOBUTTON的選擇,LISTBOX的選擇等等。
所以分爲以下幾個方面:
1. ... ON field :對SELECTION SCREEN具體的字段進行校驗,若錯誤則重新輸入,其他字段變灰
2. ... ON END OF sel :SELECT-OPTION觸發的事件,用於整個選擇表輸入結束後各行的檢查
3. ... OUTPUT :設置屏幕上畫面佈局
4. ... ON HELP-REQUEST FOR psel_low_high :當光標位於某屏幕字段時,選擇的幫助(F1)
5. ... ON RADIOBUTTON GROUP radi :單選按鈕事件,必須進行整體輸入檢查
6. ... ON BLOCK block :抑制塊內輸入值
7. ... ON VALUE-REQUEST FOR psel_low_high :當光標位於某屏幕字段時,選擇的幫助(F4)