加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SAP应用界面开发

(2013-06-25 10:46:00)
标签:

it

分类: SAPABAP

SELECT-SCREEN语句用于创建屏幕的框架结构,主要包括屏幕元素的创建、子屏幕的创建等。子程序主要分为两种,一种为Include Screen,可以通过Report端程序直接调用;另一种为SubScreen,需要通过Screen Painter所创建的屏幕调用。SELECT-SCREEN具体的应用语法如下:

(1)SELECTION-SCREEN BEGIN OF SCREEN src.
.......
SELECTION-SCREEN END OF SCREEN src.
该语法用于定义一个INCLUDE SUREEN,可通过CALL方法在Report程序中引用,CALL屏幕窗体时加入STARTING AT ... ENDING AT ...参数可以将所定义屏幕窗体作为一个新的对话框窗体来引用,并指定期创建的具体大小及位置,如下代码所示:

REPORT ZZWEISTSCREEN.
SELECTION-SCREEN BEGIN OF SCREEN 1314 AS WINDOW TITLE TEXT-W01. "TEXT-W01为对话框的标题,在文本符号中可以设置
PARAMETERS:MATNR LIKE MARA-MATNR.
PARAMETERS:T AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 1314.

CALL SCREEN 1314 STARTING AT 30 5 ENDING AT 90 5. "调用SELECTION-SCREEN
程序执行结果如下:

需要注意的是,此时窗体的名称必须为Numeric(数字)类型的的,如将上面代码中的1314改为myscreen,那么程序将提示以下错误:

注意:当从一个主屏幕中来调用其程序中的另一窗体时,必须使用CALL SELECTION-SCREEN方法,如下通过SELECTION-SCREEN调用Include Screen。

REPORT ZZWEISTSCREEN.
PARAMETERS:T AS CHECKBOX. "第一个窗体元素

CALL SELECTION-SCREEN 1314."SELECTION-SCREEN调用另一个窗体
SELECTION-SCREEN BEGIN OF SCREEN 1314 AS WINDOW TITLE TEXT-W01.
PARAMETERS:MATNR LIKE MARA-MATNR.
SELECTION-SCREEN END OF SCREEN 1314.

(2)SELECTION-SCREEN BEGIN OF SCREEN sra AS SUBSCREEN.
该语法用于定义一个SUBSCREEN,SUBSCREEN主要用于SCREEN PAINTER所创建屏幕。

(3)SELECTION-SCREEN BEGIN OF BLOCK block.
......
SELECTION-SCREEN END OF BLOCK.
该语法在屏幕中定义一个BLOCK,其扩展语法包括:
...WITH FRAME:创建一个框架
...TITLE title:创建一个带标题的框架。
...NO INTERVALS:所创建的框架中限制SELECT只有一个输入项。
以下为示例代码:

DATA MAT LIKE MARA-MATNR.

*不包含扩展语法
SELECTION-SCREEN BEGIN OF BLOCK block1.
SELECT-OPTIONS:MATNR1 FOR MAT.
SELECTION-SCREEN END OF BLOCK block1.

*包含框架
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME.
SELECT-OPTIONS:MATNR2 FOR MAT.
SELECTION-SCREEN END OF BLOCK block2.

*包含框架及标头
SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE TEXT-W01.
SELECT-OPTIONS:MATNR3 FOR MAT.
SELECTION-SCREEN END OF BLOCK block3.

*包含框架及标头且只有一个输入框
SELECTION-SCREEN BEGIN OF BLOCK block4 WITH FRAME TITLE TEXT-W01 NO INTERVALS.
SELECT-OPTIONS:MATNR4 FOR MAT.
SELECTION-SCREEN END OF BLOCK block4.

代码运行界面如下:

(4)SELECTION-SCREEN INCLUDE(调用已经存在的屏幕元素)
参照某一个已经定义的屏幕元素来创建,如下代码:

CALL SCREEN 1234.

*PARAMETERS MATNR LIKE MARA-MATNR.
*CALL SELECTION-SCREEN 1234. "调用子窗体

SELECTION-SCREEN BEGIN OF SCREEN 1111.
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-W01.
SELECT-OPTIONS SELO FOR SY-REPID.
SELECTION-SCREEN ULINE. "换行线
PARAMETERS PARO.
SELECTION-SCREEN END OF BLOCK block1.
SELECTION-SCREEN END OF SCREEN 1111.

SELECTION-SCREEN BEGIN OF SCREEN 1234.
SELECTION-SCREEN INCLUDE BLOCKS block1.
SELECTION-SCREEN END OF SCREEN 1234.
程序运行界面如下:

(5)SELECTION-SCREEN ULINE
划出横线,必须用在BLOCK中才能生效。

(6)SELECTION-SCREEN SKIP n
在BLOCK中产生换行。

(7)SELECTION-SCREEN POSITION pos
在BLOCK中产生空格。

(8)SELECTION-SCREEN BEGIN OF LINE.
......
SELECTION-SCREEN END OF LINE.
将所生成的屏幕元素控制在一行。

(9)AT SELECTION-SCREEN
是PAI处理,选择屏幕显示之后,用来响应回车,F8,F1,F4等事件。
(1)选择屏幕事件,此处声明的变量是局部变量。
(2)check sy-ucomm 判断用户命令。
(3)在这个事件响应中,可以对屏幕字段进行有效性检验等,但无法修改选择屏幕。
分为以下几个方面:
... ON :
该语法用于控制屏幕元素输入时的遇错处理,检查具体输入字段(SELECTION-OPTIONS或PARAMETERS)是否完整或正确,若输入有错或不满足条件,其它屏幕元素会变成灰色,不接受输入直到该字段输入正确为止。
...ON VALUE-REQUEST FOR :SELECT-OPTIONS按选择帮助键时触发该事件。
...ON HELP-REQUEST FOR SELECTION-OPTIONS按选择帮助键时键发该事件。
...ON RADIOBUTTON GROUP :单选按钮事件,必须进行整体输入检查。
...ON BLOCK :框架的触发事件(控制框架中的屏幕元素值的输入)。
...OUTPUT:用于屏幕输出时的各屏幕元素值的管控(PBO处理,在选择屏幕显示之前就被调用;响应屏幕上的事件,用户回车或F8后也被调用;通过modify screen可以修改选择屏幕字段)。
...ON EXIT-COMMAND:用于响应"BACK","CANCEL","EXIT"等事件。
[For Example]

SELECT-OPTIONS SEL0 FOR SY-TVAR0.
SELECTION-SCREEN BEGIN OF BLOCK BL0.
SELECT-OPTIONS SEL1 FOR SY-TVAR1.
SELECTION-SCREEN BEGIN OF BLOCK BL1.
PARAMETERS P1 RADIOBUTTON GROUP RAD1.
PARAMETERS P2 RADIOBUTTON GROUP RAD1.

SELECTION-SCREEN BEGIN OF BLOCK BL2.
PARAMETERS P3.
SELECTION-SCREEN END OF BLOCK BL2.
SELECT-OPTIONS SEL2 FOR SY-TVAR2.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN END OF BLOCK BL0.

AT SELECTION-SCREEN ON SEL1.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP RAD1.
AT SELECTION-SCREEN ON P3.
AT SELECTION-SCREEN ON BLOCK BL1.
AT SELECTION-SCREEN ON BLOCK BL2.

在ABAP中在屏幕上创建按钮,你需要在SELECTION-SCREEN对象中加入PUSHBUTTON参数,语法如下:
[Syntax]
SELECTION-SCREEN PUSHBUTTON [/] USER-COMMAND [MODIF ID ]
:PUSHBUTTON按钮在屏幕生成的位置与长度。
:PUSHBUTTON按钮的名称,给按钮赋值时要用到名字。
:必须指定的字符代码,当用户在选择屏幕上触发按钮时,被输入到词典对象字段:SSCRFIELDS-UCOMM中,需要注意的是,必须显式使用语句TABLES引用SSCRFIELDS。否则将会报如下错误:

[For Example]

TABLES SSCRFIELDS."引用词典对象
INCLUDE:. "按钮中加入图标必须调用该类型库,图标请参考T-CODE:ICON
SELECTION-SCREEN PUSHBUTTON /1(20) PUBU1 USER-COMMAND ABCD.
SELECTION-SCREEN SKIP."换行
SELECTION-SCREEN PUSHBUTTON /10(25) PUBU2 USER-COMMAND ABCE. "位置从10开始

AT SELECTION-SCREEN OUTPUT.
MOVE 'CALL NEXT SCREEN' TO PUBU1. "给PUBU1按钮赋值描述

*INITIALIZATION. "屏幕初始化
* PUBU1 = 'First PUSHBUTTON'.


WRITE ICON_OKAY AS ICON TO PUBU2. "给PUBU2按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。

*MOVE 'THE SECOND BUTTON' TO PUBU2.
CONCATENATE PUBU2 'My Second Button' INTO PUBU2 SEPARATED BY SPACE. "给第二个按钮添加赋值描述

AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'ABCD'.
CALL SELECTION-SCREEN 1234. "调用程序中的另一个窗体
ENDIF.

以上代码运行界面如下:

点击"CALL NEXT SCREEN"按钮调用下一个屏幕,如下:

前面几篇文章已经学习了ABAP中SELECTION-SCREEN的大部分对象,既然是大部分对象,那么还遗留有小部分对象还未接触,接下来我们将继续学习。

(1)SELECTION-SCREEN COMMONT fmt name.
用于定义或者修改本地元素的注释,包括PARAMETER、CHECKBOX BUTTON等。通过SELECTION-SCREEN COMMENT语法可以按Text Symbols设置的值对其属性重新定义。
[For Example]

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (12) TEXT-W03 FOR FIELD parm.
SELECTION-SCREEN POSITION 14.
PARAMETERS parm LIKE MARA-MATNR.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:type AS CHECKBOX.
SELECTION-SCREEN COMMENT (40) TEXT-W04 FOR FIELD type.
SELECTION-SCREEN END OF LINE.
Text-Symbols设置如下:

程序运行界面如下:

(2)SELECTION-SCREEN FUNCTION KEY n.
该对象用于在工具栏上新增一个功能按钮。该按钮的定义保存在系统结构体SSCRFIELDS中,n为一个整数序数最大至5。不要试图让它小于1或者大于5,它不接受这个范围。也就是说工具栏按钮最多可以放5个(whereby a value between 1 and 5 must be entered for n)。当n等于1时,其按钮描述保存在字段SSCRFIELDS-FUNCTXT_01中,其按钮对象命名为
"FC01",保存在字段SSCRFIELDS-UCOMM中,以下为示例代码:
[For Example]

PARAMETERS para LIKE MARA-MATNR.
TABLES: SSCRFIELDS.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 5.

INITIALIZATION. "初始公屏幕时,就给它们一些值吧,让它们看起来更像是个按钮,按钮也需要有尊严的活着。

MOVE 'Add BUTTON' TO SSCRFIELDS-FUNCTXT_01.
MOVE 'Minus BUTTON' TO SSCRFIELDS-FUNCTXT_02.
MOVE 'MODIFY BUTTON' TO SSCRFIELDS-FUNCTXT_05.

AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC05'. "触发 FC05工具栏按钮,将要执行什么操作
CALL SELECTION-SCREEN 1234."调用程序中的子屏幕
ENDIF.

运行界面如下:

以下代码来自官方网站上面的例子:

*官方菜单SELECTION-SCREEN FUNCTION KEY n (demo:http://help.sap.com/abapdocu_70/en/ABAPSELECTION-SCREEN_FUNCTIONKEY.htm)
TYPE-POOLS ICON. "Program Icon Library
TABLES SSCRFIELDS.
DATA functxt TYPE SMP_DYNTXT. "SMP_DYNTXT(菜单制作器:动态文本的程序接口)

PARAMETERS: p_carrid TYPE s_carr_id,
p_cityfr TYPE s_from_cit.
SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2.

INITIALIZATION. "屏幕初始化
functxt-icon_id = icon_ws_plane. "文本字段中的图标(替换显示,别名)
functxt-quickinfo = 'Preselected Carrier'. "菜单制作器:信息文本 (4.0),滑鼠移去过去显示的信息TIP
functxt-icon_text = 'LH'. "菜单制作器:图标文本 (4.0),菜单名称
sscrfields-functxt_01 = functxt.
functxt-icon_text = 'UA'.
sscrfields-functxt_02 = functxt.

AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
p_carrid = 'LH'.
p_cityfr = 'Frankfurt'.
WHEN 'FC02'.
p_carrid = 'UA'.
p_cityfr = 'Chicago'.
ENDCASE.
运行界面如下:



(3)SELECTION-SCREEN BEGIN OF TABBED BLOCK FOR n LINES.
定义选项卡或者其他类似于选择页切换的功能组件。具体语法如下:
[Syntax]
SELECTION-SCREEN: BEGIN OF TABBED BLOCK FOR n LINES,
[......]
END OF BLOCK .
其中 n代表高度,此高度为选择控件的高度。
例1:
[Code]

TABLES:MARA.
*定义子屏幕100 SUBSCREEN
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK blockA WITH FRAME TITLE TEXT-W01.
SELECT-OPTIONS:mantra FOR MARA-MATNR NO INTERVALS.
SELECTION-SCREEN SKIP 1.
PARAMETERS: check01 AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blockA.
SELECTION-SCREEN END OF SCREEN 100.

*定义子屏幕200 SUBSCREEN
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
PARAMETERS: mantrb LIKE MARA-MATNR.
SELECTION-SCREEN END OF SCREEN 200.

*选择页TAB功能,定义两个TAB
SELECTION-SCREEN:
BEGIN OF TABBED BLOCK MyTab FOR 5 LINES,
TAB (20) BUTTON1 USER-COMMAND PUSH1, *(20)代表要显示在TAB内容的长度,最大长度为79,不相信?你可以试下.哈哈
TAB (20) BUTTON2 USER-COMMAND PUSH2,
END OF BLOCK MyTab.

INITIALIZATION.
BUTTON1 = 'FirstTab'.
BUTTON2 = 'SecondTab'.
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.
运行界面如下:


例2:
[CODE] The Official Demo

TABLES SSCRFIELDS.
* SUBSCREEN 100
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-010.
PARAMETERS: p1(10) TYPE c,
p2(10) TYPE c,
p3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.

* SUBSCREEN 200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-020.
PARAMETERS: q1(10) TYPE c,
q2(10) TYPE c,
q3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.

* SUBSCREEN 300
SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-030.
PARAMETERS: r1(10) TYPE c,
r2(10) TYPE c,
r3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF SCREEN 300.

* STANDARD SELECTION SCREEN
SELECTION-SCREEN: FUNCTION KEY 1, "工具栏按钮
FUNCTION KEY 2.

SELECTION-SCREEN: BEGIN OF TABBED BLOCK sub FOR 10 LINES,
END OF BLOCK sub.

INITIALIZATION.
sscrfields-functxt_01 = '@0D@'. "按钮描述字段,图标形貌
sscrfields-functxt_02 = '@0E@'. "按钮描述字段,图标形貌
sub-prog = SY-REPID. "必选项,倔强的孩子.
sub-dynnr = 100.

AT SELECTION-SCREEN.
CASE SY-DYNNR. "当前显示屏幕的名称
WHEN 100.
IF SSCRFIELDS-UCOMM = 'FC01'. "触发事件的TOOL BAR CONTROL
sub-dynnr = 300. "指定显示哪个屏幕
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
sub-dynnr = 200.
ENDIF.
WHEN 200.
IF SSCRFIELDS-UCOMM = 'FC01'.
sub-dynnr = 100.
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
sub-dynnr = 300.
ENDIF.
WHEN 300.
IF SSCRFIELDS-UCOMM = 'FC01'.
sub-dynnr = 200.
ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
sub-dynnr = 100.
ENDIF.
ENDCASE.

START-OF-SELECTION.
WRITE: / 'P1:', p1,'Q1:', q1, 'R1:', r1,
/ 'P2:', p2,'Q2:', q2, 'R2:', r2,
/ 'P3:', p3,'Q3:', q3, 'R3:', r3.
运行界面如下:

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有