`

abap 屏幕元素

阅读更多
 通过这个屏幕实例可以了解屏幕元素的构成,及屏幕事件。
一.首先我们先完成窗体显示部分的代码
TABLES: BKPF,SSCRFIELDS.
DATA FLAG TYPE I.
SELECTION-SCREEN BEGIN OF BLOCK PART1 WITH FRAME TITLE TITLE1.
*了解type/like/必选/memory id
PARAMETERS:NUMBER1 TYPE I OBLIGATORY,"必填
NUMBER2 TYPE I,
BUMBER3 TYPE I.
PARAMETERS: P_BUKRS4 TYPE C MEMORY ID HK."注意memory id 不能超过三字符
PARAMETERS:S_BUKRS LIKE BKPF-BUKRS DEFAULT '1000'.
SELECTION-SCREEN END OF BLOCK PART1.

SELECTION-SCREEN BEGIN OF BLOCK PART2 WITH FRAME TITLE TITLE2.
*注意了解一下no-extension/no intervals/mod if
SELECT-OPTIONS:S_BUKRS1 FOR BKPF-BUKRS NO-EXTENSION MODIF ID G1,"关闭不连续多选
S_BUKRS2 FOR BKPF-BUKRS NO INTERVALS MODIF ID G1,"不显示高的条件
S_BUKRS3 FOR BKPF-BUKRS MODIF ID G1,
S_BUKRS4 FOR BKPF-BUKRS DEFAULT '1111' MODIF ID G1."带默认值
SELECTION-SCREEN SKIP 1.“换行
SELECT-OPTIONS:S_MONAT1 FOR BKPF-MONAT NO-EXTENSION MODIF ID G2,
S_MONAT2 FOR BKPF-MONAT NO INTERVALS MODIF ID G2,
S_MONAT3 FOR BKPF-MONAT MODIF ID G2,
S_MONAT4 FOR BKPF-MONAT DEFAULT '1111' MODIF ID G2.
*添加一组按钮控制显示,放置在一行内
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 30(10) BTNTXT1 USER-COMMAND BUT1.
SELECTION-SCREEN PUSHBUTTON 45(10) BTNTXT2 USER-COMMAND BUT2.
SELECTION-SCREEN PUSHBUTTON 60(10) BTNTXT3 USER-COMMAND BUT3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK PART2.

SELECTION-SCREEN BEGIN OF BLOCK PART3 WITH FRAME TITLE TITLE3.
*了解checkbox/comment/line/radiobutton
SELECTION-SCREEN BEGIN OF LINE.
*复选按钮放在一行上
SELECTION-SCREEN POSITION 1."定位
SELECTION-SCREEN COMMENT 1(5) CHK1 FOR FIELD PCK1.
SELECTION-SCREEN COMMENT 20(5) CHK2 FOR FIELD PCK2.
SELECTION-SCREEN POSITION 10."定位,调试容易出错,特别要注意这个数据不能冲突,
PARAMETERS PCK1 AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN POSITION 26.
PARAMETERS PCK2 AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN ULINE.”划横线

SELECTION-SCREEN BEGIN OF LINE.
*单选按钮放在一行上
SELECTION-SCREEN COMMENT 1(5) RD1 FOR FIELD PRD1.
PARAMETERS:PRD1 RADIOBUTTON GROUP SG1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 10(5) RD2 FOR FIELD PRD2.
PARAMETERS:PRD2 RADIOBUTTON GROUP SG1.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK PART3.

SELECTION-SCREEN BEGIN OF BLOCK PART4 WITH FRAME TITLE TITLE4.
*function key
SELECTION-SCREEN COMMENT 1(50) PART4TXT.
*在应用工具条上添加功能键按钮响应事件
SELECTION-SCREEN:FUNCTION KEY 1,
FUNCTION KEY 2.
SELECTION-SCREEN END OF BLOCK PART4.

INITIALIZATION.
*用于屏幕初始化,屏幕字段默认值的填充和赋值
TITLE1 = '第一个Frame(了解type/like/必选/memory id)'.
TITLE2 = '第二个Frame(了解一下no-extension/no intervals/mod if/radiobutton)'.
TITLE3 = '第三个Frame(了解checkbox/comment/line)'.
TITLE4 = '第四个Frame(了解checkbox/comment/line)'.
NUMBER1 = 1000.
CHK1 = 'CHINA'.
CHK2 = 'USA'.
RD1 = '中文'.
RD2 = '英文'.
BTNTXT1 = '全部显示'.
BTNTXT2 = '只显示第一组'.
BTNTXT3 = '只显示第二组'.
PART4TXT = '看看function key是否出发 start-of-selection?'.
SSCRFIELDS-FUNCTXT_01 = 'SELF_FUNCTION1'.
SSCRFIELDS-FUNCTXT_02 = 'SELF_FUNCTION2'.

完成这部分代码,你就可以看见下面这样一个界面了


二.接着你可以先看看下面这张图,然后继续后面的事件代码

了解了这张图,就对选择屏幕中的事件响应过程和顺序有了了解,也就可以显示我们下面的功能了,继续coding:
AT SELECTION-SCREEN OUTPUT.
*屏幕更改(屏幕显示出来前判断哪些要显示)
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'G1' AND FLAG > 0.
SCREEN-ACTIVE = '0'.
ENDIF.
IF SCREEN-GROUP1 = 'G2' AND FLAG < 0.
SCREEN-ACTIVE = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.

"下面的这些message是为了让自己了解程序运行过程的
AT SELECTION-SCREEN ON BLOCK PART1.
MESSAGE '你想检查 PART1 块内的字段就在这里处理' TYPE 'I'.

AT SELECTION-SCREEN ON BLOCK PART2.
MESSAGE '你想检查 PART2 块内的字段就在这里处理' TYPE 'I'.

AT SELECTION-SCREEN ON NUMBER1.
MESSAGE '你只想验证某一具体字段可以这样处理' TYPE 'I'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR NUMBER1.
MESSAGE '可以显示你想要的列表值' TYPE 'I'.

AT SELECTION-SCREEN ON HELP-REQUEST FOR NUMBER2.
MESSAGE '你可为屏幕字段显示自定义帮助' TYPE 'I'.

AT SELECTION-SCREEN ON RADIOBUTTON GROUP SG1.
MESSAGE '对于单选按钮选择后的处理可以在这里处理' TYPE 'I'.

AT SELECTION-SCREEN.
MESSAGE '你操作界面上面的所有字段都要检查就在这里处理' TYPE 'I'.
*如果你在initialztion中已经初始化了,在这里或者下面的output中再修改看看
NUMBER1 = 2000.
TITLE4 = '第四个Frame'.
*先判断是哪一个按钮
MESSAGE SSCRFIELDS-UCOMM TYPE 'I'.
CASE SSCRFIELDS-UCOMM.
WHEN 'BUT1'.
FLAG = 0.
WHEN 'BUT2'.
FLAG = -1.
WHEN 'BUT3'.
FLAG = 1.
WHEN 'FC01'.
MESSAGE 'FUNCTION 1' TYPE 'I'.
WHEN 'FC02'.
MESSAGE 'FUNCTION 2' TYPE 'I'.

WHEN OTHERS.
FLAG = 0.
ENDCASE.

START-OF-SELECTION.
MESSAGE '你在这里开始进行按添加取数的处理' TYPE 'I'.

END-OF-SELECTION.
MESSAGE '你将你取出的数展现到屏幕,如果你偷懒也可以放在start-of-selection里面' TYPE 'I'.

AT LINE-SELECTION.
MESSAGE '你点我干吗?' TYPE 'I'.

需要注意的是:

AT USER-COMMAND和 AT LINE-SELECTION.事件的触发,如果功能代码不是和PICK绑定就会触发AT USER-COMMAND,当你双击选择行,然而at line-selection中的程序却不执行。

三.选择屏幕的调用

我们另外定义一个选择屏幕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.

四.选择屏幕嵌入到标准屏幕
1.需要在标准屏幕中的PBO/PAI中加入
PBO: CALL SUBSCREEN subsc1 INCLUDING sy-repid 屏幕编号参数."不能直接输编号,DATA: 参数 TYPE sy-dynnr VALUE '500'.
PAI: CALL SUBSCRENN subsc1. "主要就显示了在标准屏幕中操作选择屏幕,这些事件能够传递个选择屏幕处理事件;
2.主程序
DATA: SUBSCNUMBER TYPE SY-DYNNR VALUE '500'.
SELECTION-SCREEN BEGIN OF SCREEN 500 AS SUBSCREEN."这个as subscreen很重要
PARAMETERS P TYPE I.
SELECTION-SCREEN END OF SCREEN 500.
START-OF-SELECTION.
CALL SCREEN 1200.“500选择屏幕嵌入到1200标准屏幕
AT SELECTION-SCREEN.
IF SY-DYNNR = '500'.
MESSAGE 'click subscree' TYPE 'I'.
ENDIF.

需要注意两个地方:一个是as subscreen,另外一个就是激活了,因为嵌来嵌去的,你调试的时候容易报错。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics