ABAP 屏幕

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中:

  1. 从下拉列表中选择”程序”
  2. 为自定义SAP程序输入Z名称,如”ZSCREENEX”
  3. 按Enter键确认

步骤2 - 设置包含文件

  1. 选择”使用TOP INCL”
  2. 点击”Yes”按钮

步骤3 - 输入包含名称

  1. 输入热门包含名称,如”ZSCRTOP”
  2. 点击绿色刻度线(保存)

步骤4 - 保存程序

  1. 在属性屏幕中输入标题
  2. 点击保存按钮

🔧 屏幕开发流程

1. 添加屏幕到程序

步骤:

  1. 右键单击程序名称
  2. 选择选项 Create → Screen
  3. 输入屏幕号码(如”0211”)
  4. 点击绿色刻度线(保存)
  5. 在下一个屏幕中:
    • 输入简短标题
    • 设置为正常屏幕类型
    • 点击顶部应用程序工具栏上的保存按钮

2. 屏幕布局设计

步骤:

  1. 点击应用程序工具栏中的布局按钮
  2. 出现Screen Painter窗口
  3. 添加文本字段并输入文本,如”Hello World”
  4. 保存并激活屏幕

📊 屏幕组成部分



graph LR
    A[屏幕属性] --> B[屏幕布局]
    B --> C[字段定义]
    C --> D[流逻辑]
    
    E[PBO事件] -->|初始化| F[屏幕显示前]
    G[PAI事件] -->|处理| H[用户输入后]
    I[事件处理] --> J[模块调用]

🚀 创建事务

步骤详解

步骤1 - 创建事务代码

  1. 右键单击程序名称
  2. 选择选项 创建→事务
  3. 输入事务代码(如”ZTRANEX”)

步骤2 - 配置事务

  1. 输入事务文本
  2. 设置程序和屏幕(如ZSCREENEX & 0211)
  3. 在”GUI支持”部分勾选”SAPGUI for Windows”复选框
  4. 保存并激活

📋 事务配置参数

参数 说明 示值
程序 屏幕程序名称 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.