对话编程教程:模块池 SAP ABAP
什么是对话编程?
SAP-ABAP 支持两种类型的程序 - 报告程序和对话程序。
如果您的 ABAP 程序需要用户输入,则使用对话框编程。
用户对话框是指用户与程序之间的任何形式的交互,可以是以下任何一种形式。
- 输入数据
- 选择菜单项
- 单击一个按钮
- 单击或双击某个条目
当我们需要在屏幕之间来回导航时,也会使用对话框程序
对话程序以“M”类型创建(模块池)。它们不能独立执行,并且必须附加到至少一个指定初始屏幕的事务代码。
报告和对话程序之间的差异
报告程序:
报告是一种程序,它通常读取和分析数据库表中的数据,而不会更改 数据库.
对话程序:
对话程序允许您与系统交互并更改数据库表的内容。每个对话程序都具有一定的屏幕顺序,系统会逐个处理这些屏幕。
| 标准 | 报告程序 | 对话程序 |
|---|---|---|
| 节目类型 | 类型 1,可执行文件 | M 型,模块池 |
| 数据库访问 | 读取和分析数据 | 读取和更改数据 |
| 执行 | 可独立运行 | 仅通过交易代码运行 |
| 通过积极争取让商标与其相匹配的域名优先注册来维护 | 报告中的事件 | 每个动态屏幕的屏幕流程逻辑 |
通过示例可以更容易地理解对话事务的屏幕顺序。
对话编程中的事务处理示例
该图展示了从第一个屏幕到数据库更新的完整事务流程。用户在屏幕 100 输入数据,PAI 验证输入并决定进入下一个屏幕,屏幕 200 收集剩余数据,最后更新任务写入记录。每个步骤均由以下组件完成。
对话程序的组成部分
不比 报告 这通常需要创建一个可以独立于其他对象执行的自主程序,对话程序开发需要开发多个对象,这些对象都不能单独执行。 相反,所有对象都按层次链接到主程序,并按照对话主程序规定的顺序执行.
对话程序的组成部分包括:
交易代码
- 事务代码启动一个屏幕序列。
- 您可以在 ABAP 工作台的存储库浏览器中或使用事务 SE93 创建事务代码。
- 事务代码与 ABAP 程序和初始屏幕相链接。
- 您可以使用 CALL SCREEN 语句从任何 ABAP 程序启动屏幕序列。
屏幕
- 每个对话 SAP 系统由一个或多个屏幕控制。
- 您可以使用 Screen Painter 在 ABAP Workbench 中通过事务 SE51
- 每个屏幕都属于一个 ABAP 程序.
- 这些屏幕由“屏幕掩码”或“布局”及其流程逻辑组成。屏幕具有布局,可确定输入/输出字段和其他图形元素(如复选框和单选按钮)的位置。流程逻辑确定屏幕内的逻辑处理。
GUI 状态
- 每个屏幕都有一个 GUI 状态,它们是程序的独立组件。
- 它控制菜单栏、标准工具栏、应用程序工具栏,用户可以用它们来选择应用程序中的功能。
- 您可以使用菜单在 ABAP 工作台中创建它们 Painter.
ABAP 计划
- R/3 系统中的每个屏幕和 GUI 状态都属于一个 ABAP 程序。
- ABAP 程序包含由屏幕流逻辑调用的对话模块,还处理来自 GUI 状态的用户输入。
- 使用屏幕的 ABAP 程序也称为对话程序。
- 在模块池(M 型程序)中,要调用的第一个处理块始终是对话框模块。但是,您也可以在其他 ABAP 程序(例如可执行程序或功能模块)中使用屏幕。然后以不同的方式调用第一个处理块;例如,通过运行时环境或过程调用。然后使用 CALL SCREEN 语句启动屏幕序列。
屏幕流程逻辑
屏幕流逻辑主要分为四个部分。
- 输出前处理 (PBO) 事件:在屏幕显示之前处理
- 输入后处理 (PAI) 事件:用户在屏幕上执行操作后处理
- 帮助请求的处理(聚氧乙烯): 当按下 F1 键时进行处理
- 按价值请求处理 (POV):按下 F4 键时进行处理
POH 和 POV 在“关于”页面上有详细解释。 处理价值请求和处理帮助请求.
德普罗
- 屏幕及其流程逻辑称为动态程序(“Dynpro”,因为屏幕流程逻辑会影响程序流程)。
- 每个 dynpro 只控制对话程序的一个步骤。
- 属于程序的屏幕包括 编号屏幕流程可以是线性的,也可以是循环的。在屏幕链中,您甚至可以调用另一个屏幕链,并在处理完成后返回到原始屏幕链。您还可以从 ABAP 程序的对话模块中覆盖静态定义的下一个屏幕。
ABAP 模块池
- 在 PBO 或 PAI 事件中,Dynpro 会调用 ABAP 对话程序。这类程序的集合称为 ABAP 模块池。
- 例如,在 PAI 事件中调用的模块用于检查用户输入并触发适当的对话步骤,例如更新任务。
- 所有 dynpro 都从内部调用 一种 交易指的是一个公共模块池。
对话程序的结构
结构图显示了事务代码、屏幕、GUI 状态和模块池如何链接到同一个主程序。
对话程序的流程
流程图显示了屏幕和 ABAP 程序之间的交替:PBO 填充屏幕字段,用户进行操作,PAI 处理输入,然后调用下一个屏幕。
如何创建模块池程序
以上组件按固定顺序创建。以下步骤从一个空的模块池构建一个可运行的事务。
- 创建模块池: 在 SE80 或 SE38 中,创建一个名称以“ SAPMZ 并将程序类型设置为 M – 模块池如果不删除对象,则无法更改类型。
- 声明全局数据: 将 TABLES 语句和全局变量放在 TOP 包含文件中,这样池中的每个对话模块都可以读取该文件。
- 设计屏幕: 使用屏幕创建屏幕 100 Painter (SE51),将输入字段放置在布局上,并在屏幕属性中输入下一个屏幕编号。
- 编写流程逻辑: 在流程逻辑选项卡上,调用一个用于 PBO 的模块和一个用于 PAI 的模块,如下所示。
- 构建 GUI 状态: 使用菜单创建状态 Painter (SE41)并使用 SET PF-STATUS 语句在 PBO 模块中设置它,以便 Save、Back 和 Exit 作为功能代码到达程序。
- 关联交易代码: 在 SE93 中创建一个对话事务,命名模块池,并将 100 输入为初始屏幕。
* Screen 100, flow logic PROCESS BEFORE OUTPUT. MODULE status_0100. PROCESS AFTER INPUT. MODULE user_command_0100. * Module pool SAPMZDEMO MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_100'. SET TITLEBAR 'TITLE_100'. ENDMODULE. MODULE user_command_0100 INPUT. CASE sy-ucomm. WHEN 'SAVE'. PERFORM save_data. WHEN 'BACK' OR 'EXIT'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE.
💡提示: LEAVE TO SCREEN 0 结束当前屏幕并返回到调用点,这是干净利落地离开对话事务的标准方法。





