内容
事务 .................................................................................................................................................. 1
动态程序 ..................................................................................................................................... 2 ABAP/4 模块池 ........................................................................................................................... 3 动态程序和 ABAP/4 模块池之间 的交互作用 ............................................................................ 4
本节介绍对 话编程。将 描述下列主 题: 事务 (页 1)
事务示例 (页 2) 动态程序 (页 2)
ABAP/4 模块池 (页 3)
动态程序和 ABAP/4 模块池之间 的交互作用 (页 4)
事务 事务是实施 与用户对话 的程序。在 典型的对话 中,用户可 以在系统显 示的屏幕上 输入或请求 信息。作为 对用户输入 或请求的响 应,程序执 行适当的动 作:转到下 一个屏幕, 显示输出或 更改数据库 。 某个旅行社 想预定航班 。旅行社在 屏幕上输入 相应的数据 。系统或者 确认期望的 请求,也就 是说,旅行 社可以预定 航班,并且 旅客可以在 期望的日期 、坐预定的 座位到选定 的目的地, 或者系统显 示航班已经 预定的信息 。 要满足这样 的请求,对 话程序必须 提供: 友好的用 户界面 对用户输 入的数据格 式化并作一 致性检查 输入错误 的简易纠正 法 通过将数 据存储在数 据库中来访 问数据。 ABAP/4 提供不同的 工具和语言 要素以满足 对话程序中 上述要求。 对话程序的 结构 对话程序包 含下面的基 本组件: 屏幕(动 态程序)
SAP 系统中的每 个对话都是 由动态程序 控制的。动 态程序包含 一个屏幕和 它的流逻辑 并且精确控 制一个对话 步骤。流逻 辑决定在显 示屏幕前( 输出前的 PBO 处理)和接 收到用户在 屏幕上制作 的条目后( 输入后的 PAI 处理)进行 的处理。 在屏幕绘制 器中固定的 屏幕格式决 定输入/输 出字段、文 本字段和诸 如单选按钮 以及复选框 之类的图形 元素的位置 。另外,菜 单绘制器允 许在一个或 多个 GUI 状态下存储 菜单、图表 、按钮及功 能键。。动 态程序和 GUI 状态都指向 控制动态程 序和 GUI 状态的运行 顺序的 ABAP/4 程序。 ABAP/4 模块池
每个动态程 序都精确指 向一个 ABAP/4 对话程序。 这样的对话 程序也称为 模块池,原 因是它包含 交互模块。 动态程序的 流逻辑包含 从相应模块 池中调用模 块。在 PBO 事件中调用 的交互模块 依照上下文 进行屏幕模 板的准备, 例如通过设 置字段内容 或通过禁止 显示不需要 的字段等方 式准备屏幕 模板。在 PAI 事件中调用 的交互模块 用于检查用 户的输入并 触发合适的 对话步骤, 例如更新任 务。
从一个事务 中调用的所 有动态程序 都指向一个 公用模块池 。模块池的 动态程序是 编号的。默 认情况下, 系统为每个 动态程序存 储下一个要 显示的动态 程序。该动 态程序序列 或链可以是 线性的也可 以是环型的 。在动态程 序链中甚至 可以调用另 一个动态程 序链,并且 在处理它之 后返回原始 链。
传输字段数 据
如何在屏幕 上显示 ABAP/4 模块中已知 的字段?如 何将屏幕上 的用户条目 传输给模块 ?与报表编 程相反,不 能用 WRITE 语句将字段 数据写入屏 幕。系统通 过屏幕字段 名和 ABAP/4 变量名的比 较来代替数 据传输。如 果两个名称 相同,它将 屏幕字段值 传输给 ABAP/4 程序字段, 反之亦然。 在显示屏幕 之前和之后 立即发生上 述过程。
2字段属性
在屏幕制作 器中定义所 有动态程序 屏幕字段的 属性。如果 屏幕中的字 段名对应于 某个 ABAP/4 词典字段的 名称,则系 统自动建立 这两个字段 之间的参考 。因此自动 从 ABAP/4 词典中复制 动态程序中 的大量字段 属性。字段 属性和数据 元素以及分 配的词典字 段形成了动 态程序在对 话(屏幕字 段的自动格 式检查,自 动值范围检 查,联机帮 助,等等) 中执行的标 准函数的基 础。
错误对话
动态程序处 理器的另一 个任务是管 理错误对话 。使用 ABAP/4 词典的检查 表格自动检 查输入数据 或者通过 ABAP/4 程序本身检 查。动态程 序处理器包 括接收屏幕 中的错误消 息并将屏幕 返回用户。 消息可以是 上下文敏感 的,也就是 说,系统用 当前字段内 容替换消息 文本中的占 位符。另外 ,只有内容 与错误有关 并且可以纠 正错误的字 段才可以接 收输入。关 于错误处理 的详细信息 ,请参见 处理错误和消息 (页 Error! Not a valid link.) 。
数据一致性
要在复杂的 应用程序中 保持数据一 致性,ABAP/4 提供优化数 据库更新的 技术,对它 的操作 于下面的数 据库并符合 对话编程的 特殊请求。 关于数据库 更新的详细 信息,参见 编程数据库 更新 (页 Error! Not a valid link.) 。
为了说明事 务的概念和 用法,提供 下面的事务 示例。 事务示例 事务 TZ10( 开发级别 SDWA) 是随系统传 递的。该事 务仅包含一 个动态程序 。用户可以 输入一个航 空公司的标 识和航班号 以请求航班 信息: 如果用户选 择“显示” ,则系统从 数据库中检 索请求的数 据并显示它 : 事务 TZ10 的结构在下 面的主题中 描述: 动态程序 每个屏幕都 包含用于显 示或请求信 息的字段。 字段可以是 文本串、输 入或输出字 段、单选按 钮、复选框 或按钮。事 务 TZ10 的屏幕仅包 含文本和输 入/输出字 段。 SAP 动态程序包 含几个组件 : 流逻辑: 为屏幕调用 ABAP/4 模块。 屏幕格式 :屏幕上文 本、字段、 按钮等的位 置。 屏幕属性 :屏幕号、 后续屏幕号 及其它。 字段属性 :屏幕上单 独字段的属 性定义。 用户在屏幕 制作器中创 建或编辑动 态程序的所 有组件。要 调用屏幕制 作器,在对 象浏览器中 创建一个动 态程序或双 击现有的动 态程序,然 后对象浏览 器调用屏幕 制作器。在 那里可以输 入新动态程 序的流逻辑 。按相应的 按钮可以维 护“屏幕属 性”、转到 全屏幕编辑 器或者选择 按钮“字段 列表”更改 字段属性。 关于屏幕制 作器的详细 信息,参见 文档 ABAP/4 开发工作台:工具 (页 Error! Not a valid link.) 。
屏幕属性
从用户的观 点看,事务 是一系列一 个接一个显 示的屏幕。 如何决定该 顺序呢?事 务的属性决 定了要显示 的第一个屏 幕。单个动 态程序的属 性决定了在 当前屏幕之 后要显示的 屏幕。也可 以在 ABAP/4 程序中动态 设置后续屏 幕号。
因为没有调 用后续屏幕 ,所以本示 例不需要更 改屏幕属性 。
布局
选择“全屏 ”转到屏幕 编辑器。在 此可以决定 屏幕的布局 。对于事务 TZ10, 可以从 ABAP/4 词典的表格 SPFLI 中复制所需 的字段。关 于全屏幕编 辑器的详细 信息,参见 ABAP/4 开发工作台:工具 (页 Error! Not a valid link.)
字段属性
要显示和修 改单独字段 的属性(输 入/输出字 段、请求的 输入、可能 条目按钮、 不可见等等 ),请使用 “字段列表 ”。 字段“ 公司”(SPFLI-CARRID) 和“航班号 ” (SPFLI-CONNID)定 义为输入/输 出字段。所 有其它字段 仅用于航班 数据的输出 。
流逻辑
动态程序的 流控制代码 包括句法上 与 ABAP/4 相似的一些 语句。但不 能在 ABAP/4 中使用流控 制关键字, 反之亦然。 在屏幕制作 器中输入流 控制代码作 为动态程序 的一个组件 。 事务 TZ10 的动态程序 的流控制如 下所示: PROCESS BEFORE OUTPUT. MODULE SET_STATUS_0100. *
PROCESS AFTER INPUT MODULE USER_COMMAND_0100.
3PROCESS 语句为动态 程序命名事 件类型,MODULE 语句告诉系 统为该事件 调用的 ABAP/4 例程。
在该 示例中每个 事件 PBO 和 PAI 只有一个 MODULE。 但一个事件 可以包含带 有多个关键 字的语句。 (流控制语 言仅包含几 种语句类型 。最重要的 是 MODULE、 FIELD、 CHAIN、 LOOP、 CALL SUBSCREEN) 。
要显示流逻 辑中语句的 语法信息, 请选择流逻 辑编辑器中 的“实用程序 -> 帮助...” 。在后面的 对话窗口中 ,标记“流 逻辑关键字 ”,输入所 需关键字的 名称,然后 按 ENTER。 ABAP/4 模块池
在对象浏览 器中,模块 池代码属于 下列类别之 一:
全局字段 :模块池中 所有模块都 可使用的数 据声明 PBO 模块:显示 屏幕前调用 的模块 PAI 模块:响应 用户输入而 调用的模块
子程序: 可以在模块 池中任何位 置调用的子 程序
默认情况下 ,系统将模 块池分成一 个或多个包 含程序。一 个包含程序 可以包含相 同类型的多 个模块(仅 PBO 模块或 PAI 模块)。然 后主程序包 含一系列将 模块链接到 模块池的 INCLUDE 语句: *&---------------------------------------------------------------* *& Module pool SAPMTZ10 * *& *
*&---------------------------------------------------------------* *& *
*& Display data of Table SPFLI * *& *
*&---------------------------------------------------------------*
* Global data
INCLUDE MTZ10TOP.
* PAI modules
INCLUDE MTZ10I01.
* PBO modules
INCLUDE MTZ10O01.
在 ABAP/4 编辑器中, 选择“编辑 -> 其它功能 -> EXPAND 包含程序” 可以显示隐 藏在 INCLUDE 语句后的代 码。带有所 有扩展的 INCLUDE 语句的模块 池显示如下 :
*&---------------------------------------------------------------* *& Module pool SAPMTZ10 * *& FUNCTION: Display data from Table SPFLI * *& *
*&---------------------------------------------------------------* *----------------------------------------------------------------* * INCLUDE MTZ10TOP (This is the TOP include: * * the TOP module contains global data declarations) * *----------------------------------------------------------------* PROGRAM SAPMTZ10. TABLES: SPFLI.
DATA OK_CODE(4).
*----------------------------------------------------------------* * INCLUDE MTZ10I01 (This is a PAI include.) *
*----------------------------------------------------------------* *&---------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------* * Retrieve data from SPFLI or leave transaction * *----------------------------------------------------------------* MODULE USER_COMMAND_0100 INPUT. CASE OK_CODE. WHEN 'SHOW'.
CLEAR OK_CODE.
SELECT SINGLE * FROM SPFLI WHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID. WHEN SPACE. WHEN OTHERS.
CLEAR OK_CODE.
SET SCREEN 0. LEAVE SCREEN. ENDCASE. ENDMODULE.
*----------------------------------------------------------------* * INCLUDE MTZ10O01 (This is a PBO include.) *
*----------------------------------------------------------------* *&---------------------------------------------------------------* *& Module STATUS_0100
*&---------------------------------------------------------------*
4* Specify GUI status and title for screen 100 *
*----------------------------------------------------------------* MODULE STATUS_0100.
SET PF-STATUS 'TZ0100'. SET TITLEBAR '100'. ENDMODULE.
使用 ABAP/4 词典集中存 储频繁使用 的数据声明 。在词典中 定义的对象 在整个系统 中是已知的 。可以通过 任何应用程 序访问活动 词典定义。 在词典中定 义的数据可 以包括在屏 幕中或由 ABAP/4 程序使用。 用户使用 TABLES、 STRUCTURE、 LIKE 语句和其它 语句,在事 务的 TOP 模块中声明 全局数据。 事务 TZ10 访问表格 SPFLI 的词典定义 ,提供所需 的航班数据 显示。如果 TOP 包含程序包 括 TABLES: SPFLI 声明,那么 模块池中的 所有模块都 可以访问表 格 SPFLI 的表格字段 。 PAI 模块 USER_COMMAND_0100 检查用户激 活了哪个按 钮 (CASE OK_CODE)。 事务 TZ10 中的“显示 ”按钮有函 数代码‘SHOW’ 。(关于处 理函数代码 的详细信息 ,参见 处理用户请求 (页 Error! Not a valid link.) )。然后程 序在 SPFLI 数据库中选 定对应于用 户输入数据 的记录。WHERE 条件通过比 较字段 SPFLI-CARRID 及 SPFLI-CONNID 与数据库关 键字段 CARRID 及 CONNID 来决定匹配 记录。一旦 找到了匹配 记录,数据 库将所有伴 随 SPFLI 的字段都传 输给程序表 格。 再次显示屏 幕时,在屏 幕的输出字 段中出现完 整的信息。 系统自动显 示这些字段 ,原因是 ABAP/4 字段名 SPFLI-CARRID 及 SPFLI-CONNID 和屏幕字段 的相同。 在事务 TZ10 的 PBO 模块 STATUS_0100 中,屏幕 100 接收 GUI 状态(使用 SET PF-STATUS) 和 GUI 标题(使用 SET TITLEBAR) : SET PF-STATUS 'TZ0100'. SET TITLEBAR '100'. “GUI 状态”是用 于某屏幕的 界面元素的 子集。状态 包括当前事 务所需的元 素。事务的 GUI 状态可能由 下列元素组 成: GUI 标题是显示 在窗口标题 栏中的屏幕 标题。与 GUI 状态相反, GUI 状态可用于 多个屏幕, 而 GUI 标题只属于 一个屏幕。 要创建并编 辑 GUI 状态和 GUI 标题,请使 用菜单制作 器。要启动 菜单制作器 ,请在对象 浏览器的对 象列表中创 建 GUI 状态或 GUI 标题(或双 击现有的状 态或标题) 。 关于菜单制 作器的详细 信息,参见 文档 ABAP/4 开发工作台:工具 (页 Error! Not a valid link.) 。 动态程序和 ABAP/4 模块池之间 的交互作用 最简单格式 的事务是屏 幕和 ABAP/4 例程的集合 ,由对话处 理器控制和 执行。对话 处理器一个 接一个地处 理屏幕,由 此为每个屏 幕触发适当 的 ABAP/4 处理。 对于每个屏 幕,系统执 行包含相应 ABAP/4 处理的的流 逻辑。控制 从屏幕流逻 辑传给 ABAP/4代 码,然后再 返回。 例如,事务 TZ10 的事件序列 如下所示: 1. 在 PBO 事件中,语 句 MODULE STATUS_0100 将控制传给 相应的 ABAP/4 模块。
在 ABAP/4 模块池中, 要显示的屏 幕接收一个 菜单接口。 2. 在处 理模块 STATUS_0100 后,控制返 回流逻辑。
对于 PBO 事件,不需 要进一步处 理。系统显 示屏幕并从 用户接收条 目。条目是 : - 字段“ 公司”和“ 航班号”的 值。
- 四个字 符的功能代 码可以判断 用户激活的 是哪一个按 钮。
3. 用户 输入触发 PAI 事件。第一 个 PAI 语句将控制 传给 ABAP/4 模块
USER_COMMAND_0100。
模块 USER_COMMAND_0100 处理用户的 请求。在本 示例中只可 能有一种请 求:显示指 定航班的航 班数据。ABAP/4 语句 SELECT 从数据库中 检索数据并 显示它。 4. 处理 MODULE USER_COMMAND_0100 之后,控制 返回 PAI,并 终止对话。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务