对话编程教程:模块池 SAP ABAP

⚡ 智能摘要

对话编程 SAP ABAP 构建模块池程序,这些程序通过屏幕与用户交互并更改数据库内容。本页解释了事务代码、屏幕、GUI 状态、屏幕流程逻辑、动态屏幕以及模块池结构。

  • 💬 核心定义: 对话程序处理任何用户交互,例如输入数据、选择菜单项或单击按钮,并且可以更新数据库。
  • 🅼 计划类型: 对话程序是 M 型模块池,不能独立运行,必须附加到至少一个带有初始屏幕的事务代码。
  • 🧩 组件: 事务代码、屏幕、GUI 状态、ABAP 模块池和流程逻辑共同构成一个对话应用程序。
  • 🔄 流程逻辑: PBO 在屏幕出现之前运行,PAI 在用户操作之后运行,POH 回答 F1,POV 回答 F4。
  • 🖥️ Dynpro: 屏幕及其流程逻辑构成一个动态屏幕,每个动态屏幕控制对话中的一个步骤。
  • 📦 模块池: 在同一事务中调用的所有动态程序都引用一个公共模块池,该模块池保存对话模块。
  • 🛠️ 创建路径: SE80 创建模块池,SE51 设计屏幕,SE41 构建 GUI 状态,SE93 链接事务代码。

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 处理输入,然后调用下一个屏幕。

如何创建模块池程序

以上组件按固定顺序创建。以下步骤从一个空的模块池构建一个可运行的事务。

  1. 创建模块池: 在 SE80 或 SE38 中,创建一个名称以“ SAPMZ 并将程序类型设置为 M – 模块池如果不删除对象,则无法更改类型。
  2. 声明全局数据: 将 TABLES 语句和全局变量放在 TOP 包含文件中,这样池中的每个对话模块都可以读取该文件。
  3. 设计屏幕: 使用屏幕创建屏幕 100 Painter (SE51),将输入字段放置在布局上,并在屏幕属性中输入下一个屏幕编号。
  4. 编写流程逻辑: 在流程逻辑选项卡上,调用一个用于 PBO 的模块和一个用于 PAI 的模块,如下所示。
  5. 构建 GUI 状态: 使用菜单创建状态 Painter (SE41)并使用 SET PF-STATUS 语句在 PBO 模块中设置它,以便 Save、Back 和 Exit 作为功能代码到达程序。
  6. 关联交易代码: 在 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 结束当前屏幕并返回到调用点,这是干净利落地离开对话事务的标准方法。

常见问题

CALL SCREEN 会打开一个新的屏幕,并将调用屏幕保留在堆栈中,以便处理返回到该屏幕。LEAVE TO SCREEN 会替换当前屏幕,并且不会返回任何内容给调用者。

一个名为 SAPMZDEMO 分为四个部分:MZDEMOTOP 用于全局数据,MZDEMOO01 用于 PBO 模块,MZDEMOI01 用于 PAI 模块,MZDEMOF01 用于子程序。工作台会自动生成这些模块。

在 GUI 状态中将按钮的功能类型设置为 E,并使用 MODULE exit AT EXIT-COMMAND 调用其模块。该模块会在字段验证之前运行,以便用户可以在输入无效信息的情况下离开屏幕。

是的。ABAP 开发工具中的 AI 助手会根据屏幕描述自动生成 PBO 和 PAI 模块、SY-UCOMM 上的 CASE 语句以及字段验证。屏幕布局本身仍然由系统绘制。 Painter.

Dynpro 仍然运行所有经典程序 SAP GUI事务处理。新的用户界面通常使用Fiori构建,人工智能工具通过读取现有流程逻辑并提出等效的服务和应用程序设计来提供帮助。

总结一下这篇文章: