ABAP 开发系列(03): ABAP Selection Screens

用户与SAP数据之间的通信交互是通过对屏幕的操作来实现的,如:数据报表,业务功能操作等,而SAP的屏幕开发一般分为两种:

1.  通过SAP ABAP语法创建屏幕元素,称之为Selection Screen(选择屏幕);

2.  通过SAP的屏幕编辑器开发,称之为Dialog(对话框屏幕),通过屏幕编辑器可以实现数据的多种展现模式。

abap_03_Selection_Screen

本文主要 讲述的是第一种屏幕开发的内容(选择屏幕):

1. 屏幕基本元素

2. 屏幕输入值控制

3. 屏幕事件(ABAP Event)

4. 屏幕对象的F1/F4功能

5. SAP屏幕框架

 

1.屏幕基本元素

选择屏幕的开发有两种屏幕元素来创建数据输入域,分别是:PARAMETERS 和 SELECT-OPTIONS

两者区别在于,前者只能通过单值(单个数据)输入,后者通过内表形式实现多值(一行或多行数据)输入。

1.1  PARAMETERS 对象及其属性

abap_03_Parameters

通过上面的预览图,我们看下ABAP程序:

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 对象语法:

abap_03_Parameters_Syntax

  • <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_03_Select-Options

通过上面的预览图,我们看下简单的ABAP程序:

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对象语法:

abap_03_Select-Options_Syntax

  • <seltab>  创建自定义对象名
  • FOR 参考对象,一般用系统本身的数据表结构对象
  • DEFAULT  默认值
  • MEMORY ID  内存ID ,与PARAMETERS用法一致
  • LOWER CASE 大写,输入的内容必须大写
  • OBLIGATORY  必输项,与PARAMETERS用法一致,只是SELECT-OPTIONS 只限于LOW字段值见下面第2
  • NO-EXTENSION 限制只能输入一行数据
  • NO INTERVALS  限制只能输入一个单元(LOW字段)

以上参数,都可以直接在 SELECT-OPTIONS上配置。例如:

SELECT-OPTIONS: so_carr FOR sflight-carrid DEFAULT 'AA',
                so_fldt FOR sflight-fldate OBLIGATORY NO INTERVALS NO-EXTENSION.

效果:

abap_03_Select-Options_Demo

 

这时,就会在输入域多出了一个提示必输的√,下限输入域、多值都被隐藏了。

提示: 在编程过程中,ABAP 编辑器会给出相关的参数智能提示:

abap_03_Select-Options_Intel

 

2. 屏幕输入值控制

双击屏幕某字段时,会弹出维护选择项的界面:

abap_03_Select-Options_Maintance_Operation

点击多值输入按钮abap_03_Select-Options_Extension_Icon时,会弹出多值输入界面:

abap_03_Select-Options_Maintance_Single_Value

(单一值标签界面)

 

abap_03_Select-Options_Maintance_Multiplicity_Value

(多值标签界面)

 

这些都是为了筛选数据,或者输入多值区间的操作。

前面我们提到 Select-options 跟 Parameters 的区别在于 Select-options 是用内表形式存储输入值的。

Select-options内表中的结构如下表所示:

abap_03_Select-Options_Innertable_Struct

 

Sign栏位,表示输入值的类型, I(Include)或者 E(Exclude) ,包括与不包括(即:排除);

在维护选择项时,可以通过 abap_03_Select-Options_Maintance_Operation_Sign_Select按钮来筛选操作;

 
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) – 不在上下限之间

在选择维护项中,可以通过选择操作符筛选条件:

abap_03_Select-Options_Maintance_Operation_Option_Select

 

LOW  栏位,输入值上限

 
HIGH栏位,输入值下限

除了可以通过屏幕操作来筛选条件之外,程序上也可以控制 Select-options 的输入值,

可以在初始化事件中添加相关程序:

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.

执行效果:

abap_03_Select-Options_Initializtion_Demo

 

3. 屏幕事件(ABAP Event

SAP屏幕事件也叫ABAP事件,R/3系统的运行机制中,SAP程序的执行都是通过事件来驱动的。

SAP程序的事件流:

abap_03_ABAP_Event

再来看下程序中,事件的执行:

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: /.

运行结果:

abap_03_ABAP_Event_Demo

 

从上面的事件流及程序中看到,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 事件

开始执行,该事件在执行程序时触发:

abap_03_Start_Of_Selection_Event_Demo

 

3.6 END-OF-SELECTION 事件

该事件应用于所有数据处理完成后,即在START-OF-SELECTION执行完成后,但输出屏幕还未显示前。

 

4. 屏幕对象的 F1/F4 功能

4.1  屏幕对象的F1功能

每个对象都能查看相应的系统帮助文档,将光标聚焦在对象上,然后按F1键,系统会弹出相应的标准系统帮助文档。

如,查看移动类型的F1帮助:

abap_03_F1

而对于用户自定义的对象,则需要我们去添加相应的说明文档。

 

4.2 屏幕对象的F4功能

F4功能叫Search Help(搜索帮助),便于我们在输入值时从数据字典中筛选相关数据,起到智能提示的效果。

例如,在移动类型时,点击该输入域右边的小方框:

abap_03_F4_Screen

会弹出相应的数据供用户选择输入:

abap_03_F4

而用户自定义的对象,也需要我们去添加相应的Search Help 对象,相关内容会在ABAP数据字典章节中说明。

 

 

5. SAP屏幕框架

屏幕框架主要是屏幕框线的设计,也就是BLOCK的应用。

BLOCK的语法:

abap_03_Block_Syntax

 

例如,下面的程序:

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.

执行的效果:

abap_03_Block_Demo

屏幕上多出了框线,这是SAP屏幕框架的效果,不仅可以保证屏幕设计的美观效果,

还可以提供诸如按钮、页签(Tab)等功能组件。

3 条评论

  1. Charly 说:

    非常感谢 ,总结的很好,写的很详细,希望能在 gitbook.com 上出版。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>