-------------------------------------------------2007-07-04~2007-07-06--------------------------------------------------
SELECT-OPTIONS
语句的基本 格式
创建退出按钮
事务
在对话程序中设置 GUI
处理用户请求
根据数据字典定义输入框
根据标准关键字附加行
更改选择屏变量的显示名称
导出SAP中的数据
将组件编组
SELECT-OPTIONS
语句的基本
格式
SELECT-OPTIONS <seltab> FOR <f>.
该语句创建选择表<seltab>, 该表与数据库表的列<f> 或内部字段<f>相连接。该数据库表必须在程序中用 TABLES语句声明。名称<seltab>最多可以包含8个字符。
选择表<seltab>由报表用户在选择屏幕中填充。在程序中,可以修改选择表的行或往里面添加更多的行。
可以用在选择文本中描述的文字摘要来更改选择屏幕上输入字段左面的文本字段。
下列示例说明选择表是如何用选择屏幕中的用户输入填充的:
创建退出按钮
1. 放上退出按钮,设置退出按钮的常规属性.
2. 将按钮的FctCode设置好(自定义),FctType设置成”E Exit command”类型
3. 在屏幕PAI中写入
module cancel at exit-command.
4.
在主程序中放入
module cancel input.
leave program.
endmodule. " cancel INPUT
事务:
是实施与用户对话的程序。在典型的对话中,用户可以在系统显示的屏幕上输入或请求信息。作为对用户输入或请求的响应,程序执行适当的动作:转到下一个屏幕,显示输出或更改数据库 。
l
屏幕(动态程序)
SAP
系统中的每个对话都是由动态程序控制的。动态程序包含一个屏幕和它的流逻辑并且精确控制一个对话步骤。流逻辑决定在显示屏幕前(输出前的 PBO 处理)和接收到用户在屏幕上制作的条目后( 输入后的 PAI 处理)进行的处理。
l ABAP/4 模块池
每个动态程序都精确指向一个ABAP/4对话程序。这样的对话程序也称为模块池,原因是它包含交互模块。动态程序的流逻辑包含从相应模块池中调用模块。在PBO事件中调用 的交互模块依照上下文进行屏幕模板的准备.从一个事务中调用的所有动态程序都指向一个公用模块池,模块池的动态程序是编号的。默认情况下,系统为每个 动态程序存储下一个要显示的动态程序。该动态程序序列或链可以是线性的也可以是环型的。在动态程序链中甚至可以调用另一个动态程序链,并且在处理它之后返回原始链。
l 流逻辑
动态程序的流控制代码包括句法上与ABAP/4相似的一些 语句。但不能在ABAP/4中使用流控制关键字,反之亦然。在屏幕制作器中输入流控制代码作为动态程序的一个组件。流控制语言仅包含几种语句类型。最重要的是 MODULE、 FIELD、 CHAIN、 LOOP、 CALL SUBSCREEN
在对话程序
中设置
GUI
可以用关键字
SET PF-STATUS在对话程序中设置
GUI状态:
SET PF-STATUS <GUI_status>.
<GUI_status> 是可以有8个字符的字符 串,它可以是文字(在 单引号内)或变量。按如下方式用关键字
SET TITLEBAR 设置屏幕或对话框的标题:
SET TITLEBAR <title> WITH <p1> <p2> <p3> <p4>.
处理用户请求
执行动作时,系统触发PROCESS AFTER INPUT 事件。传送的数据包括由用户输入的字段屏幕数据和功能代码。功能代码是个技术名称,在屏幕制作器或菜单制作器中将它分配给菜单项 、按钮、ENTER 键或屏幕的功能键。PAI模块中的内部工作区(
ok-code) 根据功能代码执行相应的动作。
根据数据字典定义输入框
将元件编组
根据标准关键字附加行
要用有唯一 标准关键字 的行填充内 表,请使用 COLLECT 语句,用法 如下:
语法
COLLECT [<wa> INTO] <itab>.
该语句通过 使用 INTO 选项指定想 附加的源区 域 <wa>。 如果表格有 表头行,则 可以忽略 INTO 选项。这样 ,表格工作 区域就成了 源区域。
系统检查表 格条目的标 准关键字是 否相同(所 有非数字字 段,参见 内表关键字)。如果没 有,COLLECT 语句的作用 与 APPEND 语句相似, 并将新行添 至表格中。
如果存在关 键字相同的 条目,COLLECT 语句不附加 新行,但将 工作区域中 数字字段的 内容添加到 现有条目中 数字字段的 内容中。系 统字段 SY-TABIX 包含处理过
的行的索引 。
为 COLLECT 指定的工作 区域必须与 内表的行类 型兼容,不 仅仅是可转 换为内表的 行类型。COLLECT 语句无法用 于带深层结 构的内表, 例如,将内 表作为组件 的行。
如果仅使用 COLLECT 语句填充内 表,则不会 出现重复条 目。因此要 填充没有重 复条目的内 表,应该使 用 COLLECT 而不是 APPEND 或 INSERT。
DATA: BEGIN OF ITAB OCCURS 3,
COLUMN1(3) TYPE C,
COLUMN2(2) TYPE N,
COLUMN3 TYPE I,
END OF ITAB.
ITAB-COLUMN1 = 'abc'. ITAB-COLUMN2 = '12'. ITAB-COLUMN3 = 3.
COLLECT ITAB.
WRITE / SY-TABIX.
ITAB-COLUMN1 = 'def'. ITAB-COLUMN2 = '34'. ITAB-COLUMN3 = 5.
COLLECT ITAB.
WRITE / SY-TABIX.
ITAB-COLUMN1 = 'abc'. ITAB-COLUMN2 = '12'. ITAB-COLUMN3 = 7.
COLLECT ITAB.
WRITE / SY-TABIX.
LOOP AT ITAB.
WRITE: / ITAB-COLUMN1, ITAB-COLUMN2, ITAB-COLUMN3.
ENDLOOP.
其输出为:
1
2
1
abc 12
10
def 34
5
本示例创建 带表格工作 区域的内表 ITAB。 前两个 COLLECT 语句和 APPEND 语句一样。 在第三个 COLLECT 语句中,修 改了 ITAB 的第一行。 下面的数字
图表显示三 个步骤:
更改选择屏变量的显示名称
设置
RFC
参数
导出
SAP
中的数据