ABAP语法详解教材 第110章 逻辑数据库的特征和维 护

更新时间:2024-01-12 18:57:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1第十章 逻辑数据库 的特征和维 护 概览

内容

逻辑数据库 的特征 ........................................................................................................................... 1

逻辑数据库 的任务 ..................................................................................................................... 1 逻辑数据库 的基本特征 .............................................................................................................. 2 逻辑数据库 的授权检查 .............................................................................................................. 8 逻辑数据库 的性能 ..................................................................................................................... 8 逻辑数据库 示例 ......................................................................................................................... 9 创建和维护 逻辑数据库 ................................................................................................................ 11 创建逻辑数 据库 ..................................................................................................................... 11 处理结构 ................................................................................................................................. 12 编辑选择 ................................................................................................................................. 13 编辑数据库 程序 ..................................................................................................................... 14 编辑选择文 本 ........................................................................................................................ 18 编辑匹配码 选择 ..................................................................................................................... 19 编辑文档 ................................................................................................................................. 21 其它编辑选 项 ........................................................................................................................ 21 编辑数据模 型 ........................................................................................................................ 21 检查逻辑数 据库 ..................................................................................................................... 22 复制逻辑数 据库 ..................................................................................................................... 22 删除逻辑数 据库 ..................................................................................................................... 22

逻辑数据库 是 ABAP/4 报表读取和 处理数据的 方法。每个 ABAP/4 报表都链接 到报表属性 指定的逻辑 数据库中。

逻辑数据库 有个三字符 的名称(例 如,KDF) ,其最后字 母表示应用 。定义报表 属性时如果 不指定逻辑 数据库的名 称,则系统 使用控制选 择屏幕格式 的标准数据 库,但不读 取任何数据 。 在本节中, 还可以了解

有关逻辑数 据库的其它 节:

通过逻辑数 据库访问数 据的一般介 绍,参见

使用逻辑数据库访问数据库表 (页 Error! Not a valid link.) 。

关于如何使 用报表中连 接到选定屏 幕的逻辑数 据库的信息 ,参见 选择屏幕与 逻辑数据库 (页 错误!链接无效。)

关于在报表 中如何分析 逻辑数据库 读取的数据 的信息,参 见 通过事件控制 ABAP/4 程序流 (页 错误!链接无效。)

逻辑数据库 的特征

逻辑数据库 能提高数据 库访问的效 率并且提供 易于使用和 生成的用户 界面。 在下列主题 中,可以了 解 关于逻辑数 据库的示例 ,参见

逻辑数据库 的任务

逻辑数据库 允许集中编 程几个不同 的任务。例 如,在逻辑 数据库中集 中编码用户 界面格式和 数据库访问 ,以避免报 表的应用逻 辑去处理技 术细节。逻 辑数据库可 以执行下列 任务:

如果几个 报表读取相 同数据,则 可以在单个 逻辑数据库 中编码读取 访问。对于 单

个报表, 不再需要知 道所涉及的 数据库表的 确切结构( 特别是外来 关键字相关 性)。但是 ,可以肯定 当执行 GET 事件时将以 正确的顺序 检索该项。

如果要为 几个报表使 用相同用户 界面,则可 以使用逻辑 数据库的选 择屏幕轻易

地达到目的 。要达到必 要的适应性 ,可以生成 自己的选择 屏幕版本。 在逻辑数 据库中集中 编码重要( 以及敏感的 )数据的授 权检查,以 使它们不受 单

个报表的 影响。

如果要提 高响应时间 ,则逻辑数 据库允许采 取多种措施 达到目的( 例如使用视 图

替代嵌入 的 SELECT 语句)。这 些在所有相 关报表中立 即生效并且 避免修改源 代码。

逻辑数据库 的基本特征

下列定义解 释了逻辑数 据库的基本 特征:

定义 ABAP/4 报表使用逻 辑数据库读 取和处理数 据。报表可 用的数据顺 序取决于相 关逻辑数据 库的层次结 构。逻辑数 据库也提供 用户对话框 (即选择平 幕)的界面 并且将用户 输入检查和 错误对话组 合起来。可 以在报表中 修改并扩展 该界面。 该定义由逻 辑数据库格 式实现: 格式 逻辑数据库 包括至少下 列三个组件 : 结构 结构是逻辑 数据库的基 本组件。它 决定其它组 件的结构以 及运行时逻 辑数据库的 行为。 逻辑数据库 结构 (页 2) 选择 该组件决定 每个报表的 用户界面。 其格式通常 由结构决定 。可以调整 和扩展选择 以适应需要 。 逻辑数据库 选择 (页 3) 数据库程 序 数据库程序 是选择数据 并将其传递 到报表的子 程序集合。 数据库程序 的格式由结 构和选择共 同决定。可 以调整和扩 展数据库程 序以适应需 要。 逻辑数据库 的数据库程 序 (页 4) 其它组件诸 如文档、特 定语言文本 和用户定义 选择屏幕将 进一步扩展 功能。 逻辑数据库 允许模块化 报表中使用 的应用程序 :

逻辑数据库 和报表 逻辑数据库 程序中的子 程序和报表 的处理块, 其中将逻辑 数据库指定 为属性,组 成执行数据 库访问的模 块化系统。 与逻辑数据 库的结构和 选择屏幕分 开,报表中 的 GET 语句决定运 行时数据库 的行为。 逻辑数据库 和 ABAP/4 报表 (页 6)

逻辑数据库 结构

通常,逻辑 数据库反映 SAP 系统中层次 表格的外来 关键字相关 性。(参见 使用逻辑数据库访问数据 (页 错误!链接无效。) )。

逻辑数据库 有定义如下 的层次结构 :

最高层只 有一个节点 ,称为根节 点。 每个节点 可以有一个 或几个分支 。 每个节点 从其它节点 派生。

必须在 ABAP/4 字典中定义 节点结构。 一般地,这 些结构都是 逻辑数据库 为进一步评 估而读取并 传递到 ABAP/4 报表的数据 库表格结构 。但是,使 用不带下面 数据库的 ABAP/4 字典有时也 是可能并有 用的。

3由于技术原 因,在逻辑 数据库结构 中节点数目 有上限(MAX) 。上限如下 计算:

LEN = 结构中名称 的最大长度 (例如 7)。 MAX = 1200 / LEN (例如 1200 / 7 = 171)。

ABAP/4 报表可以在 逻辑数据库 的结构中为 每个节点包 含 GET 语句。运行 时按层次结 构中所定义 的顺序执行 处理块。

如果报表没 有为逻辑数 据库的每个 节点包含 GET 语句,则处 理块传递给 位于从根到 GET 语句指定节 点路径上的 所有节点。

假定 LFA1 是根节点, LFBK 和 LFB1 是 LFA1 的分支,并 且 LFC1 是 LFB1 的分支。 如果报表为 所有节点都 包含 GET 语句,则以 LFA1、 LFBK、 LFB1、 LFC1 的顺序执行 GET 事件。 如果报表只 对 LFB1 包含 GET 语句,则处 理只传递到 LFA1 和 LFB1。 关于结构如 何影响选择 和数据库程 序的详细信 息,参见 创建和维护 逻辑数据库 (页 11) 。

逻辑数据库 选择

在逻辑数据 库中,可以 使用 SELECT-OPTIONS 和 PARAMETERS 语句在选择 屏幕上定义 输入字段。 通过称为选 择包含程序 的特定包含 程序的帮助 可达此目的 。在每个 ABAP/4 报表中,可 以通过定义 报表特定选 择扩展逻辑 数据库选择 。所有报表 特定选择都 显示在特定 数据库选择 之后。

生成报表的 选择平幕时 ,系统只考 虑数据库的 特定选择标 准和参数, 其相应表格 (由选择包 含程序中的 SELECT-OPTIONS 和 PARAMETERS 语句的 FOR 选项定义, 参见 编辑选择 (页 13) )由报表中 的 TABLES 语句声明。

假定逻辑数 据库程序包 含下列行: SELECT-OPTIONS SLIFNR FOR LFA1-LIFNR. PARAMETERS PBUKRS LIKE LFB1-BUKRS FOR TABLE LFB1. 选择标准 SLIFNR 链接到表格 LFA1, 参数 PBUKRS 链接到表格 LFB1。 如果报表中 的 TABLES 语句声明 LFA1 但未声明 LFB1, 则在选择屏 幕上显示 SLIFNR, 但不显示 PBUKRS 。 可以通过逻 辑数据库包 含程序中的 SELECTION-SCREEN 语句格式化 选择屏幕( 例如,通过 定义框、按 钮、单选按 钮和空行, 或者通过在 一行中写入 几个 PARAMETER) (参见 格式化选择标准 (页 错误!链接无效。) )。

通过使用带 SELECT-OPTIONS 和 PARAMETERS 语句的附加 VALUE-REQUEST 和 HELP-REQUEST, 可以显示选 择屏幕字段 的可能输入 值和字段文 档(参见相 应关键字文 档)。 动态选择

动态选择除 了允许用户 在逻辑数据 库选择包含 程序中已定 义的选择标 准之外,另 外还允许定 义进一步的 选择。由于 性能原因, 应该只为不 是特定表格 的选择,在 报表中的 GET 事件过程中 ,而使用带 CHENK 语句的选择 标准(参见 有条件地离 开 GET 事件 (页 错误!链接无效。) )。否则, 直到数据库 访问之后才 执行选择。

另一方面, 动态选择在 逻辑数据库 的数据库访 问期间已经 生效。要支 持数据库表 格 的动态选择 ,必须在逻 辑数据库的 选择包含程 序中指定下 列语句:

SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE .

这种情况下 ,如果在报 表中使用表 格 ,则“动态 选择”按钮 显示在选择 屏幕上(参 见 SELECTION-SCREEN 的关键字文 档)。按该 按钮允许用 户为由逻辑 数据库定义 的字段输入 动态选择( 参见选择标准与逻辑数据库 (页 错误!链接无效。) )。为 事件关键字 GET 选择数据时 ,逻辑数据 库在动态 WHERE 条件下使用 它们。

在 ABAP/4 开发工作台 中,用户可 以以逻辑数 据库选择视 图的格式定 义动态选择 的字段列表 。这些视图 由其来源( ‘CUStomer’ 的‘SAP’ 或者‘CUS’ )标识,逻 辑数据库名 称和带有此 处描述的选 择屏幕的功 能名称必须 总是‘STANDARD’ 。只有未创 建带源‘CUS’ 的选择视图 时,系统才 使用带源‘ SAP’的 选择视图。 这样,用户 可以为其所 需定义最好 的逻辑数据 库选择视图 。

4定义选择屏 幕版本

逻辑数据库 选择屏幕( 屏幕号 1000 )有标准的 格式,其中 选择标准和 参数以声明 的顺序显示 在各行中。 系统为每个 没有在属性 中指定选择 屏幕的报表 自动生成该 屏幕。

如果要为报 表消除某个 逻辑数据库 选择屏幕的 输入字段, 则可以在选 择包含程序 中定义选择 屏幕版本( 屏幕号小于 或等于 999 )并且将其 输入报表属 性。通过按 F4,可以 得到相关逻 辑数据库中 定义的选择 屏幕版本概 述。使用 SELECTION-SCREEN BEGIN|END OF VERSION 和 SELECTION-SCREEN EXCLUDE 语句定义选 择屏幕版本 。后一语句 允许指定想 要从选择屏 幕版本中排 除的对象( 参见 编辑选择 (页 13) )。使用 SELECTION-SCREEN 语句,可以 定义其它格 式。 如果报表属 性包含选择 屏幕版本号 ,则系统在 生成选择屏 幕时将该版 本号用作模 型。自动为 选择屏幕版 本生成屏幕 流逻辑并因 而不能修改 。特别不允 许删除特定 数据库选择 。 选择屏幕版 本替代 3.0 版本之前所 使用的特定 用户选择屏 幕。

关于选择屏 幕和 PARAMETERS、 SELECT-OPTIONS 以及 SELECTION-SCREEN 语句的详细 信息,参见 使用选择屏幕 (页 错误!链接无效。) 。

逻辑数据库 的数据库程 序

逻辑数据库 的数据库程 序的名称符 合命名规则 SAPDB。 重要的是, 它包括系统 在运行 ABAP/4 报表时调用 的子程序集 合。

报表中带事 件关键字的 子程序之间 的相互作用 ,在 逻辑数据库 和 ABAP/4 报表 (页 6) 中进行了描 述。

逻辑数据库 的结构决定 PUT 语句的行为 ,该语句在 子程序 PUT_ 中很重要( 参见下面) 。 逻辑数据库 程序通常包 含 定义子程序 (页 错误!链接无效。). 中描述的下 列子程序, 并且都使用 FORM 语句定义。

FORM INIT

在显示选择 屏幕之前调 用一次。 FORM PBO

每次刷新选 择屏幕之前 调用。 FORM PAI

用户每次在 选择屏幕上 按 ENTER 时调用。

系统将参数 FNAME 和 MARK 传递给子程 序,这些参 数自动定义 和填充。 - FNAME 包含选择屏 幕上选择标 准或参数的 名称。 - MARK 说明用户所 做的选择:

MARK = SPACE 意味着用户 已经输入简 单的单值或 范围选择。 MARK = '*' 意味着用户 已经在“多 重选择”屏 幕上制作条 目。

FORM PUT_

以逻辑数据 库结构决定 的顺序调用 子程序。使 用 SELECT 语句读取节 点 的数据,并 且 PUT 语句将程序 流定向到报 表中合适的 GET 语句中。PUT 语句是该子 程序的主语 句:

语法

PUT < table >.

只能在逻辑 数据库子程 序中使用 PUT 语句,该逻 辑数据库包 含以 PUT_< table > 开头的名称 的节点 。

PUT 语句根据逻 辑数据库的 结构定向程 序流。读取 深度由有关 报表中的 GET 语句决定。 首先,为根 节点执行子 程序 PUT_。 PUT 语句然后如 下定向程序 流: 1. 如果 数据库程序 包含子程序 AUTHORITY_CHECK_< table >,则首先 执行该子程 序。 2? PUT 语句试图触 发报表中的 GET 事件,即如 果存在相关 GET 语句,则执 行合适的代 码块。 3. PUT 语句将程序 流定向到 - 下一节 点的子程序 上,前提是 节点的 GET 语句在报表 中相关分支 的较低级别 上。 5- 相同级 别节点的子 程序上,前 提是先前节 点分支到此 节点并且在 报表中存在 该节点的 GET 语句。 步骤 1 时子程序中 的 PUT 再次起动。 如果它到达 有 GET 语句的报表 中分支的最 低层节点的 子程序,则 不再分支, 但继续处理 当前子程序 。当处理完 整个 PUT_ 子程序时, 程序流返回 将其分支到 子程序 PUT_ 处的 PUT 语句。 4. 从下 级子程序 PUT_< table > 返回后,如 果存在的话 ,PUT 语句分支到 报表的 GET LATE 语句。 在逻辑数据 库结构中, LFB1 是 LFA1 的分支。 假定在选择 包含程序中 定义如下选 择标准: SELECT-OPTIONS: SLIFNR FOR LFA1-LIFNR, SBUKRS FOR LFB1-BUKRS. 将读取数据 库程序的某 节: FORM PUT_LFA1. SELECT * FROM LFA1 WHERE LIFNR IN SLIFNR. PUT LFA1. ENDSELECT. ENDFORM. FORM PUT_LFB1. SELECT * FROM LFB1 WHERE LIFNR = LFA1-LIFNR. AND BUKRS IN SBUKRS. PUT LFB1. ENDSELECT. ENDFORM. 链接到逻辑 数据库的报 表将包含: GET LFA1. WRITE LFA1-LIFNR. GET LFB1. WRITE LFB1-BUKRS. 在该示例中 ,系统在选 择处理的开 始时调用过 程 PUT_LFA1。 PUT LFA1 语句将程序 流定向到报 表中的GET LFA1 语句处理块 上。当执行 该块时, PUT LFA1 转到子程序 PUT_LFB1, 该子程序将 程序流定向 到报表中的 GET LFB1 语句。如果 LFB1 是读取的最 后节点,则 用 PUT_LFB1 中的 SELECT 循环恢复处 理。否则, 程序流移到 下一节点的 PUT_< table > 子程序上。 在最后节点 的 SELECT 循环末尾、 下一级开始 处节点的 SELECT 循环中恢复 处理。 下列图象显 示程序流: 在该示例中 ,PUT 语句不分支 到授权检查 子程序。 FORM AUTHORITY_CHECK_< table >

由 PUT 语句自动调 用。在该子 程序中,可 以从逻辑数 据库结构中 为合适的节 点 指定授权检 查。 FORM PUT__MATCHCODE

在带有选定 匹配码记录 的匹配码选 择的情况下 调用。 是逻辑数据 库的名称。 从该子程序 ,可以使用 匹配码记录 从根节点 读取相关项 。可以用 PUT 调用报表中 的处理。

FORM BEFORE_EVENT, AFTER_EVENT

在事件之前 或之后调用 ,其名称在 参数 EVENT 中传递。

6 用如下方式 给字段 EVENT 赋值: EVENT = 'START-OF-SELECTION'. 然后可以在 BEFORE_EVENT 和 AFTER_EVENT 子程序的列 表中使用它 。 FORM _VAL, _VAL, -LOW_VAL, -HIGH_VAL

当用户按 F4 以获取参数 输入字段的 可能条目列 表或者为了 获得选择屏 幕上的选择 标准 (都是特定 数据库)时 调用。

FORM _HLP, _HLP, -LOW_HLP, -HIGH_HLP

当用户按 F1 以获取参数 输入字段的 可能项的帮 助或者为了 要获得选择 屏幕上的选 择标准 (都是特定 数据库)时 调用。

关于该主题 的详细信息 ,参见:

创建和维护 逻辑数据库 (页 11)

带附加 VALUE-REQUEST 和 HELP-REQUEST的 SELECT-OPTIONS 关键字文档 带附加AS MATCHCODE STRUCTURE、 VALUE-REQUEST 和 HELP-REQUEST的

PARAMETERS 关键字文档

逻辑数据库 和 ABAP/4 报表

生成 ABAP/4 报表时的逻 辑数据库

每个 ABAP/4 报表都链接 到报表属性 中指定的逻 辑数据库上 。该逻辑数 据库将影响 报表的生成 :

生成的选 择屏幕包含 逻辑数据库 选择(选择 标准和参数 )和报表。 在选择屏 幕上,只显 示报表中与 数据评估相 关的特定数 据库选择。 链接到逻辑 数据库的报 表的运行行 为

当执行链接 到逻辑数据 库的报表时 ,系统以特 定顺序调用 一系列处理 块(参见 ABAP/4 处理程序 (页 错误!链接无效。) )。某些处 理在报表中 编码而某些 则在逻辑数 据库程序中 编码。

在数据库程 序 SAPDB 中执行特定 数据库子程 序(参见 逻辑数据库 的数据库程 序 (页 4) )。 在 ABAP/4 报表中执行 事件的处理 块(关于事 件和示例的 详细信息, 参见 事件及其事件关键字 (页 错误!链接无效。) )。 下列列表包 含系统为链 接到逻辑数 据库 的 ABAP/4 报表而执行 的处理步骤 。在每种情 况下,ABAP/4 程序代码行 指定属于这 些步骤的处 理块(子程 序和事件) 。

1. 在显 示选择屏幕 之前初始化 (例如,关 键数据的默 认值) PBO。

- 子程序 :

FORM INIT

在第一次显 示选择屏幕 之前调用一 次该子程序 。 FORM PBO.

每次刷新选 择屏幕时调 用该子程序 (在用户按 ENTER 之后)。 - 事件:

INITIALIZATION.

在第一次显 示选择屏幕 之前发生该 事件(参见 INITIALIZATION (页 错误!链接无效。) )。

AT SELECTION-SCREEN OUTPUT.

该事件在每 次刷新选择 屏幕时发生 (参见 选择屏幕的 PBO (页 错误!链接无效。) )。

2. 系统 显示选择屏 幕,用户在 输入字段中 输入数据。

3. 当用 户在选择屏 幕上按 F4 或 F1 时,显示可 能的条目和 帮助。

- 子程序 :

7FORM _VAL.

FORM _VAL.

FORM -LOW_VAL. FORM -HIGH_VAL.

如果用户请 求特定数据 库参数 的可能条目 (F4) 列表或者选 择标准 ,则根据需 要调用子程 序。

如果用户请 求这些参数 的帮助 (F1) ,则调用以 _HLP 而不是 _VAL 结尾的子程 序。 - 事件:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR -LOW. AT SELECTION-SCREEN ON VALUE-REQUEST FOR -HIGH. 如果用户请 求特定数据 库参数 的可能条目 (F4) 列表或者选 择标准 , 则事件发生 (参见 创建输入值 列表 (页 错误!链接无效。) )。 如果用户请 求这些参数 的帮助 (F1), 则带附加 ON HELP-REQUEST 的事件发生 而不是 ON VALUE-REQUEST (参见 创建输入字段的帮助 (页 错误!链接无效。) )。

4. PAI, 系统检查用 户输入是否 正确、完整 和可行,还 检查用户授 权。如果检 测到

错误, 则导出个与 用户间的对 话并要求再 次输入某些 条目,以便 矫正错误。 - 子程序 :

FORM PAI USING FNAME MARK.

系统决定并 填充字段 FNAME 和 MARK。

FNAME 包含选择屏 幕上的选择 标准或参数 的名称。

如果 MARK = SPACE, 则用户已经 输入简单单 值或范围选 择。 如果 MARK = '*',则 用户已经在 “多重选择 ”屏幕上输 入选择。

联合使用 FNAME = '*' 和 MARK = 'ANY', 则可以在用 户选择“确 定”后立即 检查所有条 目。 - 事件:

AT SELECTION-SCREEN ON .

在处理特定 输入字段之 后的事件。 必须在报表 中指定字段 ( 参见 处理特殊输 入字 (页 错误!链接无效。) )。

AT SELECTION-SCREEN ON END OF .

在处理多重 选择之后的 事件。必须 在报表中指 定字段 (参见 处理多重选择 (页 错误!链接无效。) )。 AT SELECTION-SCREEN.

用户通过选 择“确定” 显示整个选 择屏幕之后 的事件。参 见 AT SELECTION-SCREEN (页 错误!链接无效。).。

5. 逻辑 数据库中的 数据选择和 ABAP/4 报表中的处 理

- 子程序 :

FORM PUT_.

逻辑数据库 读取节点 的选择。 - 事件:

START-OF-SELECTION.

在该事件中 ,ABAP/4 报表执行准 备工作(例 如从文件输 入数据)。 参见 START-OF-SELECTION (页 错误!链接无效。) 。 GET [LATE].

报表处理以 逻辑数据库 结构决定的 顺序读自 的数据(参 见 GET

(页 错误!链接无效。) and GET LATE (页 错误!链接无效。))。 END-OF-SELECTION.

在该事件中 ,ABAP/4 报表执行结 束操作(例 如,计算总 计,向文件 输出数据) 。参见 END-OF-SELECTION (页 错误!链接无效。) 。 假定 TABLE1 是根节点并 且 TABLE2 是其在逻辑 数据库中仅 有的子程序 。这种情况 下,数据选 择的处理步 骤嵌套和处 理如下: 1. START-OF-SELECTION. 报表中的准 备步骤。 2. FORM PUT_TABLE1. 在数据库程 序中循环读 取 TABLE1 83. GET TABLE1. 报表中 TABLE1 的数据处理 4. FORM PUT_TABLE2. 在数据库程 序中循环读 取 TABLE2 5. GET TABLE2. 报表中 TABLE2 的数据处理 6. GET TABLE1 LATE. 结束 TABLE1 循环,报表 中的数据处 理 7. END-OF-SELECTION. 结束报表中 的步骤。 子程序

PUT__MATCHCODE

BEFORE_EVENT AFTER_EVENT

在程序流中 由系统在合 适点处调用 。

根据要作的 授权检查, 可以将子程 序 AUTHORITY_CHECK_ 放置在报表 中(参见 逻辑数据库 的授权检查 (页 8) )。

关于数据库 程序的详细 信息,参见 编辑数据库 程序 (页 14) 。

逻辑数据库 的授权检查

通常,可以 在下列数据 库程序的子 程序或者报 表的处理块 中包括授权 检查:

数据库程 序中的子程 序:

- PAI

- AUTHORITY_CHECK_ 报表中的 事件关键字 :

- AT SELECTION-SCREEN

- AT SELECTION-SCREEN ON

- AT SELECTION-SCREEN ON END OF - GET

将授权检查 放置在数据 库程序还是 放在报表中 取决于:

逻辑数据 库的结构; 例如,如果 在运行时读 取包含公司 代码字段的 行,则应该 只

检查公司 代码授权。

性能;例 如在 SELELCT 循环中不执 行重复检查 。

在任何情况 下,数据库 访问和应用 逻辑的分离 允许在逻辑 数据库程序 中集中地编 码所有授权 。这使维护 大的编码系 统更加容易 。

逻辑数据库 的性能

因为在所有 有关的 ABAP/4 报表中更改 逻辑数据库 将立即生效 ,所以通过 集中优化可 以提高程序 库中的不同 对象的响应 时间。

通过允许用 户精确指定 系统从数据 库中读取哪 个表格条目 可以获得最 大的性能提 高。为此, 可以在数据 库程序中使 用下列技术 :

选择标准 和参数(参 见 使用选择屏幕 (页 错误!链接无效。) ),可能带 默认值和

值 列表。

动态选择 (参见 逻辑数据库 选择 (页 3) )。

匹配码选 择(参见 编辑匹配码 选择 (页 19) )。 查看从数 据库读取的 条目或者将 其存储在内 表中。

另外,应该 在早期进行 授权检查, 即尽可能在 选择屏幕处 理期间而不 是等到数据 选择处理期 间。 因为它们依 赖于读取的 数据,因此 没有优化的 步骤规则。 试图优化响 应时间时应 该知道以下 各点:

在不同级 别结构的表 格内容之间 的数字关系 十分重要。

9 如果某一级 别结构的数 据库表格的 某行包括下 一级别数据 库表格的某 行(情况 A ),则其它 优化可能对 于比例 1:100 或者 1:1000 更有意义( 情况 B )。 在情况 A 中,通过使 用数据库视 图可以提高 响应时间( 关于视图的 详细信息, 参见文档 ABAP/4 词典 (页 Error! Not a valid link.) )。 在情况 B 中,可以使 用内表。首 先从数据库 中将数据读 到内表中( 参见将数据恋 工作区中 (页 错误!链接无效。) ),然后在 逻辑数据库 中通过 LOOP/ENDLOOP 处理内表。 在情况 B 中,使用光 标处理选择 行也很有用 (参见使用光标从 数据库表中 寥⌒ (页 错误!链接无效。) )。 一些 ABAP/4 报表只参阅 带 GET 语句的层次 结构的一部 分,而其它 报表访问结

构中的所有 节点。在这 种情况下, 提高单个报 表性能有下 列选择:

- 在逻辑 数据库程序 中,使用表 格 GET_EVENTS。 使用逻辑数 据库生成报 表

之后,对 于结构的每 个节点,该 报表表示报 表中每条 GET 语句是否发 生(参见 编辑数据库 程序 (页 14) )。 - 通过在 选择 INCLUDE 中使用

SELECTION-SCREEN FIELD SELECTION FOR TABLE . 语句,可以 为字段选择 指定逻辑数 据库中的数 据库表格 (参见

SELECTION-SCREEN 的关键字文 档)。在报 表中,可以 使用合适的 GET 语句(参见 外在地指 数据库表的 字 (页 错误!链接无效。) )。

逻辑数据库 示例

假定逻辑数 据库 HKS 有下列结构 : 假定在选择 包含程序中 定义下列选 择标准: SELECT-OPTIONS: SLIFNR FOR LFA1-LIFNR, SBUKRS FOR LFB1-BUKRS, SGJAHR FOR LFC1-GJAHR, SBELNR FOR BKPF-BELNR. 下面是完整 的数据库程 序: *-------------------------------------------------------* * DATABASE PROGRAM OF THE LOGICAL DATABASE HKS *-------------------------------------------------------* PROGRAM SAPDBHKS DEFINING DATABASE HKS. TABLES: LFA1, LFB1, LFC1, BKPF. *-------------------------------------------------------* * Initialize selection screen (process before PBO) *-------------------------------------------------------* FORM INIT. .... ENDFORM. \*-------------------------------------------------------* * PBO of selection screen (process always after ENTER) *-------------------------------------------------------* FORM PBO. .... ENDFORM. \ 10*-------------------------------------------------------* * PAI of selection screen (process always after ENTER) *-------------------------------------------------------* FORM PAI USING FNAME MARK. CASE FNAME. WHEN 'SLIFNR'. .... WHEN 'SBUKRS'. .... WHEN 'SGJAHR'. .... WHEN 'SBELNR'. .... ENDCASE. ENDFORM. \*-------------------------------------------------------* * Call event GET LFA1 *-------------------------------------------------------* FORM PUT_LFA1. SELECT * FROM LFA1 WHERE LIFNR IN SLIFNR. PUT LFA1. ENDSELECT. ENDFORM. \*-------------------------------------------------------* * Call event GET LFB1 *-------------------------------------------------------* FORM PUT_LFB1. SELECT * FROM LFB1 WHERE LIFNR = LFA1-LIFNR AND BUKRS IN SBULRS. PUT LFB1. ENDSELECT. ENDFORM. \*-------------------------------------------------------* * Call event GET LFC1 *-------------------------------------------------------* FORM PUT_LFC1. SELECT * FROM LFC1 WHERE LIFNR = LFA1-LIFNR AND BUKRS = LFB1-BUKRS AND GJAHR IN SGJAHR. PUT LFC1. ENDSELECT. ENDFORM. \*-------------------------------------------------------* * Call event GET BKPF *-------------------------------------------------------* FORM PUT_BKPF. SELECT * FROM BKPF WHERE BUKRS = LFB1-BUKRS AND BELNR IN SBELNR AND GJAHR IN SGJAHR. PUT BKPF. ENDSELECT. ENDFORM. \PROGRAM 语句包含附 加 DEFINING DATABASE HKS,它 将数据库程 序定义为属 于逻辑数据 库 HKS。 用生成适当 表格工作区 的 TABLES 语句声明结 构的节点。 因为这些表 格工作区由 数据库程序 和相关的报 表共享,因 此它们变为 在逻辑数据 库和报表之 间数据传输 的界面。 子程序 INIT 和 PBO 初始化选择 屏幕。

11子程序 PAI 对选择屏幕 上的用户输 入进行授权 检查。也可 能进行可行 性和值范围 检查。如果 检查产生负 输出,则出 现适当的错 误对话框并 且相关字段 再次准备接 收输入。 根据由用户 输入的选择 标准 PUT_ 子程序读取 数据库表格 并且在报表 中调用相关 处理块。调 用子程序的 顺序由逻辑 数据库的结 构决定。 下图显示数 据库结构决 定的程序流 : 创建和维护 逻辑数据库

创建或维护 逻辑数据库 的事务是 SE36 或者 SLDB。 要进行该进 程,请选择 “工具 -> ABAP/4 工作台 -> 开发 -> 编程环境 -> 逻辑数据库 ”。 随后出现如 下显示的初 始屏幕:

在“逻辑数 据库”字段 中,输入逻 辑数据库的 名称。

要通过“显 示”或“更 改”显示或 更改逻辑数 据库,请选 择逻辑数据 库子对象。 要创建逻辑 数据库,请 选择“创建 ”

下列主题介 绍如何创建 和维护逻辑 数据库:

创建逻辑数 据库

创建逻辑数 据库时,系 统将承担大 部分工作:

通过在图 形编辑器中 定义其结构 ,可以定义 逻辑数据库 的最重要的 特征。 定义结构 后,系统自 动建议选择 包含程序。 最后,系 统使用结构 和选择生成 数据库程序 。

要全部自动 生成 ABAP/4 语句,应该 以下列次序 处理子组件 : 要创建新逻 辑数据库, 在初始屏幕 上选择“创 建”。

1. 在随 后的对话框 中,输入短 文本,用“ 创建”确认 并指定开发 级别(关于 开发

级别的 详细信息, 参见指ǔ绦蚴 性 (页 错误!链接无效。) )。

如果要更改 短文本或者 以其它语言 维护,可以 选择“细节 -> 短文本”以 后再完成此 目的。

2. 指定 结构的根节 点,例如

用“创建” 确认。

3. 逻辑 数据库现在 具有单个节 点结构。

可以按 更改结构 (页 12) 中的描述扩 展该结构。

4. 保存 该结构。系 统在此基础 上自动建议 选择包含程 序。

5. 选择 “转向 -> 选择 ”并且按 编辑选择 (页 13) 中的描述维 护包含程序 。 6. 保存 选择并且选 择“转向 -> 数据库程序 ”。确认下 列对话框:

然后系统根 据结构和选 择条件生成 数据库程序 。已经定义 了所有必须 的子程序并 且也生成了 SELECT 语句的大部 分 WHERE 条件。按 编辑数据库 程序 (页 14). 中的描述维 护该数据库 程序。

7. 最后 ,可以维护 下列可选子 对象:

- 选择文 本(参见 编辑选择文 本 (页 18) )

- 匹配码 选择(参见 编辑匹配码 选择 (页 19) ) - 文档( 参见 编辑文档 (页 21) )

虽然从系统 获得的支持 可以帮助您 快速创建可 执行的逻辑 数据库,但 必须自己注 意诸如提高 性能等细节 。 12

处理结构

要显示或更 改逻辑数据 库结构,选 择初始屏幕 上的“结构 ”。 可以执行下 列操作

显示结构

要显示结构 ,请在初始 屏幕上选择 “结构”和 “显示”。

系统在左上 角最高级别 上(结构的 根节点)显 示节点名称 。每个下层 节点显示在 前一节点的 下方,向右 缩排,相同 级别的节点 显示在相同 列中。

逻辑数据库 KDF 有如下结构 : 通过单击可 以展开或者 折叠某个节 点的次级层 次结构。折 叠节点时, 只显示子树 的根并加前 缀 +。通过选 择“编辑 -> 子树”可以 达此目的。

折叠 KDF 中节点 LFB1 的所有下层 节点: 要显示特定 节点的子树 ,请通过光 标选择节点 并且选择“ 编辑 -> 子树 -> 显示”。结 果屏幕的首 行显示了从 根到选定子 树的路径。 也可以单击 该路径的节 点以显示相 应子树。

要显示节点 的单个字段 ,将光标放 置在节点上 并且双击或 者选定“显 示表格字段 ”。

KDF 的 LFAS 节点的字段 为:

更改结构

要更改现有 结构,请在 初始屏幕上 选定“结构 ”和“更改 ”或者在结 构的显示屏 幕上选定“ 数据库 -> 显示 <-> 更改”。

要更改现有 节点,请相 应放置光标 并且选定“ 编辑 -> 节点 -> 更改”。

要在光标位 置次级级别 或者相同级 别上创建新 节点,请选 定“编辑 -> 节点 -> 创建”。 要选定/取 消子树,请 选定“编辑 -> 子树 -> 选择/撤消 选择”。

要将结构中 的子树移到 光标指定的 位置,请选 定“编辑 -> 子树 -> 重分配”。 要删除子树 ,请将光标 放置在节点 上或者选定 它并选择“ 编辑 -> 子树 -> 删除”。

在下列屏幕 上,用户首 先将光标放 在节点 BKPF 上并且选择 “编辑 -> 子树 -> 选择”。然 后将光标放 置在 LFB5 上并选择“ 编辑 -> 节点 -> 创建”。 13如同所看到 的,选定了 BKPF 的子树。现 在可以对其 重新赋值。 然后,出现 名为“创建 节点”的对 话框,可以 在其中创建 LFB5 以下的和相 同级别的节 点。

编辑选择

要编辑逻辑 数据库的选 择屏幕,请 在初始屏幕 上选择“选 择”和“更 改”。这将 进入包含程 序 DBSEL 的编辑器。 是逻辑数据 库的名称。

因为对于数 据库程序和 其它相关的 程序,系统 不能自动将 此包含程序 组合进数据 库程序中, 所以不能使 用 INCLUDE 语句达到此 目的。 如果以前未 做选择,则 系统自动为 所有结构中 的数据库表 格生成关联 SELECT-OPTIONS 语句并且为 所有关键字 字段建议选 择标准(根 据 ABAP/4 字典)。然 后必须为这 些选择标准 赋名。为此 ,必须为包 含程序中的 每个“?” 输入最多 8 个字符的名 称,并且删 除语句前的 注释符“*” 。 也建议匹配 码选择的 PARAMETERS 语句。

除建议的选 择标准之外 ,可以根据 需要通过下 列元素扩展 选择屏幕:

通过 PARAMETERS 语句及其附 加项,可以 参看可能用 到的附加参 数,例如, 要

控制程序 流(参见 为变量ㄒ 输入字 (页 错误!链接无效。) )。

在包含程序 DBSEL 中,必须使 用 PARAMETERS 语句的附加 项 FOR TABLE。 当生成选择 屏幕时,该 项保证系统 只考虑与报 表的 TABLES 语句声明的 表格相链接 的参数。 通过 SELECTION-SCREEN 语句可以设 计选择屏幕 的格式和在 格式化选择屏幕

(页 错误!链接无效。).中指定的 附加项。 语句

SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE . 为动态选择 定义数据库 表格(参见 选择屏幕语逻辑数据库 (页 错误!链接无效。) )。 语句

SELECTION-SCREEN FIELD SELECTION FOR TABLE .

为字段选择 定义数据库 表格(参见 外在地指 数据库表的 字 (页 错误!链接无效。) )。 语句

SELECTION-SCREEN BEGIN|END OF VERSION 和

SELECTION-SCREEN EXCLUDE

允许创建选 择屏幕的不 同版本(参 见 SELECTION-SCREEN 的关键字文 档)。

如果逻辑数 据库已经存 在带选择的 包含程序, 则可以通过 选择“细节 -> 生成 -> 选择”用定 义的系统程 序将其覆盖 。然后必须 在对话框中 确认它。

要检查包含 程序 DBSEL 的语法错误 ,请在初始 屏幕上选择 “检查”。 如果在编辑 数据库程序 时选择“检 查”,也可 以检查包含 程序的语法 错误。

假定逻辑数 据库 HKS 有下列结构 : 建议的包含 程序如下: *----------------------------------------------------------* * INCLUDE DBHKSSEL * 自动包括在 数据库程序 中。 14*----------------------------------------------------------* * * If the source code is automatically generated, * please perform the following steps: * 1. Replace ? by suitable names (at most 8 characters). * 2. Activate SELECT-OPTIONS and PARAMETERS (delete * asterisks). * 3. Save source code. * 4. Edit database program * * Hint: Syntax check is not possible in this include * 因为在数据 库程序的语 法检查期间 对它进行了 检查 * *----------------------------------------------------------* * SELECT-OPTIONS: ? FOR LFA1-LIFNR. * Parameter for matchcode selection (ABAP/4 Dictionary * structure MCPARAMS): * PARAMETERS p_mc AS MATCHCODE STRUCTURE FOR TABLE LFA1. * SELECT-OPTIONS: * ? FOR LFB1-LIFNR, * ? FOR LFB1-BUKRS. * SELECT-OPTIONS: * ? FOR BKPF-BUKRS, * ? FOR BKPF-BELNR, * ? FOR BKPF-GJAHR. * SELECT-OPTIONS: * ? FOR LFC1-LIFNR, * ? FOR LFC1-BUKRS, * ? FOR LFC1-GJAHR. 例如,可以 按下述方法 修改自动生 成的包含程 序: * Selection criteria: SELECT-OPTIONS: SLIFNR FOR LFA1-LIFNR. SELECT-OPTIONS: SBUKRS FOR LFB1-BUKRS. SELECT-OPTIONS: SGJAHR FOR LFC1-GJAHR. SELECT-OPTIONS: SBELNR FOR BKPF-BELNR. * Self-defined parameters: PARAMETERS PDATE LIKE SY-DATUM FOR TABLE BKPF. * Dynamic selections for LFA1 and LFB1: SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE: LFA1, LFB1. * Field selection for LFC1: SELECTION-SCREEN FIELD SELECTION FOR TABLE: LFC1. 此处,从可 用的选择标 准中进行选 择并且给定 其名称。声 明附加参数 PDATE 并链接到表 格 BKPF。 为表格 LFA1 和 LFB1 定义动态选 择。为表格 LFC1 定义字段选 择。 编辑数据库 程序

要编辑逻辑 数据库访问 程序,请在 初始屏幕上 选择“数据 库程序”和 “更改”。 进入程序 SAPDB 的编辑器。 是逻辑数据 库的名称。

如果程序不 存在,系统 根据结构和 选择包含程 序中的信息 自动建议生 成的程序。 如果要用建 议的程序覆 盖现有程序 ,请选择“ 细节 -> 生成 -> 程序”。然 后必须在对 话框中确认 该操作。

15 不能更改预 定义的 TABLES 语句和自动 生成子程序 的预定义名 称。但是, 可以为数据 库访问定义 其它子程序 或更改 ABAP/4 语句。 自动生成的 SELECT 语句的 WHERE 从句包含有 关表格中的 所有关键字 字段。对于 比较字段, 有下列选项 :

如果选择 包含程序为 字段定义选 择标准,则 将字段和相 关选择表格 与 IN 相比

较,正 如 在 WHERE 子句中使用 选择表 (页 错误!链接无效。) 中所述。

如果选择包 含程序包括 SELECT-OPTIONS SLIFNR FOR LFA1-LIFNR. 那么下列子 程序自动出 现在数据库 程序中: FORM PUT_LFA1. SELECT * FROM LFA1 WHERE LIFNR IN SLIFNR. PUT LFA1. ENDSELECT. ENDFORM. 如果选择 包含程序不 包含字段的 选择标准, 但该字段的 上级表格的 关键字字段

是外来关键 字,则对那 些由外来关 键字相关性 链接的字段 进行比较。 在逻辑数据 库结构中, LFB1 是 LFA1 的下级节点 并且 LFA1 中的关键字 字段 LIFNR 是 LFB1 的外来关键 字。 如果选择包 含程序包括 SELECT-OPTIONS SBUKRS FOR LFB1-BUKRS. 在数据库程 序中自动出 现下列子程 序: FORM PUT_LFB1. SELECT * FROM LFB1 WHERE LIFNR = LFA1-LIFNR. AND BUKRS IN SBUKRS. PUT LFB1. ENDSELECT. ENDFORM. 此处,为 LFB1 中的字段 BUKRS 定义选择标 准 SBUKRS。 WHERE 条件 BUKRS IN SBUKRS 如上述显示 。不定义字 段 LIFNR 的选择标准 ,但是 LIFNR 在 LFA1 中也是关键 字字段。因 此,通过使 用 AND 的条件LIFNR = LFA1-LIFNR 扩展 WHERE 从句。 下面是自动 生成 ABAP/4 程序的完整 示例:

假定逻辑数 据库 HKS 有下列结构 : 让包含程序 DBHKSSEL 包括下列编 码选择: SELECT-OPTIONS: SLIFNR FOR LFA1-LIFNR. SELECT-OPTIONS: SBUKRS FOR LFB1-BUKRS. SELECT-OPTIONS: SGJAHR FOR LFC1-GJAHR. SELECT-OPTIONS: SBELNR FOR BKPF-BELNR.

16自动生成数 据库程序的 最重要行列 在下面。程 序也包含某 些用户和性 能提示,如 注释行,但 此处不包括 这些。 *----------------------------------------------------------* * DATABASE PROGRAM OF LOGICAL DATABASE HKS *----------------------------------------------------------* PROGRAM SAPDBHKS DEFINING DATABASE HKS. TABLES: LFA1, LFB1, BKPF, LFC1. *----------------------------------------------------------* * BEFORE_EVENT will be called before event EVENT * Possible values for EVENT: 'START-OF-SELECTION' *----------------------------------------------------------* * FORM BEFORE_EVENT USING EVENT. * CASE EVENT. * WHEN 'START-OF-SELECTION' * * ENDCASE. * ENDFORM. \*----------------------------------------------------------* * AFTER_EVENT will be called after event EVENT * Possible values for EVENT: 'END-OF-SELECTION' *----------------------------------------------------------* * FORM AFTER_EVENT USING EVENT. * CASE EVENT. * WHEN 'END-OF-SELECTION' * * ENDCASE. * ENDFORM. \*----------------------------------------------------------* * Initialize selection screen (processed before PBO) *----------------------------------------------------------* FORM INIT. ENDFORM. \*----------------------------------------------------------* * PBO of selection screen (always processed after ENTER) *----------------------------------------------------------* FORM PBO. ENDFORM. \*----------------------------------------------------------* * PAI of selection screen (always processed after ENTER) *----------------------------------------------------------* FORM PAI USING FNAME MARK. * CASE FNAME. * WHEN 'SLIFNR '. * WHEN 'SBUKRS '. * WHEN 'SBELNR '. * WHEN 'SGJAHR '. * WHEN '*'. * ENDCASE. ENDFORM. \*----------------------------------------------------------* * Call event GET LFA1 *----------------------------------------------------------* FORM PUT_LFA1. * SELECT * FROM LFA1 * INTO TABLE ? * WHERE LIFNR IN SLIFNR. PUT LFA1. 17* ENDSELECT. ENDFORM. \*----------------------------------------------------------* * Call event GET LFB1 *----------------------------------------------------------* FORM PUT_LFB1. * SELECT * FROM LFB1 * INTO TABLE ? * WHERE LIFNR = LFA1-LIFNR * AND BUKRS IN SBUKRS. PUT LFB1. * ENDSELECT. ENDFORM. \*----------------------------------------------------------* * Call event GET BKPF *----------------------------------------------------------* FORM PUT_BKPF. * SELECT * FROM BKPF * INTO TABLE ? * WHERE BUKRS = LFB1-BUKRS * AND BELNR IN SBELNR * AND GJAHR = ?. PUT BKPF. * ENDSELECT. ENDFORM. \*----------------------------------------------------------* * Call event GET LFC1 *----------------------------------------------------------* FORM PUT_LFC1. * SELECT * FROM LFC1 * INTO TABLE ? * WHERE LIFNR = LFB1-LIFNR * AND BUKRS = LFB1-BUKRS * AND GJAHR IN SGJAHR. PUT LFC1. * ENDSELECT. ENDFORM. \*----------------------------------------------------------* * Authority check for table LFA1 *----------------------------------------------------------* * FORM AUTHORITYCHECK_LFA1. * AUTHORITY-CHECK ... * ENDFORM. \*----------------------------------------------------------* * Authority check for table LFB1 *----------------------------------------------------------* * FORM AUTHORITYCHECK_LFB1. * AUTHORITY-CHECK ... * ENDFORM. \*----------------------------------------------------------* * Authority check for table BKPF *----------------------------------------------------------* * FORM AUTHORITYCHECK_BKPF. * AUTHORITY-CHECK ... * ENDFORM. \*----------------------------------------------------------* * Authority check for table LFC1 *----------------------------------------------------------* * FORM AUTHORITYCHECK_LFC1. * AUTHORITY-CHECK ... * ENDFORM. \*----------------------------------------------------------* * PUT_HKS_MATCHCODE. * Processed when matchcode selection is used, 18* 即用户输进 PARAMETERS p_mc AS MATCHCODE STRUCTURE. *----------------------------------------------------------* * FORM PUT_HKS_MATCHCODE. * ENDFORM. \子程序 BEFORE_EVENT、 AFTER_EVENT 和 PUT__MATCHCODE 在后面讲述 。关于其余 子程序的说 明,参见 逻辑数据库 的数据库程 序 (页 4) 。 必须删除强 制语句之外 的 ABAP/4 语句之前的 注释星号“ *”并且用 有效的 ABAP/4 语法组件取 代问号(?) 。然后保存 并检查程序 。同时自动 检查选择包 含程序。

某些表格和 其它子程序 在运行时总 是可用的并 且愿意的话 就可以使用 :

内表 GET_EVENT 说明报表中 使用哪个逻 辑数据库节 点。生成报 表时生成它 们的

操作如 下:

DATA: BEGIN OF GET_EVENTS OCCURS 10, NODE(10), KIND,

END OF GET_EVENTS.

表格包含字 段 NODE 中逻辑数据 库(每行一 个)的所有 节点的名称 。字段 KIND 指定在报表 中是否和如 何使用该节 点(即在 GET 或 GET-LATE 中): - KIND = 'X': 在 GET 和 GET LATE 中定址表格 。 - KIND = 'G': 只在 GET 中定址表格 。

- KIND = 'L': 只在 GET LATE 中定址表格 。

- KIND = 'P': 既不在 GET 也不在 GET LATE 中定址表格 。但是,在 GET 或 GET

LATE 中定址子程 序表格。

- KIND = ' ': 既不在 GET 也不在 GET LATE 中定址表格 。也不定址 子程序表

格 。

逻辑数据 库中的子程 序 BEFORE_EVENT 作为注释生 成(见上例 )。可以修 改并

且通过 删除星号( *)激活它 。

在参数 EVENT 中指定的事 件处理之前 调用 BEFORE_EVENT。

逻辑数据 库中的子程 序 AFTER_EVENT 作为注释生 成(见上例 )。可以修 改并

可通过 删除星号( *)激活它 。

在参数 EVENT 指定的事件 处理之前调 用 AFTER_EVENT。

逻辑数据 库中的子程 序 PUT__MATCHCODE 作为注释生 成。可以修 改并且

通过 删除星号( *)激活它 。 是逻辑数据 库的名称( 见上例)。 详细信息, 参见 编辑匹配码 选择 (页 19) 。

编辑选择文 本

选择文本, 即在选择屏 幕上带输入 字段显示的 文本,通常 是选择标准 的名称。可 以在逻辑数 据库程序之 外(或在选 择的包含程 序之外)维 护这些文本 。这使的逻 辑数据库程 序独立于语 言。参见 处理文本摘要 (页 错误!链接无效。) 。

要用每种登 录语言编辑 选择文本, 请在初始屏 幕上选择“ 选择文本” 和“更改” 。如果登录 语言与初始 语言(即生 成逻辑数据 库的登录语 言)不同, 则出现对话 框提示是否 想更改初始 语言中的文 本摘要或者 是否要更改 初始语言。 通过更改初 始语言,可 以用任何语 言维护选择 文本。

假定逻辑数 据库 HKS 有下列结构 : 让包含程序 DBHKSSEL 包含下列编 码选择: SELECT-OPTIONS: SLIFNR FOR LFA1-LIFNR. SELECT-OPTIONS: SBUKRS FOR LFB1-BUKRS. SELECT-OPTIONS: SGJAHR FOR LFC1-GJAHR. SELECT-OPTIONS: SBELNR FOR BKPF-BELNR. 当选择“选 择文本”时 ,出现下列 屏幕: 可以如下完 成文本字段 : 19 假定下列报 表链接到逻 辑数据库 HKS: REPORT SAPMZTST. TABLES: LFA1, LFB1, LFC1, BKPF. GET LFA1. ........ GET LFB1. ........ GET LFC1. ........ GET BKPF. ........ 结果选择屏 幕如下: 如果随后用 登录语言德 语“D”登 录到 R/3 系统并且调 用报表,则 在选择屏幕 上显示选择 标准名称。 因此,通过 逻辑数据库 的初始屏幕 进入选择文 本的维护, 在对话框中 将初始语言 更改为德语 并且输入下 列文本: 当再次以德 语登录时, 报表的选择 屏幕显示如 下,但继续 对英语用户 显示英语选 择文本: 编辑匹配码 选择

要为逻辑数 据库显示、 更改或创建 匹配码,请 在初始屏幕 上选择“匹 配码选择” 。这将进入 更改匹配码 对象的合适 屏幕。可以 从值列表中 选择匹配码 对象(用 F4 )或者删除 现有对象:

要找到需要 那个匹配码 对象做为逻 辑数据库的 匹配代码, 必须知道逻 辑数据库结 构的哪个表 格在匹配码 对象视图中 发生。关于 编辑匹配码 的详细信息 ,参见文档 ABAP/4 词典 (页 Error! Not a valid link.) 。

当为逻辑数 据库选定匹 配码对象后 ,可以通过 在选择包含 程序的说明 中包括附加 项 AS MATCHCODE STRUCTURE 的参数向用 户提供匹配 码(参见 PARAMETERS 关键字文档 )。在选择 屏幕上,这 导致显示组 框“匹配码 选择”。

逻辑数据库 KDF 包含匹配码 选择 KRED。 选择包含程 序包括下列 行: PARAMETERS KD_INDEX AS MATCHCODE STRUCTURE FOR TABLE LFA1. 如果调用链 接到 KDF 的报表,将 在选择屏幕 上显示下列 框: 选择屏幕上 组框“匹配 码选择”的 输入字段是 “匹配码 ID”(输 入示例“D” )和“搜索 字符串”( 输入示例“ ...EDW..” )。

系统评估用 户输入并选 择带关键字 字段的合适 的匹配码记 录。然后, 这使这些记 录可用于内 表 _MC 中的数据库 程序。 是逻辑数据 库的名称。 使用 _MC 的关键字, 该子程序必 须选择数据 并且通过 PUT 语句触发事 件 GET 是根节点的 名称。由于 PUT 语句的属性 ,必须为该 任务使用适 当的子程序 PUT_....。

20 内表 _MC 和其它自动 生成表格的 结构显示为 数据库程序 的自动生成 源代码中的 注释。在源 代码中也说 明这些表格 的使用方法 。 假定逻辑数 据库 HZS 有根节点 KNA1。 让包含程序 DBHZSSEL 包括下列行 : SELECT-OPTIONS: SKUNNR FOR KNA1-KUNNR. PARAMETERS P_MC AS MATCHCODE STRUCTURE FOR TABLE KNA1. DEBI 指定为匹配 码对象。 数据库出现 的源代码现 在包括更多 的注释行, 这些注释行 表示除 编辑数据库 程序 (页 Error! Not a valid link.) 编辑数据库 程序 (页 14) 下所列的之 外,创建了 下列表格和 字段: 内表 HZS_MC: 在 START-OF-SELECTION 之后,该表 格包含匹配 码记录的关 键字字段, 这些匹配代 码记录与选 择屏幕上的 搜索字符串 相匹配。它 有如下结构 : DATA: BEGIN OF HZS_MC OCCURS 1000, KNA1_MANDT LIKE KNA1-MANDT, KNA1_KUNNR LIKE KNA1-KUNNR, END OF HZS_MC. 内表 MC_FIELDS: 该表格包含 在匹配码选 择期间赋值 的字段(只 有在匹配码 选择期间所 有字段不赋 值才是重要 的)。其结 构为: DATA: BEGIN OF MC_FIELDS OCCURS 10. INCLUDE STRUCTURE RSMCFIELDS. DATA: END OF MC_FIELDS. 如果通过匹 配码界面将 值赋予 MC_FIELDS-FIELDNAME 中的字段, 则字段 MC_FIELDS-SUPPLIED 不等于 SPACE。 内表 MC_TABLES: 在匹配码选 择期间给这 些表格值赋 (只有当匹 配码对象包 含不同表格 的字段时才 是重要的) 。其结构如 下: DATA: BEGIN OF MC_TABLES OCCURS 10. INCLUDE STRUCTURE RSMCTABS. DATA: END OF MC_TABLES. 如果通过匹 配码界面将 值赋给 MC_FIELDS-FIELDNAME 中的字段, 则字段 MC_FIELDS-SUPPLIED 不等于 SPACE。 字段 MC_EVENTS: 该字段为 200 字节长。MC_EVENTS 中的每个字 节都代表逻 辑数据库结 构中的一个 表格(例如 ,首字符代 表根节点) 。对于表格 单个位置的 内容有下列 意义: - - - - 'X': 报表中通过 GET 语句定址表 格并且通过 匹配码给关 键字字段赋 值。 'R': 报表中通过 GET 语句定址表 格但不通过 匹配码给关 键字字段赋 值。 'M': 报表中不通 过 GET 语句定址表 格,但通过 匹配码给关 键字字段赋 值。 ' ':报表中 不通过 GET 语句定址表 格,也不通 过匹配码给 关键字字段 赋值。 例如,注释 出的子程序 PUT_HZS_MC (参见 编辑数据库程序 (页 14) ),为了使 用内表 HZS_MC 中的匹配码 记录,可以 如下修改和 激活: FORM PUT_HZS_MC. IF MC_EVENTS(1) NE SPACE. READ TABLE GET_EVENTS WITH KEY 'KNA1'. IF SY-SUBRC = 0 AND GET_EVENTS-KIND NE SPACE. SELECT * FROM KNA1 FOR ALL ENTRIES IN HZS_MC.

21 WHERE KUNNR = HZS_MC-KNA1_KUNNR PERFORM PUT_KNA1_MC. ENDSELECT. ENDIF. ENDIF. ENDFORM. FORM PUT_KNA1_MC. PUT KNA1. ENDFORM. 使用表格 GET_EVENTS (参见 编辑数据库程序 (页 14) )检查链接 报表是否包 含 KNA1 的 GET 语句或下级 节点。根据 结果,在 KNA1 (包含满足 表格 HZS_MC 中条件的行 )上执行 SELECT 循环。(关 于 WHERE 条件的详细 信息,参见 运行时指 行选择的条 件 (页 错误!链接无效。) )。因为 PUT 语句只可以 这样使用, 所以该 SELECT 循环调用执 行 PUT KNA1 语句的 PUT_KNA1_MC 子程序。 也可以使用 优化性能的 匹配码选择 :

根据使用 和填充的表 格和字段, 内表 GET_EVENTS、 MC_FIELDS 和 MC_TABLES 以及字段字 符串 MC_EVENTS 允许您在数 据库程序中 编码不同的 的数据库访 问。例如, 可以在内表 中使用视图 并且收集所 读取的记录 。然后可以 通过 LOOP/ENDLOOP 处理这些内 表并且触发 适当的 GET 事件。 编辑文档

要显示或编 辑逻辑数据 库的文档, 请选择初始 屏幕上的“ 文档”和“ 显示”或者 “更改”。 假定 HKS 是新的逻辑 数据库。当 创建结构、 选择包含程 序和数据库 程序时,可 以创建文档 。如果选择 初始屏幕上 的“更改” ,则出现 SAP 编辑器。请 进行下列操 作: 如果随后选 择“显示” ,则在初始 屏幕上出现 HKS 的下列文档 :

其它编辑选 项

初始屏幕也 提供下列编 辑选项:

编辑数据模 型

要选定属于 逻辑数据库 表格的视图 和实体,请 选择初始屏 幕上的“转 向 -> 数据模型 -> 视图和实体 ”。对于结 构中的每个 表格,在随 后出现的屏 幕上显示所 有视图,该 视图至少部 分指向该表 格。 通过选择适 当的复选框 选择视图。 这样做时, 也自动选择 了显示在相 同行的实体 。 要显示带选 定项之间所 有相关性的 图形,请选 择“图形” 。

假定逻辑数 据库包含三 个节点:LFA1、 LFB1 和 LFC1。 如果选择“ 转向 -> 数据模型 -> 视图和实体 ”,则出现 下面的屏幕 : 如果按此处 所示选定复 选框,然后 选择“图形 ”,则 SAP 网络编辑器 显示如下:

22检查逻辑数 据库

要检查逻辑 数据库是否 正确和完整 ,请选择初 始屏幕上的 “检查”。 在随后出现 的屏幕上显 示下列检查 :

可使用该检 查决定哪个 子对象可用 或正确。

复制逻辑数 据库

要复制逻辑 数据库,请 选择初始屏 幕上的“复 制”。

在后续对话 框中通过覆 盖总是源数 据库名称的 标准值输入 目标数据库 的名称。

删除逻辑数 据库

要删除逻辑 数据库,请 选择初始屏 幕上的“删 除”。

如果逻辑数 据库链接到 报表,即程 序属性中指 定的,则得 到有关程序 名称的信息 。这种情况 下,因为受 影响的程序 会不正确, 因此不能删 除该数据库 :

如果没有报 表使用该逻 辑数据库, 则可以删除 它。

本文来源:https://www.bwwdw.com/article/wmqo.html

Top