选择屏幕的定义

来源:互联网 发布:mac .ssh目录在哪 编辑:程序博客网 时间:2024/06/04 18:44

定义选择屏幕

==========================================================================================

从sap内存中使用缺省值

Parameters语句的memory-id选项允许从全局sap内存使用缺省值

PARAMETERS<p> ...... MEMORY ID<pid>......

使用该选项 时,以名称<pid> 存储在全局 用户相关的 SAP 内存中的值 将作为<p> 的缺省值出现在选择屏幕上。<pid>最长3个字符 并且不能用引号封闭。

可以使用全局sap内存在程序间传递保留在事务限制以外的值,用户在整个终端进程期间都可以利用该内存,并且所有并行进程使用相同的内存。因此SAP 内存包含的 内容要比局 限于事务的 ABAP/4 内存更广泛。

下列报表以 “HK”为 名称在全局 SAP 内存中存储值:

REPORT SAPMZTS1.

SET PARAMETER ID 'HK' FIELD 'TestParameter'.

该值在下列 报表中作为 参数 TEST 的缺省值使 用:

PROGRAM SAPMZTS2.

PARAMETERS TEST(16) MEMORY ID HK.

 

给参数分配 匹配代码对 象

要给参数分 配匹配代码 对象,请使 用 PARAMETERS 语句的MATCHCODE OBJECT 选项

语法:

PARAMETERS<p> ...... MATCHCODE OBJECT<obj> ......

匹配代码对 象<obj> 的名称必须 是 4 字符的变量名,并且不能用引号封闭。

如果使用该 选项,则可 能的条目按 钮将在参数<p> 的输入字段 之后出现。 用户按下该按钮时,其 结果是为执行输入字段的匹配代码 选择。

匹配代码对 象<obj> 的名称必须 是 4 字符的变量名,并且不能用引号封闭。

这段应该可以理解吧。

--------------------

如果使用该 选项,则可 能的条目按 钮将在参数<p> 的输入字段 之后出现。 用户按下该按钮时,其 结果是为执行输入字段的匹配代码 选择。

就是说,如果使用了 MATCHCODEOBJECT,则参数后面就会出那个小圆疙瘩按钮,按了它,就出<obj>指定的搜索窗口。

PARAMETERS CONN(10) MATCHCODE OBJECTSPFL.

 

给修改组分配参数

要将参数分配给修改组可以使用parameters modif id选项

PARAMETERS<p> ...... MODIF ID<key> ......

修改组 <key>的名称必须 是不带引号 的 3 字符变量名。

MODIF ID 选项总是把<key> 分配到内表 SCREEN 的 SCREEN-GROUP1列。

在 AT SELECTION-SCREEN OUTPUT事件,分配给修改组的参数可以用 LOOP AT SCREEN/MODIFY SCREEN 语句按整个 组进行处理 。

PARAMETERS: TEST1(10) MODIF ID SC1,

           TEST2(10) MODIF ID SC2,

           TEST3(10) MODIF ID SC1,

           TEST4(10) MODIF ID SC2.

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

    IFSCREEN-GROUP1 = 'SC1'.

       SCREEN-INTENSIFIED = '1'.

       MODIFY SCREEN.

       CONTINUE.

    ENDIF.

    IFSCREEN-GROUP1 = 'SC2'.

       SCREEN-INTENSIFIED = '0'.

       MODIFY SCREEN.

    ENDIF.

ENDLOOP.

在 PARAMETERS 语句中,参 数 TEST1 和 TEST3被分配给组 SC1,而 TEST2 和 TEST4 被分配给组 SC2。在 AT SELECTION-SCREEN OUTPUT事件中,按 照 GROUP1 字段的内容,内表 SCREEN 的字段 INTENSIFIED 被设置为 1 或0。在选择屏幕中,TEST1 和 TEST3 所在行被设 置为高亮度 ,而 TEST2 和 TEST4则不是,一般为红色显示!

 

使用选择标准

选择标准 存储在特殊 内表中,以 方便设置数 据库访问条 件。每个选择标准通常分配到数据 库表的特定 列。可以用 SELECT-OPTIONS 语句定义选 择标准。

如果在报表 程序中用 SELECT-OPTIONS 语句定义了选择标准,系统将在报 表选择屏幕 中自动创建输入字段。 这样,用户 可以为访问 相关的数据 库表输入条 件。

如果想编 程实现复合 选择,保存 在指定内表 中的 PARAMETERS选择标准是 很有用的, 因为它们使您不用在长 的 WHERE 条件中进行 编码。

使用 SELECT-OPTIONS 语句定义选 择标准。在定义期间,通常把选择 标准连接到 必须在程序中说明的数 据库表的特 定列上。但 是,您也可 以把选择标 准连接到报 表的内部字段。多数情况下每个选 择标准能连 接到一个数 据库表,而 数据库表可 以连接到几个选择标准

如果您使用 SELECT-OPTIONS 语句,报表 用户可以在选择屏幕中输入选择标 准。

保存选择标 准的内表称 为选择表。

 

选择表

系统为每个 SELECT-OPTIONS 语句创建选 择表。选择表的目的是按标准化的 方式保存复 合选择限制。它们可按 多种方式使 用。它们的 主要目的是 使用 Open SQL 语句的 WHERE子句, 把选择标 准直接传输 到数据库表 。选择表是一 个带表头行的内表。它 的行结构是 字段字符串 ,由四个组 件构成,即SIGN、 OPTION、 LOW 和 HIGH。 每个选择表行表示数据 选择的条件 .

 

    SIGN

SIGN 的数据类型 是 C,长度为 1。SIGN 是标志,表 示保存在OPTION 中的运算符是否需要翻 转。允许值 是 I 和 E。

  I表示“包含 ”(包含标 准-运算符 不翻转)

  E表示“排除 ”(排除标 准-运算符 翻转)

   OPTION

OPTION 的数据类型 是 C,长度为 2。OPTION包含选择运算符。如果 SIGN 包含 E,运算符 的作用就象 它的前面有 NOT一样。下 列运算符是 可用的:

 如果 HIGH 是空的,您 可以使用 EQ 、 NE 、 GT 、 LE 、 LT 、 CP 和 NP。这些 运算符在编程逻辑表达式中描述。运 算符 CP 和 NP 没有它们在 通常逻辑表 达式中所具 有的范围。 只有当在输入字段中使 用了通配符 (“* ”或“ + ”)时它们 才是有效的。没有定义 退出符号。

 如果 HIGH 已被填充, 则可以使用 BT(位于 )和 NB(不位于)。这些 运算符的功 能与 BETWEEN 和 NOTBETWEEN 一样

   LOW

LOW 的数据类型 与数据库表 的列类型相 同,该表与选择标准相连接。

 如果 HIGH 为空,LOW 的内容定义 单值选择。 它与 OPTION 中的运算符 相结合,为 数据库选择 指定了条件 。

   HIGH

HIGH 的数据类型 与数据库表 的列类型相 同,该表与选择标准相连接。HIGH 中的内容为 间隔选择指 定了上界。 与 OPTION 中的运算符 相结合,该 间隔为数据库选择指定了条件。

如果选择表 包含多行, 系统将按下 列规则执行 数据选择:

1.  组成 在 SIGN 字段值为I(包含) 的行上定义 的集合联合 。

2.  去掉 在 SIGN 字段值为E(排除) 的行上定义 的集合联合 。

3.  选择 结果集合。

如果选择表 只具有 SIGN 字段等于 E 的行,系统将选择这些行所指定的集合之外的 所有数据。

 

自定义选择 标准与逻辑 数据库

如果逻辑数 据库与报表 程序相连接 ,并且定义 了与连接数据库的数据库表相连接 的选择标准 ,那么必须 区别两种情 况:

   如果您为 数据库表列 定义了选择 标准,该数 据库不提供 动态选择,您的自 定义选择标 准不会影响 逻辑数据库读入的数据总数。只有在读入后, 您才可以在 GET 事件

中在报表程序中进行检查

      如果您为 具有动态选 择的数据库 表的列定义了选择标准 ,系统将把 用户在选择 屏幕的输入 字段中输入 的值传递给逻辑数据库。在那里, 它们被用作 动态选择。 这种选择比 不具有动态 选择的数据 库表效率更高。

通过用 SELECT-OPTIONS 语句为预知 动态选择的数据库表的行定义选择 标准,可以 使系统直接在选择屏幕 上显示动态 选择。要让 它出现,用 户就不能单 击“用户选 择”。其结果就象用户在屏幕上为 动态选择输 入选择限制 一样。

 

 

定义选择标准

可以用select-options语句定义选择标准,而且又有几个变体

语法:SELECT-OPTIONS<seltab> FOR<f>.

该语句创建 选择表<seltab>, 该表与数据 库表的列<f> 或内部字段<f> 相连接。该 数据库表必须在程序中 用 TABLES语句声明。

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FORSPFLI-CARRID.

LOOP AT AIRLINE.

  WRITE: / 'SIGN:',  AIRLINE-SIGN,

           'OPTION:', AIRLINE-OPTION,

           'LOW:',   AIRLINE-LOW,

           'HIGH:',  AIRLINE-HIGH.

ENDLOOP.

说明选择表是如何用选择屏幕中的用户输入填充的

给选择标准分配缺省值

SELECT-OPTIONS<seltab> FOR<f> DEFAULT<g> [TO<h>] ....

系统在时间事件initialization之前把缺省值传给选择标准,

只设置low字段使用…default<g>

如果设置low和high字段 增加to

…DEFAULT<g> TO<h>.

把选择表限制在一行

要把用户对选择表的访问限制在第 一行,请使 用 SELECT-OPTIONS语句的 NO-EXTENSION.

如果指定该选项,则选择屏幕上不出现右箭头,并且用户不能访问复杂选择窗口,

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO-EXTENSION.

 

要将选择屏 幕上选择标 准的外观限 制为单值选 择,请使用SELECT-OPTIONS 语句的 NO INTERVALS

SELECT-OPTIONS<seltab> FOR<f> ..... NO INTERVALS .....

如果指定该 选项,则“ 到”字段不 出现在选择 屏幕上。选择屏幕上的输入将限制 为单值选择

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO INTERVALS.

 

用户只能直 接输入单值 选择,但是 ,用户通过 单击屏幕右边的箭头可以输入进一 步选择。

如果增加 NO-EXTENSION 选项,如下 所示:

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FOR SPFLI-CARRIDNO INTERVALS

                                       NO-EXTENSION.

避免将选择标准传递到逻辑性数据库

 

如果逻辑数据库被连接到报表程序,就能把选择标准连接到作为逻辑数据库一部分的数据库表.如果数据库表允许动态选择,则系统将相应的选择标准传递到逻辑数据库

当将选择标准用于其它目的而不是限制数据库访问时,使用SELECT-OPTIONS 语句的 NO DATABASE SELECTION选项,

逻辑数据库 F1S 被连接到下 列报表程序 。数据库表 SPFLI 的列CONNID 具有动态选 择

SELECT-OPTIONS<seltab> FOR<f> ..... NO DATABASE SELECTION.....

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS CONN FOR SPFLI-CONNID NODATABASE SELECTION.

GET SPFLI.

   IFSPFLI-CONNID IN CONN.

    WRITE: SPFLI-CARRID, SPFLI-CONNID, 'meets criterion'.

  ELSE.

    WRITE: SPFLI-CARRID, SPFLI-CONNID,

                        'does not meet criterion'.

  ENDIF.

选择屏幕的 第一部分在 逻辑数据库 中定义。最 后一行 (CONN)在报表程序 中定义。

 

选择标准的其它选项

 

有很多选项 可以和 SELECT-OPTIONS 语句一起使 用

   要在选择 屏幕上禁止 显示选择标 准,请使用

   SELECT-OPTIONS <seltab> FOR<f> ... NO-DISPLAY ..............

   要使选择 标准能够接 受大写和小 写字母,请 使用

   SELECT-OPTIONS <seltab> FOR<f> ... LOWER CASE ..............

   要进行选 择屏幕上的 “到”字段 所必需的选 择,请使用

   SELECT-OPTIONS <seltab> FOR<f> ... OBLIGATORY ..............

   要为“到 ”字段从 SAP 内存中使用 缺省值,请 使用

   SELECT-OPTIONS <seltab> FOR<f> ... MEMORY ID<pid>..........

   要将选择 标准的字段 分配给修改 组,请使用

   SELECT-OPTIONS <seltab> FOR<f> ... MODIF ID<key>...........

   要将匹配 码对象分配 给选择标准 的“从”和 “到”字段 ,请使用

   SELECT-OPTIONS <seltab> FOR<f> ... MATCHCODE OBJECT<obj>...

 

 

使用报表的选择屏幕

 

可以使用选 择表中输入 的选择标准 ,以便在报 表程序中完成三个不同的任务:

在 WHERE 子句中使用 选择表

  要限制开放式SQL语句selectupdate和delete的数据库访问,使用where子句

要在where条件中使用选择表,

......... WHERE<f> IN<seltab>.

<f>是数据库字段的不带前缀的名称,而<seltab>是与该字段相连接的选择表,如果你用开放式sql语句,使用where条件,则系统只访问指定数据库的某些行,

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS AIRLINE FORSPFLI-CARRID.

SELECT * FROM SPFLI WHERE CARRID INAIRLINE.

  WRITE SPFLI-CARRID.

ENDSELECT.

 

在逻辑表达式中使用选择表

 

要控制程序的内部流程,必须用逻辑表达式编写条件,可以用选择表档

标准,

语法

... <f>IN <seltab> ....

示例:

在select循环中,所有的行都从数据库表spfli中读取,使用if语句,程序流程会被子分支成两个流程块,

REPORT SAPMZTST.

TABLES SPFLI.

SELECT-OPTIONS: S_CARRID FORSPFLI-CARRID,

               S_CITYFR FOR SPFLI-CITYFROM,

               S_CITYTO FOR SPFLI-CITYTO,

               S_CONNID FOR SPFLI-CONNID.

SELECT * FROM SPFLI.

  CHECK: S_CARRID,

         S_CITYFR,

         S_CITYTO,

         S_CONNID.

  WRITE: / SPFLI-CARRID, SPFLI-CONNID,

         SPFLI-CITYFROM, SPFLI-CITYTO.

ENDSELECT.

 

在 SELECT 循环中,系 统从数据库 表 SPFLI中读取所有的行。在这些行中,系 统只把满足 选择表中的 条件的行写 到输出屏幕 。否则,CHECK 语句之后, 系统将离开循环传递。CHECK 语句使用了 逻辑表达式 的短格式。 长格式是:

CHECK: SPFLI-CARRID IN S_CARRID,

      SPFLI-CITYFR IN S_CITYFR,

      SPFLI-CITYTO IN S_CITYTO,

      SPFLI-CONNID IN S_CONNID.

在 GET 事件中与 CHECK 语句一起使 用选择表

可以使用 CHECK语句离开,循环,子程序,处理块,该变体只能在读出一条语句之后使用,

要检查该行 的内容是否 满足所有与 该数据库相 连接的选择表中存储的选择标准, 请使用 CHECK 语句

语法

CHECK SELECT-OPTIONS.

使用该语句 ,可以通过 所有选择表 检查实际数 据库表(由 GET给出地址)的内容,数 据库表通过使用不同的 SELECT-OPTIONS 语句连接到 选择表。CHECK 语句的该变体

逻辑数据库 F1S 与下列报表 相连接:

REPORT SAPMZTST.

TABLES: SPFLI,SFLIGHT.

SELECT-OPTIONS:MAX    FORSFLIGHT-SEATSMAX,

               OCC    FORSFLIGHT-SEATSOCC.

GET SFLIGHT.

  WRITE: / SPFLI-CARRID, SPFLI-CONNID.

  CHECK SELECT-OPTIONS.

  WRITE: SFLIGHT-SEATSMAX, SFLIGHT-SEATSOCC.