ABAP 屏幕
📖 简介
屏幕编程(Dialog Programming)处理多个对象的开发,所有这些对象被分层链接到主程序,并且它们按顺序执行。对话程序开发利用ABAP工作台中的工具,这些是在标准SAP应用程序开发中使用的相同工具。
🔄 屏幕编程的基本概念
- 分层结构:多个对象按顺序链接到主程序
- 交互式:用户与界面进行实时交互
- 模块化:程序逻辑模块化组织
- 事件驱动:基于用户操作触发相应处理
💡 核心特点 - 对话程序应该由对象浏览器(事务:SE80)开发,以便所有对象都被链接到主程序,而不必显式地指向每个对象。高级导航技术增强了从一个对象移动到另一个对象的过程。
🏗️ 对话程序主要组件
| 组件 |
描述 |
作用 |
| 屏幕 |
用户界面的定义 |
显示数据和接收用户输入 |
| 模块池 |
程序的模块化语法 |
处理屏幕逻辑和数据操作 |
| 子程序 |
可重用的代码块 |
执行特定功能 |
| 菜单 |
用户界面导航选项 |
提供操作选择 |
| 交易 |
程序的访问入口 |
启动屏幕程序 |
🎯 组件关系
graph TB
A[屏幕] --> B[模块池]
B --> C[子程序]
D[菜单] --> A
E[交易] --> A
A -->|调用| F[程序逻辑]
F -->|处理| G[数据操作]
🛠️ 工具集
对话框程序开发使用的工具包括:
- SE80 - 对象浏览器:开发和管理所有对象
- SE51 - 屏幕画笔:设计屏幕布局
- PBO - 屏幕输出前的事件处理
- PAI - 屏幕输入后的事件处理
📝 创建新对话框程序
步骤详解
步骤1 - 创建程序
在事务SE80中:
- 从下拉列表中选择”程序”
- 为自定义SAP程序输入Z名称,如”ZSCREENEX”
- 按Enter键确认
步骤2 - 设置包含文件
- 选择”使用TOP INCL”
- 点击”Yes”按钮
步骤3 - 输入包含名称
- 输入热门包含名称,如”ZSCRTOP”
- 点击绿色刻度线(保存)
步骤4 - 保存程序
- 在属性屏幕中输入标题
- 点击保存按钮
🔧 屏幕开发流程
1. 添加屏幕到程序
步骤:
- 右键单击程序名称
- 选择选项 Create → Screen
- 输入屏幕号码(如”0211”)
- 点击绿色刻度线(保存)
- 在下一个屏幕中:
- 输入简短标题
- 设置为正常屏幕类型
- 点击顶部应用程序工具栏上的保存按钮
2. 屏幕布局设计
步骤:
- 点击应用程序工具栏中的布局按钮
- 出现Screen Painter窗口
- 添加文本字段并输入文本,如”Hello World”
- 保存并激活屏幕
📊 屏幕组成部分
graph LR
A[屏幕属性] --> B[屏幕布局]
B --> C[字段定义]
C --> D[流逻辑]
E[PBO事件] -->|初始化| F[屏幕显示前]
G[PAI事件] -->|处理| H[用户输入后]
I[事件处理] --> J[模块调用]
🚀 创建事务
步骤详解
步骤1 - 创建事务代码
- 右键单击程序名称
- 选择选项 创建→事务
- 输入事务代码(如”ZTRANEX”)
步骤2 - 配置事务
- 输入事务文本
- 设置程序和屏幕(如ZSCREENEX & 0211)
- 在”GUI支持”部分勾选”SAPGUI for Windows”复选框
- 保存并激活
📋 事务配置参数
| 参数 |
说明 |
示值 |
| 程序 |
屏幕程序名称 |
ZSCREENEX |
| 屏幕 |
屏幕编号 |
0211 |
| GUI支持 |
用户界面类型 |
SAPGUI for Windows |
| 文本 |
事务描述 |
示例屏幕程序 |
🎯 屏幕类型和属性
常用屏幕类型
| 屏幕类型 |
用途 |
特点 |
| Normal Screen |
标准屏幕 |
常规数据输入 |
| Subscreen |
子屏幕 |
嵌入到其他屏幕中 |
| Modal Dialog Box |
模态对话框 |
阻塞其他操作 |
| Popup |
弹出窗口 |
临时显示信息 |
关键属性设置
1 2
| PROCESS BEFORE OUTPUT. " PBO - 屏幕显示前 PROCESS AFTER INPUT. " PAI - 屏幕输入后
|
💡 屏幕编程最佳实践
1. 模块化设计
graph TB
A[主程序] --> B[模块池]
B --> C[PBO模块]
B --> D[PAI模块]
C --> E[数据初始化]
D --> F[输入验证]
F --> G[数据保存]
2. 错误处理
1 2 3 4 5 6
| MODULE validate_input. IF input_field IS INITIAL. MESSAGE '请输入必填字段' TYPE 'E'. SET SCREEN 0. ENDIF. ENDMODULE.
|
3. 数据传递
1 2 3 4 5 6 7 8 9 10 11 12
| MODULE data_to_screen OUTPUT. screen-matnr = wa_matnr. screen-maktx = wa_maktx. ENDMODULE.
MODULE user_command_0200 INPUT. ok_code = sy-ucomm. CASE ok_code. WHEN 'SAVE'. PERFORM save_data. ENDCASE. ENDMODULE.
|