PARAMETERS、SELECTION OPTIONS和SELECTION SCREEN的全部用法
(一)PARAMETERS:為變量定義輸入字段
1、PARAMETERS的全部用法:
P_BUDAT LIKE BKPF-BUDAT OBLIGATORY,P_CX AS CHECKBOX DEFAULT 'X',P_BUDAT LIKE BKPF-BUDAT NO DISPLAY,P_CX AS CHECKBOX,R1 RADIOBUTTON GROUP RAD1R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X'R3 RADIOBUTTON GROUP RAD2R4 RADIOBUTTON GROUP RAD2P1 MODIF ID SC1P2 MODIF ID SC1P3 MODIF ID SC2P4 MODIF ID SC2每種用法的解釋:
OBLIGATORY ?設(shè)定該項(xiàng)偉必輸項(xiàng)
CHECKBOX ? ? 設(shè)為打鉤的(復(fù)選框),如果沒有設(shè)定default的值,那么當(dāng)這個(gè)被勾上的時(shí)候才為X,有default的話,即默認(rèn)為勾上的。
NO DISPLAY ? ?設(shè)定該項(xiàng)為不顯示狀態(tài)。
RADIOBUTTON ? 設(shè)定單選,有default的,默認(rèn)這個(gè)是選上的,同一個(gè)RAD1和RAD2,每個(gè)RAD只能選一個(gè)值,選中則變量變?yōu)閄,如果沒有設(shè)定default,每個(gè)組的第一個(gè)參數(shù)將被激活并分配‘X’。
MODIF ID ? ? ? ? 將參數(shù)分配給修改組,通過在SELECTION-SCREEN ? OUTPUT事件中進(jìn)行處理:
AT SELECTION-SCREEN OUTPUT. ? ? ? ? ? ?結(jié)合上面的定義,P1和P2放在一組,P3和P4放在一組,然后P1和P2的INTENSIFIED字段被設(shè)為1,效果是高亮度,
LOOP AT SCREEN. 這個(gè)可以這樣使用。IF SCREEN-GROUP1 = 'SC1'SCREEN-INTENSIFIED = '1'.MODIFY SCREEN.ENDIF.ENDLOOP.還有一些不常用的例如: LOWER CASE,有這個(gè)lower case,系統(tǒng)就不會(huì)把輸入值更改為大寫。(還沒有使用過)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MEMORY-ID ? ? ? ?允許你從全局SAP內(nèi)存使用缺省值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MATCHCODE OBJECT ? ? ?匹配代碼對(duì)象,obj的名稱必須是4字符的變量名
(二)SELECT-OPTIONS:選擇表
? ? ? ? ? ? ? 1、SELECT-OPTIONS的全部用法:
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? DEFAULT .
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? DEFAULT ?A ? ?TO ? ?B .
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? OBLIGATORY .
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? ?NO DISPLAY .
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? NO-EXTENSION .
S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? NO-INTERVALS .
(三)SELECTION-SCREEN: ? ? 格式化選擇屏幕
? ? ? ? ? ? ? ? ?1、SELECTION-SCREEN 的全部使用方法:
SELECTION-SCREEN ?SKIP ? <N> ? ? ? ? ? ? ? ? 該語句產(chǎn)生N個(gè)空行,如果只產(chǎn)生一個(gè),可以省略<N>。
SELECTION-SCREEN ?ULINE ?<POS(LEN)> ?該語句創(chuàng)建下劃線,入過沒有POS(LEN),則在當(dāng)前下面創(chuàng)建新行。如果有POS(LEN),則從POS處開 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 始,連續(xù)<LEN>個(gè)字符。
SELECTION-SCREEN COMMENT ? ? ? ? ? ? ? ??用該選項(xiàng)是必須定義格式(例如選擇屏幕上的文字說明可以用這個(gè)語句)
SELECTION-SCREEN BEGIN OF LINE ? ? ? ? ?把選擇屏幕的幾個(gè)元素放在一行上。
SELECTION-SCREEN ?POSITION ?<POS> ? ?定位元素
SELECTION-SCREEN BEGIN OF BLOCK ? <block> ?創(chuàng)建元素塊,里面放選擇屏幕語句,block的名字可以在initialization里面維護(hù)。
SELECTION-SCREEN END OF BLOCK ? ?<block>
?SELECTION-SCREEN FUNCTION KEY <I> ??在選擇屏幕的應(yīng)用工具欄創(chuàng)建按鈕,I為1-5,最多只有5個(gè)按鈕。具體要怎么實(shí)現(xiàn),可以參考另一篇文章(給選擇屏幕添加按鈕)
SELECTION-SCREEN PUSHBUTTON <pos(len)> ?<name> ? ?USER-COMAND ? <ucom> ? [MODIF ID <keyt>] ??
在選擇屏幕上創(chuàng)建按鈕,其中<name >是按鈕的文本, <ucom>為輸入詞典字段SSCRFIELDS-UCOMM,必須使用TABLES語句聲明表SSCRFIELDS。
(四) INITIALIZATION : ? ? ? ? 用于屏幕初始化,例如屏幕的block的名字,屏幕默認(rèn)字段的一些初始值的填充,工具欄按鈕的一些字段的值的填充等等。
(五)?AT ? SELECTION-SCREEN ? OUTPUT?
這個(gè)就相當(dāng)于PBO的功能,可以對(duì)選擇屏幕字段進(jìn)行修改(前面也有說到一些功能要放到這里使用的),在選擇運(yùn)行程序的時(shí)候,選擇屏幕出來之前就先運(yùn)行這段,還有就是選擇屏幕輸入條件之后按下回車或者是執(zhí)行后,也會(huì)進(jìn)入這個(gè)event。
? ? ? ? ? ? ?例如可以判斷用戶名,然后選擇性的輸入一些選擇屏幕字段:
S_EBLEN FOR VBRK-EBLEN DEFAULT S_EBLEN FOR VBRK-EBLEN DEFAULT A TO B S_EBLEN FOR VBRK-EBLEN OBLIGATORY S_EBLEN FOR VBRK-EBLEN NO DISPLAY S_EBLEN FOR VBRK-EBLEN NO-EXTENSION S_EBLEN FOR VBRK-EBLEN NO-INTERVALS
DEFAULT ? ?OBLIGATORY ?NO-DISPLAY的功能和之前的PARAMETERS的一樣。
DEFAULT ? A ? TO ?B ? ?設(shè)置里面的LOW 和HIGH字段,例如我要設(shè)置默認(rèn)公司代碼從0001到0020。
? ? ? 選擇表的里面的字段有:SIGN ? ? ? OPTION ? ? LOW ? ? ?HIGH
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SIGN ? ? ? ?可以是I ?和 ? E ? ? I是包括, ? E是排除的意思
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OPTION ? 可以是:EQ ?NE ?GT ?LE ?LT ?CP ?NP ? ? 這個(gè)可以查看我的帖子(select-option作為select的條件使用)
? ? ? ? ? ? ? ? ? ? ? NO-EXTENSION,把選擇表限制在一行
? ? ? ? ? ? ? ? ? ? ? NO INTERVALS ,把選擇表限制偉單值選擇
(三)SELECTION-SCREEN: ? ? 格式化選擇屏幕
? ? ? ? ? ? ? ? ?1、SELECTION-SCREEN 的全部使用方法:
SELECTION-SCREEN ?SKIP ? <N> ? ? ? ? ? ? ? 該語句產(chǎn)生N個(gè)空行,如果只產(chǎn)生一個(gè),可以省略<N>。
SELECTION-SCREEN ?ULINE ?<POS(LEN)> ? ? ? ?該語句創(chuàng)建下劃線,入過沒有POS(LEN),則在當(dāng)前下面創(chuàng)建新行。如果有POS(LEN),則從POS處開始,連續(xù)<LEN>個(gè)字符。
SELECTION-SCREEN COMMENT ? ? ? ? ? ? ? ?用該選項(xiàng)是必須定義格式(例如選擇屏幕上的文字說明可以用這個(gè)語句)
SELECTION-SCREEN BEGIN OF LINE ? ? ? 把選擇屏幕的幾個(gè)元素放在一行上。
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN ?POSITION ?<POS> ? ? ? ? 定位元素
SELECTION-SCREEN BEGIN OF BLOCK ? <block> ? ?創(chuàng)建元素塊,里面放選擇屏幕語句,block的名字可以在initialization里面維護(hù)。
SELECTION-SCREEN END OF BLOCK ? ?<blokc>
SELECTION-SCREEN FUNCTION KEY <I> ? ? ? ? ? ? ? ? ? 在選擇屏幕的應(yīng)用工具欄創(chuàng)建按鈕,I為1-5,最多只有5個(gè)按鈕。具體要怎么實(shí)現(xiàn),可以參考另一篇文章(給選擇屏幕添加按鈕)
SELECTION-SCREEN PUSHBUTTON <pos(len)> ?<name> ? ?USER-COMAND ? <ucom> ? [MODIF ID <keyt>] ? ? ? ? ? ? ? ? ? ? ? ? 在選擇屏幕上創(chuàng)建按鈕,其中<name >是按鈕的文本, <ucom>為輸入詞典字段SSCRFIELDS-UCOMM,必須使用TABLES語句聲明表SSCRFIELDS。(后續(xù)有用到把具體例子貼上來)
(四) INITIALIZATION : ? ? ? ? 用于屏幕初始化,例如屏幕的block的名字,屏幕默認(rèn)字段的一些初始值的填充,工具欄按鈕的一些字段的值的填充等等。
(五) AT ? SELECTION-SCREEN ? OUTPUT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個(gè)就相當(dāng)于PBO的功能,可以對(duì)選擇屏幕字段進(jìn)行修改(前面也有說到一些功能要放到這里使用的),在選擇運(yùn)行程序的時(shí)候,選擇屏幕出來之前就先運(yùn)行這段,還有就是選擇屏幕輸入條件之后按下回車或者是執(zhí)行后,也會(huì)進(jìn)入這個(gè)event。
? ? ? ? ? ? ?例如可以判斷用戶名,然后選擇性的輸入一些選擇屏幕字段:
? ? ? ? ? ? ? ? ? ? ? at selection-screen output.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if sy-uname ne 'LIUJC_CN'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?loop at screen.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if screen-name+0(7) eq 'S_AUFNR' or
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-name+2(7) eq 'S_AUFNR'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-invisible = '1'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-active = '0'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? modify screen.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endif.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endloop.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endif.
?
? ? ? ? ? ? ? ? 例如可以判斷輸入的某個(gè)字段是某個(gè)值的時(shí)候添加屏幕字段(注意要按回車):
? ? ? ? ? ? ? ? 例如,當(dāng)我輸入company code為某個(gè)值的時(shí)候,我需要添加一個(gè)選擇字段以及部分check box。首先,這些要添加的選擇屏幕內(nèi)容都是一樣要預(yù)先設(shè)定好,然后通過at selection-screen output 設(shè)定好邏輯即可:
? ? ? ? ? ? ? ? 定義: ? ? ?s_bukrs1 FOR t001-bukrs NO INTERVALS MODIF ID m4.
? ? ? ? ? ? ? ? 邏輯: ? ? LOOP AT SCREEN. ? ? ? ? ? ? ? ? ? ? ? ? (這里可以用group,也可以用name。關(guān)于SCREEN的值如何去定義,參考本博客的另一篇文章:SCREEN的理解)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CASE screen-group1.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WITH 'M4'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IF 'SG01' IN s_bukrs.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MOVE '1' TO screen-active.
?(六) AT ?SELECTION-SCREEN ?ON ?VALUE-REQUEST ? FOR ? ?<NAME> ? ? ? 這個(gè)最常見的就是對(duì)upload文件的文件名進(jìn)行檢查的使用:
? ? ? ? ? ? ? ? ? ? ? ? ? AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?EXPORTING
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? field_name ? ?= 'C:\'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mask ? ? ? ? ?= ',Excel Files,*.xls,*.XLS,'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* ? ? ?STATIC ? ? ? ?= 'X'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CHANGING
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?file_name ? ? = filename
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? EXCEPTIONS
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mask_too_long = 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OTHERS ? ? ? ?= 2.
? ? ? ? ?(七) AT ?SELECTION-SCREEN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這個(gè)比較常用的是在工具欄里面添加了按鈕,然后對(duì)這個(gè)按鈕進(jìn)行操作。
? ? ? ? ? ? ? ? ? ? ? ? ? ?AT SELECTION-SCREEN.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CASE SSCRFIELDS-UCOMM.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHEN 'FC01'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PERFORM FRM_DOWNLOAD_DATA.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ENDCASE.
(八)選擇屏幕下拉菜單的實(shí)現(xiàn):
代碼如下:Post invoice的代碼如下:PARAMETERS: P_CHK1 AS CHECKBOX USER-COMMAND SELECT.SELECTION-SCREEN: COMMENT 3(12) TEXT-073 MODIF ID B4 .confirmed for的代碼如下:SELECTION-SCREEN: COMMENT 1(13) TEXT-053 FOR FIELD P_INFO MODIF ID B4.SELECTION-SCREEN: POSITION 14.PARAMETERS: P_INFO(2) TYPE C default '0' MODIF ID B4..SELECTION-SCREEN: COMMENT 19(4) TEXT-054 MODIF ID B4. (十)實(shí)現(xiàn)屏幕可以影藏部分選擇屏幕字段:
(十一)調(diào)用選擇屏幕
我們另外定義一個(gè)選擇屏幕500
? ?SELECTION-SCREEN BEGIN OF SCREEN 500.
? SELECTION-SCREEN BEGIN OF LINE.
? SELECT-OPTIONS:S_BUKRS6 FOR BKPF-BUKRS NO INTERVALS .
? SELECTION-SCREEN END OF LINE.
? SELECTION-SCREEN END OF SCREEN 500.
修改START-OF-SELECTION事件為:
? CALL SELECTION-SCREEN 500.
調(diào)用了這個(gè)選擇屏幕之后,點(diǎn)擊按鈕,這里不是用user_command或者是在屏幕500里面再去設(shè)一個(gè)module,直接在call selection-screen 500后面添加執(zhí)行代碼,當(dāng)輸入選擇屏幕只會(huì),點(diǎn)擊執(zhí)行就會(huì)執(zhí)行后面的代碼。
(十二)調(diào)用子屏幕call subscreen
(十三)選擇屏幕放多個(gè)tab:本例實(shí)現(xiàn)如上圖效果,示例代碼如下: REPORT Z_LPF_SCREEN_TAB. TABLES: MARA,SSCRFIELDS. selection-screen function key 1. SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.SELECT-OPTIONS:MAT1 FOR MARA-MATNR NO INTERVALS.SELECTION-SCREEN SKIP 1.PARAMETERS:CHK1 AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCK A1.SELECTION-SCREEN END OF SCREEN 100.SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.PARAMETERS: MAT2 LIKE MARA-MATNR.SELECTION-SCREEN END OF SCREEN 200.SELECTION-SCREEN: BEGIN OF TABBED BLOCK MYTAB FOR 5 LINES,TAB (20) BUTTON1 USER-COMMAND PUSH1,TAB (20) BUTTON2 USER-COMMAND PUSH2,END OF BLOCK MYTAB.INITIALIZATION.MOVE 'BUTTON' TO SSCRFIELDS-FUNCTXT_01.BUTTON1 = 'TAB1'.BUTTON2 = 'TAB2'.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'.WHEN OTHERS.ENDCASE. (十四)實(shí)現(xiàn)下面這個(gè)功能:
在AT SELECTION-SCREEN OUTPUT.加入這段代碼: CASE 'X'.WHEN R_RFC.SET_SCREEN 'MD1'. WHEN R_PROG.SET_SCREEN 'MD2'.WHEN R_JOB.SET_SCREEN 'MD3'.WHEN R_HTTP.SET_SCREEN 'MD4'.WHEN OTHERS.ENDCASE.其中MD1是這樣定義的: SELECT-OPTIONS :S_FUNC FOR ZRFCSRVR-FUNC_NAME NO INTERVALS MODIF ID MD1. (十五)跟上面這個(gè)類似的實(shí)現(xiàn):
總結(jié)
以上是生活随笔為你收集整理的PARAMETERS、SELECTION OPTIONS和SELECTION SCREEN的全部用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兰州大学计算机基础在线考试,[兰州大学]
- 下一篇: 谷歌招聘机制