用户与SAP数据之间的通信交互是通过对屏幕的操作来实现的,如:数据报表,业务功能操作等,而SAP的屏幕开发一般分为两种:
1. 通过SAP ABAP语法创建屏幕元素,称之为Selection Screen(选择屏幕);
2. 通过SAP的屏幕编辑器开发,称之为Dialog(对话框屏幕),通过屏幕编辑器可以实现数据的多种展现模式。
本文主要 讲述的是第一种屏幕开发的内容(选择屏幕):
1. 屏幕基本元素
2. 屏幕输入值控制
3. 屏幕事件(ABAP Event)
4. 屏幕对象的F1/F4功能
5. SAP屏幕框架
1.屏幕基本元素
选择屏幕的开发有两种屏幕元素来创建数据输入域,分别是:PARAMETERS 和 SELECT-OPTIONS。
两者区别在于,前者只能通过单值(单个数据)输入,后者通过内表形式实现多值(一行或多行数据)输入。
1.1 PARAMETERS 对象及其属性
通过上面的预览图,我们看下ABAP程序:
1
2
3
4
5
6
|
PARAMETERS
: pa_oarr
LIKE
sflight-carrid,
pa_name
AS
CHECKBOX
DEFAULT
'X'
,
pa_curr
AS
CHECKBOX
DEFAULT
'X'
,
pa_lim1
RADIOBUTTON
GROUP
lim,
pa_lim2
RADIOBUTTON
GROUP
lim,
pa_lim3
RADIOBUTTON
GROUP
lim.
|
PARAMETERS 对象语法:
- <f> 是用户自定义对象名,即程序中的 pa_oarr, pa_name 等。
- TYPE|LIKE 是定义对象名的类型
- DECIMALS 用于数量型对象,保留多少位小数点
- MEMROY ID SAP内存ID,可以将对象参数临时保存在内存中,通过<pid>存储及读取,长度不能超过3个字符
- OBLIGATORY 必输项,该对象在屏幕上指定必输
- DEFAULT 默认值
- AS CHECKBOX 将对象设置成复选框方式交互,如上面截图中的 PA_NAME对象
- RADIOBUTTON GROUP 将对象设置成单选框交互,由于单选框只能集合中的一个,故需要指定一个GROUP 限制其集合,
如上面截图中的PA_LIM1、PA_LIM2等
以上参数,都可以直接在 PARAMETERS 上配置。
1.2 SELECT-OPTIONS 对象及其属性
通过上面的预览图,我们看下简单的ABAP程序:
1
2
3
4
5
|
REPORT
zsapjx_03.
TABLES
: sflight.
SELECT
-
OPTIONS
: so_carr
FOR
sflight-carrid
DEFAULT
'AA'
,
so_fldt
FOR
sflight-fldate.
|
可以看到界面上一行会出现两个文本框(输入域),这里我们称之为“上限”和“下限”。
例如,从 1 到9的区间,从A到Z的区间等范围。
SELECT-OPTIONS对象语法:
- <seltab> 创建自定义对象名
- FOR 参考对象,一般用系统本身的数据表结构对象
- DEFAULT 默认值
- MEMORY ID 内存ID ,与PARAMETERS用法一致
- LOWER CASE 大写,输入的内容必须大写
- OBLIGATORY 必输项,与PARAMETERS用法一致,只是SELECT-OPTIONS 只限于LOW字段值(见下面第2节)
- NO-EXTENSION 限制只能输入一行数据
- NO INTERVALS 限制只能输入一个单元(LOW字段)
以上参数,都可以直接在 SELECT-OPTIONS上配置。例如:
1
2
|
SELECT
-
OPTIONS
: so_carr
FOR
sflight-carrid
DEFAULT
'AA'
,
so_fldt
FOR
sflight-fldate
OBLIGATORY
NO
INTERVALS
NO
-
EXTENSION
.
|
效果:
这时,就会在输入域多出了一个提示必输的√,下限输入域、多值都被隐藏了。
提示: 在编程过程中,ABAP 编辑器会给出相关的参数智能提示:
2. 屏幕输入值控制
双击屏幕某字段时,会弹出维护选择项的界面:
点击多值输入按钮时,会弹出多值输入界面:
(单一值标签界面)
(多值标签界面)
这些都是为了筛选数据,或者输入多值区间的操作。
前面我们提到 Select-options 跟 Parameters 的区别在于 Select-options 是用内表形式存储输入值的。
Select-options内表中的结构如下表所示:
Sign栏位,表示输入值的类型, I(Include)或者 E(Exclude) ,包括与不包括(即:排除);
在维护选择项时,可以通过 按钮来筛选操作;
Option栏位,表示输入值的关系:
- EQ(Equal) – 等于
- NE(Not Equal) – 不等于
- LT(Little Than) – 小于
- LE(Little and Equal) – 小于等于
- GT(Great Than) – 大于
- GE(Greater and Equal ) – 大于等于
- BT(Between) – 上下限之间
- NB(Not Between) – 不在上下限之间
在选择维护项中,可以通过选择操作符筛选条件:
LOW 栏位,输入值上限
HIGH栏位,输入值下限
除了可以通过屏幕操作来筛选条件之外,程序上也可以控制 Select-options 的输入值,
可以在初始化事件中添加相关程序:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
REPORT
zsapjx_03.
TABLES
: sflight.
SELECT
-
OPTIONS
: so_carr
FOR
sflight-carrid,
so_fldt
FOR
sflight-fldate.
*--------------------------------------------------------------------*
* 初始化
*--------------------------------------------------------------------*
INITIALIZATION
.
so_carr-sign =
'I'
.
so_carr-option =
'EQ'
.
so_carr-low =
'AA'
.
so_carr-high =
'ZZ'
.
APPEND
so_carr
TO
so_carr.
CLEAR
so_carr.
|
执行效果:
3. 屏幕事件(ABAP Event)
SAP屏幕事件也叫ABAP事件,R/3系统的运行机制中,SAP程序的执行都是通过事件来驱动的。
SAP程序的事件流:
再来看下程序中,事件的执行:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
REPORT
zsapjx_03.
TABLES
: mara.
SELECT
-
OPTIONS
: so_matnr
FOR
mara-matnr.
PARAMETERS
: pa_matnr type mara-matnr.
DATA
: gv_init
TYPE
string,
gv_output
TYPE
string,
gv_start
TYPE
string,
gv_end
TYPE
string.
INITIALIZATION
.
gv_init =
'01.INITIALIZATION 事件'
.
AT
SELECTION
-
SCREEN
OUTPUT
.
gv_output =
'02.AT SELECTION-SCREEN OUTPUT 事件'
.
START
-
OF
-
SELECTION
.
gv_start =
'03.START-OF-SELECTION 事件'
.
END
-
OF
-
SELECTION
.
gv_end =
'04.END-OF-SELECTION 事件'
.
WRITE
: /.
WRITE
: / gv_init.
WRITE
: / gv_output.
WRITE
: / gv_start.
WRITE
: / gv_end.
WRITE
: /.
|
运行结果:
从上面的事件流及程序中看到,SAP的事件包括:
3.1 INITIALIZATION 事件
该事件在屏幕未显示之前执行,可对程序设置值及屏幕元素进行初始化设置
3.2 AT SELECTION-SCREEN OUTPUT 事件
屏幕元素声明完成后执行,并会在程序执行之前优先检查该事件下的所有代码。
通常用于对输入值校验数据,如库存是否充足,操作类型是否允许等。
3.3 AT SELECTION-SCREEN ON … 事件
可在程序执行之前指定输入值的校验,与AT SELECTION-SCREEN OUTPUT事件类似;
只是OUTPUT事件检查屏幕输入值的校验,而ON 事件则是检查指定的输入值。
执行该事件时,其它输入域的输入状态会被锁定。
3.3.1 AT SELECTION-SCREEN ON VALUE REQUEST FOR {para|selcrit-low|selcrit-high} (F4)
指定输入域F4搜索帮助的事件,用于实现屏幕输入域的自定义F4搜索帮助。
3.3.2 AT SELECTION-SCREEN ON HELP REQUEST FOR {para|selcrit-low|selcrit-high} (F1)
指定输入域F1帮助的事件,用于实现屏幕输入域的自定义F1帮助。
3.3.3 AT SELECTION-SCREEN ON {para|selcrit}
指定输入域输入值时触发,可以是Parameters对象,也可以是Select-options对象。
3.3.4 AT SELECTION-SCREEN ON BLOCK (block)
该事件应用于设定框架的屏幕中。
3.3.5 AT SELECTION-SCREEN ON RADIOBUTTON GROUP (radi)
该事件应用于单选框按钮组中。
3.3.6 AT SELECTION-SCREEN ON END OF (selcrit)
该事件只应用于Select-options对象,Parameters对象不起作用。在输入域进行多行数据输入时触发。
3.4 AT SELECTION-SCREEN 事件
与前面的 AT SELECTION-SCREEN OUTPUT 和AT SELECTION-SCREEN ON 事件类似,
区别在于执行顺序优先级低于前两者。
3.5 START-OF-SELECTION 事件
开始执行,该事件在执行程序时触发:
3.6 END-OF-SELECTION 事件
该事件应用于所有数据处理完成后,即在START-OF-SELECTION执行完成后,但输出屏幕还未显示前。
4. 屏幕对象的 F1/F4 功能
4.1 屏幕对象的F1功能
每个对象都能查看相应的系统帮助文档,将光标聚焦在对象上,然后按F1键,系统会弹出相应的标准系统帮助文档。
如,查看移动类型的F1帮助:
而对于用户自定义的对象,则需要我们去添加相应的说明文档。
4.2 屏幕对象的F4功能
F4功能叫Search Help(搜索帮助),便于我们在输入值时从数据字典中筛选相关数据,起到智能提示的效果。
例如,在移动类型时,点击该输入域右边的小方框:
会弹出相应的数据供用户选择输入:
而用户自定义的对象,也需要我们去添加相应的Search Help 对象,相关内容会在ABAP数据字典章节中说明。
5. SAP屏幕框架
屏幕框架主要是屏幕框线的设计,也就是BLOCK的应用。
BLOCK的语法:
例如,下面的程序:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
SELECTION
-
SCREEN
BEGIN
OF
BLOCK
carr
WITH
FRAME
TITLE
text-001.
SELECT
-
OPTIONS
: so_carr
FOR
sflight-carrid,
so_fldt
FOR
sflight-fldate.
SELECTION
-
SCREEN
END
OF
BLOCK
carr.
SELECTION
-
SCREEN
BEGIN
OF
BLOCK
limit
WITH
FRAME
TITLE
text-002.
PARAMETERS
: pa_oarr
LIKE
sflight-carrid,
pa_name
AS
CHECKBOX
DEFAULT
'X'
,
pa_curr
AS
CHECKBOX
DEFAULT
'X'
,
pa_lim1
RADIOBUTTON
GROUP
lim,
pa_lim2
RADIOBUTTON
GROUP
lim,
pa_lim3
RADIOBUTTON
GROUP
lim.
SELECTION
-
SCREEN
END
OF
BLOCK
limit.
|
执行的效果:
屏幕上多出了框线,这是SAP屏幕框架的效果,不仅可以保证屏幕设计的美观效果,
还可以提供诸如按钮、页签(Tab)等功能组件。