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 设定该项伟必输项
CHECKBOX 设为打钩的(复选框),如果没有设定default的值,那么当这个被勾上的时候才为X,有default的话,即默认为勾上的。
NO DISPLAY 设定该项为不显示状态。
RADIOBUTTON 设定单选,有default的,默认这个是选上的,同一个RAD1和RAD2,每个RAD只能选一个值,选中则变量变为X,如果没有设定default,每个组的第一个参数将被激活并分配‘X’。
MODIF ID 将参数分配给修改组,通过在SELECTION-SCREEN OUTPUT事件中进行处理:
AT SELECTION-SCREEN OUTPUT. 结合上面的定义,P1和P2放在一组,P3和P4放在一组,然后P1和P2的INTENSIFIED字段被设为1,效果是高亮度,
LOOP AT SCREEN. 这个可以这样使用。IF SCREEN-GROUP1 = 'SC1'SCREEN-INTENSIFIED = '1'.MODIFY SCREEN.ENDIF.ENDLOOP.还有一些不常用的例如: LOWER CASE,有这个lower case,系统就不会把输入值更改为大写。(还没有使用过)
MEMORY-ID 允许你从全局SAP内存使用缺省值。
MATCHCODE OBJECT 匹配代码对象,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> 该语句产生N个空行,如果只产生一个,可以省略<N>。
SELECTION-SCREEN ULINE <POS(LEN)> 该语句创建下划线,入过没有POS(LEN),则在当前下面创建新行。如果有POS(LEN),则从POS处开 始,连续<LEN>个字符。
SELECTION-SCREEN COMMENT 用该选项是必须定义格式(例如选择屏幕上的文字说明可以用这个语句)
SELECTION-SCREEN BEGIN OF LINE 把选择屏幕的几个元素放在一行上。
SELECTION-SCREEN POSITION <POS> 定位元素
SELECTION-SCREEN BEGIN OF BLOCK <block> 创建元素块,里面放选择屏幕语句,block的名字可以在initialization里面维护。
SELECTION-SCREEN END OF BLOCK <block>
SELECTION-SCREEN FUNCTION KEY <I> 在选择屏幕的应用工具栏创建按钮,I为1-5,最多只有5个按钮。具体要怎么实现,可以参考另一篇文章(给选择屏幕添加按钮)
SELECTION-SCREEN PUSHBUTTON <pos(len)> <name> USER-COMAND <ucom> [MODIF ID <keyt>]
在选择屏幕上创建按钮,其中<name >是按钮的文本, <ucom>为输入词典字段SSCRFIELDS-UCOMM,必须使用TABLES语句声明表SSCRFIELDS。
(四) INITIALIZATION : 用于屏幕初始化,例如屏幕的block的名字,屏幕默认字段的一些初始值的填充,工具栏按钮的一些字段的值的填充等等。
(五) AT SELECTION-SCREEN OUTPUT
这个就相当于PBO的功能,可以对选择屏幕字段进行修改(前面也有说到一些功能要放到这里使用的),在选择运行程序的时候,选择屏幕出来之前就先运行这段,还有就是选择屏幕输入条件之后按下回车或者是执行后,也会进入这个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 设置里面的LOW 和HIGH字段,例如我要设置默认公司代码从0001到0020。
选择表的里面的字段有:SIGN OPTION LOW HIGH
SIGN 可以是I 和 E I是包括, E是排除的意思
OPTION 可以是:EQ NE GT LE LT CP NP 这个可以查看我的帖子(select-option作为select的条件使用)
NO-EXTENSION,把选择表限制在一行
NO INTERVALS ,把选择表限制伟单值选择
(三)SELECTION-SCREEN: 格式化选择屏幕
1、SELECTION-SCREEN 的全部使用方法:
SELECTION-SCREEN SKIP <N> 该语句产生N个空行,如果只产生一个,可以省略<N>。
SELECTION-SCREEN ULINE <POS(LEN)> 该语句创建下划线,入过没有POS(LEN),则在当前下面创建新行。如果有POS(LEN),则从POS处开始,连续<LEN>个字符。
SELECTION-SCREEN COMMENT 用该选项是必须定义格式(例如选择屏幕上的文字说明可以用这个语句)
SELECTION-SCREEN BEGIN OF LINE 把选择屏幕的几个元素放在一行上。
SELECTION-SCREEN END OF LINE
SELECTION-SCREEN POSITION <POS> 定位元素
SELECTION-SCREEN BEGIN OF BLOCK <block> 创建元素块,里面放选择屏幕语句,block的名字可以在initialization里面维护。
SELECTION-SCREEN END OF BLOCK <blokc>
SELECTION-SCREEN FUNCTION KEY <I> 在选择屏幕的应用工具栏创建按钮,I为1-5,最多只有5个按钮。具体要怎么实现,可以参考另一篇文章(给选择屏幕添加按钮)
SELECTION-SCREEN PUSHBUTTON <pos(len)> <name> USER-COMAND <ucom> [MODIF ID <keyt>] 在选择屏幕上创建按钮,其中<name >是按钮的文本, <ucom>为输入词典字段SSCRFIELDS-UCOMM,必须使用TABLES语句声明表SSCRFIELDS。(后续有用到把具体例子贴上来)
(四) INITIALIZATION : 用于屏幕初始化,例如屏幕的block的名字,屏幕默认字段的一些初始值的填充,工具栏按钮的一些字段的值的填充等等。
(五) AT SELECTION-SCREEN OUTPUT 这个就相当于PBO的功能,可以对选择屏幕字段进行修改(前面也有说到一些功能要放到这里使用的),在选择运行程序的时候,选择屏幕出来之前就先运行这段,还有就是选择屏幕输入条件之后按下回车或者是执行后,也会进入这个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.
例如可以判断输入的某个字段是某个值的时候添加屏幕字段(注意要按回车):
例如,当我输入company code为某个值的时候,我需要添加一个选择字段以及部分check box。首先,这些要添加的选择屏幕内容都是一样要预先设定好,然后通过at selection-screen output 设定好逻辑即可:
定义: s_bukrs1 FOR t001-bukrs NO INTERVALS MODIF ID m4.
逻辑: LOOP AT SCREEN. (这里可以用group,也可以用name。关于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> 这个最常见的就是对upload文件的文件名进行检查的使用:
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 这个比较常用的是在工具栏里面添加了按钮,然后对这个按钮进行操作。
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM FRM_DOWNLOAD_DATA.
ENDCASE.
(八)选择屏幕下拉菜单的实现:
代码如下: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. (十)实现屏幕可以影藏部分选择屏幕字段:
(十一)调用选择屏幕
我们另外定义一个选择屏幕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.
调用了这个选择屏幕之后,点击按钮,这里不是用user_command或者是在屏幕500里面再去设一个module,直接在call selection-screen 500后面添加执行代码,当输入选择屏幕只会,点击执行就会执行后面的代码。
(十二)调用子屏幕call subscreen
(十三)选择屏幕放多个tab:本例实现如上图效果,示例代码如下: 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. (十四)实现下面这个功能:
在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. (十五)跟上面这个类似的实现:
总结
以上是生活随笔为你收集整理的PARAMETERS、SELECTION OPTIONS和SELECTION SCREEN的全部用法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 兰州大学计算机基础在线考试,[兰州大学]
- 下一篇: 谷歌招聘机制