ABAP中SELECTION-SCREEN用法
文章轉(zhuǎn)自 http://blog.csdn.net/wangjolly/article/details/10716015
SAP-ABAP SELECT-SCREEN 的幾個(gè)用法
實(shí)例1:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETER P_FLEX RADIOBUTTON GROUP ways TYPE c.
SELECTION-SCREEN COMMENT 3(20) text-s30 for field P_FLEX.
SELECTION-SCREEN COMMENT 25(10) text-s31 for field P_PAYM_B.
SELECTION-SCREEN POSITION 38.
PARAMETER P_PAYM_B LIKE PA0015-PABRP MODIF ID wty.
parameters P_PAYY_B LIKE PA0015-pabrj MODIF ID wty.
SELECTION-SCREEN POSITION 57.
SELECTION-SCREEN COMMENT 57(5) text-s32 for field P_PAYM_E.
parameters P_PAYM_E LIKE PA0015-pabrp MODIF ID wty.
parameters P_PAYY_E LIKE PA0015-pabrj MODIF ID wty.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 25.
SELECTION-SCREEN COMMENT 25(9) text-s18 for field S_LGART.
SELECT-OPTIONS S_LGART FOR p0014-LGART MODIF ID wty.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
本程序中涉及到幾個(gè)SELECTION-SCREEN的用法:
1 SELECTION-SCREEN BEGIN OF LINE. ....END OF LINE.
這條語(yǔ)句的作用是讓Begin of line 與End of line之間的部分位于同一行。
2 SELECTION-SCREEN POSITION XX.
這條語(yǔ)句的作用是將該語(yǔ)句后面的第一個(gè)Screen element定位在這一行的XX位置,最大值為79。值得注意的是,如果同一行中多個(gè)Position語(yǔ)句因?yàn)榭臻g不夠或Element所占空間重疊,將導(dǎo)致Screen創(chuàng)建時(shí)的錯(cuò)誤,無(wú)法激活。此時(shí)并無(wú)具體的提示。只能仔細(xì)觀(guān)察代碼。
3 SELECTION-SCREEN COMMENT XX(Y) TEXT-XXX FOR FIELD XXX.
這條語(yǔ)句的作用是在當(dāng)前行的指定列位置處輸出一段文本,For field則表示文本與某個(gè)element 關(guān)聯(lián),當(dāng)此語(yǔ)句使用時(shí),可以不必設(shè)定屏幕的Text element,系統(tǒng)會(huì)自動(dòng)關(guān)聯(lián)。XX表示位置,Y表示長(zhǎng)度,注意,如果長(zhǎng)度不足,超常的文字將被截掉。此處似乎還有一個(gè)小BUG,當(dāng)Y小于5時(shí),輸出的文字字體會(huì)變大一號(hào)。不知道為什么。
SELECTION-SCREEN COMMENT /10(30) comm1.
INITIALIZATION.
comm1 ='Auswahlknopfgruppe 1'.
4 SELECTION-SCREEN SKIP 1.
跳過(guò)一行。類(lèi)似于用WRITE寫(xiě)Report時(shí)的SKIP 1.也可以跳過(guò)多行。
以下是 屏幕上畫(huà)橫線(xiàn)
SELECTION-SCREEN ULINE /1(50).
5.內(nèi)存記憶 留有上次輸入過(guò)的記錄
parameters test(16) type c memory id rid.
6.檢查輸入值 如果不在表中 不用做代碼檢查了
PARAMETERS p_carr TYPE spfli-carrid OBLIGATORY VALUE CHECK.
7.復(fù)選框
PARAMETERS: a AS CHECKBOX,
b AS CHECKBOX DEFAULT 'X'.
8.單選框
PARAMETERS: r1 RADIOBUTTON GROUP rad1,
r2 RADIOBUTTON GROUP rad1 DEFAULT 'X',
r3 RADIOBUTTON GROUP rad1,
s1 RADIOBUTTON GROUP rad2,
s2 RADIOBUTTON GROUP rad2,
s3 RADIOBUTTON GROUP rad2 DEFAULT 'X'.
9.屏幕動(dòng)作變化 引起屏幕變化: modif id 起作用
舉例:
report a.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME title TEXT-003.
PARAMETERS:
P_1 TYPE C RADIOBUTTON GROUP DATE
DEFAULT 'X'
USER-COMMAND FLAG,"重要*
P_2 TYPE C RADIOBUTTON GROUP DATE,
P_3 TYPE C RADIOBUTTON GROUP DATE,
P_4 TYPE C RADIOBUTTON GROUP DATE
.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME title TEXT-004.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 6(10) TEXT-001.
PARAMETERS: GP_IPDAT TYPE SY-DATUM MODIF ID BL1, "重要*
GP_2 TYPE SY-DATUM MODIF ID BL2 . "重要*
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 8(60) TEXT-005,
END OF LINE,
BEGIN OF LINE,
COMMENT 8(60) TEXT-006,
END OF LINE.
SELECTION-SCREEN END OF BLOCK BL2.
"在A(yíng)T SELECTION-SCREEN中循環(huán)SCREEN系統(tǒng)變量,把需要修改的畫(huà)面元素的屬性進(jìn)行相應(yīng)的修改
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_1 = 'X' AND SCREEN-GROUP1 = 'BL1'.
SCREEN-INPUT = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_2 = 'X' AND SCREEN-GROUP1 = 'BL1'.
SCREEN-INPUT = '1'.
ENDIF.
IF P_3 = 'X' AND SCREEN-GROUP1 = 'BL2'.
SCREEN-ACTIVE = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_4 = 'X' AND SCREEN-GROUP1 = 'BL2'.
SCREEN-ACTIVE = '1'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
10.ranges 使用方法
ranges s_carrid1 for spfli-carrid.
s_carrid1-sign = 'I'.
s_carrid1-option = 'EQ'.
s_carrid1-low = 'LH'.
append s_carrid1.
11. options限制 輸入
SELECT-OPTIONS airline FOR wa_spfli-carrid NO INTERVALS
NO-EXTENSIONdefault g obligatory.”
12. 一行中的若干元素
DATA wa_spfli TYPE spfli.
SELECT-OPTIONS airline FOR wa_spfli-carrid.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION pos_high.
PARAMETERS field(5) TYPE c.
SELECTION-SCREEN END OF LINE.
13 屏幕元素事件 按鈕 及 new window USER-COMMAND
TABLES sscrfields.
DATA flag(1) TYPE c.
SELECTION-SCREEN:
BEGIN OF SCREEN 500 AS WINDOW TITLE tit,
BEGIN OF LINE,
PUSHBUTTON 2(10) but1 USER-COMMAND cli1,
PUSHBUTTON 12(10) text-020 USER-COMMAND cli2,
END OF LINE,
BEGIN OF LINE,
PUSHBUTTON 2(10) but3 USER-COMMAND cli3,
PUSHBUTTON 12(10) text-040 USER-COMMAND cli4,
END OF LINE,
END OF SCREEN 500.
AT SELECTION-SCREEN.
MESSAGE i888(sabapdocu) WITH text-001 sscrfields-ucomm.
CASE sscrfields-ucomm.
WHEN 'CLI1'.
flag = '1'.
WHEN 'CLI2'.
flag = '2'.
WHEN 'CLI3'.
flag = '3'.
WHEN 'CLI4'.
flag = '4'.
ENDCASE.
START-OF-SELECTION.
tit = 'Four Buttons'.
but1 = 'Button 1'.
but3 = 'Button 3'.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
CASE flag.
WHEN '1'.
WRITE / 'Button 1 was clicked'.
WHEN '2'.
WRITE / 'Button 2 was clicked'.
WHEN '3'.
WRITE / 'Button 3 was clicked'.
WHEN '4'.
WRITE / 'Button 4 was clicked'.
WHEN OTHERS.
WRITE / 'No Button was clicked'.
ENDCASE.
14 執(zhí)行按鈕旁邊加觸點(diǎn) 點(diǎn)擊改變屏幕
REPORT demo_sel_screen_function_key.
TABLES sscrfields.
PARAMETERS: p_carrid TYPE s_carr_id,
p_cityfr TYPE s_from_cit.
SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2. “此為兩個(gè)觸點(diǎn)定義
INITIALIZATION.
sscrfields-functxt_01 = 'LH'.
sscrfields-functxt_02 = 'UA'. ”此為兩個(gè)觸點(diǎn)的文本
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN'FC01'. “默認(rèn)的 返回key
p_carrid = 'LH'.
p_cityfr = 'Frankfurt'.
WHEN 'FC02'.
p_carrid = 'UA'.
p_cityfr = 'Chicago'.
ENDCASE.
START-OF-SELECTION.
WRITE / 'START-OF-SELECTION'.
15.關(guān)于修改 標(biāo)準(zhǔn)status (有待研究)
REPORT demo_sel_screen_status .
DATA itab TYPE TABLE OF sy-ucomm.
PARAMETERS test(10) TYPE c.
AT SELECTION-SCREEN OUTPUT.
APPEND: 'PRIN' TO itab,
'SPOS' TO itab.
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
TABLES
p_exclude = itab.
16.選擇屏幕 事件何時(shí)觸發(fā)(有待研究)實(shí)例2
REPORT demo_selection_screen_events MESSAGE-ID sabapdocu.
DATA field1(10) TYPE c.
SELECT-OPTIONS sel_opt1 FOR field1.
SELECTION-SCREEN BEGIN OF BLOCK block1.
PARAMETERS: test1(10) TYPE c,
test2(10) TYPE c.
SELECTION-SCREEN END OF BLOCK block1.
PARAMETERS: r1 RADIOBUTTON GROUP rad1 DEFAULT 'X',
r2 RADIOBUTTON GROUP rad1.
AT SELECTION-SCREEN.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'.
AT SELECTION-SCREEN OUTPUT.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'OUTPUT'.
AT SELECTION-SCREEN ON sel_opt1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON SEL_OPT1'.
AT SELECTION-SCREEN ON test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON TEST1'.
AT SELECTION-SCREEN ON test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON TEST2'.
AT SELECTION-SCREEN ON END OF sel_opt1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON END OF SEL_OPT1'.
AT SELECTION-SCREEN ON HELP-REQUEST FOR sel_opt1-low.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR SEL_OPT1-LOW'.
AT SELECTION-SCREEN ON HELP-REQUEST FOR sel_opt1-high.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR SEL_OPT1-HIGH'.
AT SELECTION-SCREEN ON HELP-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR TEST1'.
AT SELECTION-SCREEN ON HELP-REQUEST FOR test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON HELP-REQUEST FOR TEST2'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_opt1-low.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR SEL_OPT1-LOW'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_opt1-high.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR SEL_OPT1-HIGH'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR TEST1'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR test2.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON VALUE-REQUEST FOR TEST2'.
AT SELECTION-SCREEN ON BLOCK block1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON BLOCK BLOCK1'.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'ON RADIOBUTTON GROUP RAD1'.
?
?
?
?
?
選擇屏幕的開(kāi)發(fā)知識(shí)無(wú)非就是圍繞這3個(gè)點(diǎn):PARAMETERS SELECT-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 RAD1
R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X'
R3 RADIOBUTTON GROUP RAD2
R4 RADIOBUTTON GROUP RAD2
P1 MODIF ID SC1
P2 MODIF ID SC1
P3 MODIF ID SC2
P4 MODIF ID SC2
每種用法的解釋:
OBLIGATORY 設(shè)定該項(xiàng)偉必輸項(xiàng)
CHECKBOX 設(shè)為打鉤的(復(fù)選框),如果沒(méi)有設(shè)定default的值,那么當(dāng)這個(gè)被勾上的時(shí)候才為X,有default的話(huà),即默認(rèn)為勾上的。
NO DISPLAY 設(shè)定該項(xiàng)為不顯示狀態(tài)。
RADIOBUTTON 設(shè)定單選,有default的,默認(rèn)這個(gè)是選上的,同一個(gè)RAD1和RAD2,每個(gè)RAD只能選一個(gè)值,選中則變量變?yōu)閄,如果沒(méi)有設(shè)定default,每個(gè)組的第一個(gè)參數(shù)將被激活并分配‘X’。
MODIF ID 將參數(shù)分配給修改組,通過(guò)在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ì)把輸入值更改為大寫(xiě)。(還沒(méi)有使用過(guò))
MEMORY-ID 允許你從全局SAP內(nèi)存使用缺省值。
MATCHCODE OBJECT 匹配代碼對(duì)象,obj的名稱(chēng)必須是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
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> 該語(yǔ)句產(chǎn)生N個(gè)空行,如果只產(chǎn)生一個(gè),可以省略<N>。
SELECTION-SCREEN ULINE <POS(LEN)> 該語(yǔ)句創(chuàng)建下劃線(xiàn),入過(guò)沒(méi)有POS(LEN),則在當(dāng)前下面創(chuàng)建新行。如果有POS(LEN),則從POS處開(kāi)始,連續(xù)<LEN>個(gè)字符。
SELECTION-SCREEN COMMENT 用該選項(xiàng)是必須定義格式(還沒(méi)有使用過(guò),后續(xù)有用到再更新)
SELECTION-SCREEN BEGIN OF LINE 把選擇屏幕的幾個(gè)元素放在一行上。
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN POSITION <POS> 定位元素
SELECTION-SCREEN BEGIN OF BLOCK <block> 創(chuàng)建元素塊,里面放選擇屏幕語(yǔ)句,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語(yǔ)句聲明表SSCRFIELDS。(后續(xù)有用到把具體例子貼上來(lái))
(四) INITIALIZATION : 用于屏幕初始化,例如屏幕的block的名字,屏幕默認(rèn)字段的一些初始值的填充,工具欄按鈕的一些字段的值的填充等等。
(五) AT SELECTION-SCREEN OUTPUT 這個(gè)就相當(dāng)于PBO的功能,可以對(duì)選擇屏幕字段進(jìn)行修改(前面也有說(shuō)到一些功能要放到這里使用的),在選擇運(yùn)行程序的時(shí)候,選擇屏幕出來(lái)之前就先運(yùn)行這段。例如可以判斷用戶(hù)名,然后選擇性的輸入一些選擇屏幕字段:
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.
(六) AT SELECTION-SCREEN ON VALUE-REQUEST FOR <NAME> 這個(gè)最常見(jiàn)的就是對(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.
總結(jié)
以上是生活随笔為你收集整理的ABAP中SELECTION-SCREEN用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机操作系统汤小丹版课后答案
- 下一篇: 最好用的切图工具——firework