ABAP开发-12、Dialog屏幕开发_1

时间:2024-11-09 15:01:34

系列文章目录


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、Dialog屏幕概览
  • 二、界面
    • 1、界面-界面中的事件块
    • 2、界面-创建界面
    • 3、界面- 属性
    • 4、界面-元素清单
    • 5、界面-Screen Layout Designer
    • 6、界面- 参照创建
    • 7、界面- 常用关键字
    • 8、界面- 数据处理逻辑
    • 9、界面- Module执行顺序
    • 10、界面- 程序事务代码
  • 三、界面元素
    • 1、按钮
    • 2、文本/输入框控件
    • 3、数据检查
    • 4、单选按钮
    • 5、复选框
    • 6、框BOX控件
    • 7、GUI STATUS/GUI TITLE
    • 8、Tabstrip控件
    • 9、使用向导创建Tabstrip Control
    • 10、标签页的修改
    • 11、表格控件TABLE CONTROL
    • 12、使用向导创建TABLE CONTROL
    • 13、Table Control列的修改
  • 四、F4的实现
  • 总结

前言


一、Dialog屏幕概览

  • Report程序:1类型程序
    • 制作报表,数据列表输出(Data List)输出
  • Online程序:M类型程序
    • 查询数据,录入,修改,删除等
    • Module Pool程序:以Moudle Pool形态进行业务流程的逻辑处理
    • Online程序:强调用Online Transaction来处理业务流程进行过程
    • Screen程序:主要使用Screen(屏幕对象),并实现见面间Flow Logic(流逻辑)
  • Online程序的主要对象
    • 界面(Screen)
    • 模块池(Modul Pool)
      • 全局字段(Global Data):声明模块池中所有模块都可使用的数据-TOP
      • PBQ模块(PBO Modules):屏幕输出前调用的模块-O01
      • PAI模块(PAI Modules):相应用户输入而调用的模块-I01
      • 子程序(Suboutines):可以在模块中任何位置调用的子程序-F01
    • 菜单(GUI Status)
    • 标题(GUI TITLE)
    • 事务代码(Transaction Code)
  • 用户可以访问的部分是Screen,用户对界面进行操作,相应的操作是通过Screen中的逻辑流控制,而数据声明和界面逻辑代码实现程序是在ABAP程序中

二、界面

  • SAP的屏幕开发
  • ABAP list代码实现(例如:选择界面的创建)
    • Report程序直接执行即可显示查询界面或结果界面
  • Dialog Screen绘制:较复杂,界面丰富
    • Online程序想要显示查询或结果界面必须建立Screen
    • 事件驱动程序
  • 屏幕功能开发
    • ABAP程序不能直接定义Screen,要通过Screen Painter这个工具来实现,界面元素的设定通过Screen Layout Designer来实现
    • 界面的设定:属性/大小/模式
    • 界面中的元素:描述或帮助,可以进行有效性检查
    • 界面中可以设置独立的Menu Bar或Title,点选按钮或回车可以触发相应功能
    • 功能实现位置:逻辑流中设定
  • Online程序不能备=被直接执行,必须通过事务代码,指定界面执行

1、界面-界面中的事件块

  • 用户访问界面,对界面进行操作,相应的操作是通过逻辑流控制的,也就是Screen Painter中定义Flow Logic的位置
  • 4个事件块:
    • PRECESS BEFORE OUTPUT
      • PBO中的处理逻辑控制界面输出前处理,如更改一些元素的值或属性
    • PROCESS AFTER INPUT
      • PAI中的处理逻辑控制用户对界面操作后的处理,如按回车对输入数据进行检查
    • PROCESS ON HELP-REQUEST
      • Field Help的实现
    • PROCESS ON VALUE-REQUEST
      • 输入帮助Search Help的实现(F4帮助)
  • 界面定义的步骤:
    • 创建界面,在Screen Attributes中定义Screen的属性
    • 在Screen Layout Designer和Element List中定义界面中的元素(位置及属性)
    • 在Screen Flow Logic中设定在Screen显示的逻辑处理和显示后对界面进行相应操作的逻辑处理

2、界面-创建界面

  • 界面编号的选取
    • 0000~9999
    • 其中1000和1010之间的屏幕编号为ABAP字典表的维护屏幕以及可执行程序的标准选择屏幕而预留
  • 属性
    • 设定屏幕基本属性
  • 元素清单
    • 包含界面中定义的所有构成元素
    • 可编辑元素属性
    • OK_CODE(要定义接受变量)
  • 流逻辑
    • 代码定义部分
  • 点击布局
    • 可以进入屏幕制作器SCREEN LAYOUT DESIGNER

3、界面- 属性

  • 短文本
  • 界面类型
    • 标准界面
    • 子界面
    • 对话框
    • 选择界面
  • 下一屏
    • 当前界面输出结束时出现的界面
    • 为空:程序结束
    • 程序中调用其他界面:调用优先
  • 行/列
    • 设置界面大小

4、界面-元素清单

文本字段TEXT FIELD:只能显示,不能修改
输入域INPUT/OUTPUT FIELD:显示或输入数据
复选框CHECKBOX:X:选中,空:未选中
单选按钮RADIO BUTTON:必须分组,组内只能选一个
按钮OUSHBUTTON:必须定义功能码FUNCTION CODE
TAB分页控制/创建向导:一个界面中显示多个标签页/标签页创建向导(自动生成代码)
框架控件BOX:将关联元素组成一个组
子屏幕区域SUBSCREEN AREA:可以在子界面区域连接其他界面
数据表格控件/创建向导TABLE CONTROL:以表单形式显示数据列表/表格创建向导(自动生成代码)
用户定义控件CUSTOM CONTROL:类的容器,实现ABAP object使用
状态图标 STATUS ICON:显示ICON

5、界面-Screen Layout Designer

  • 创建元素
    • 选中要创建的元素,在屏幕中拖拽生成
  • 修改属性
    • 双击
  • 元素的复制、粘贴、转换
    • 在元素上点击右键,在清单中选择

6、界面- 参照创建

  • 参照数据字典/程序字段创建屏幕元素
    • 选择界面中按钮
    • 从数据字典中获取
    • 从程序中获取

7、界面- 常用关键字

MODULE:调用DIALOG MODULE
FIELD:指Element List 中特定的Screen field,即可以判断Screen Field 的值或状态是否发生变化,在PAI中对相关Field进行控制时,一定要使用的关键字
ON:Field …ON(Field 的连接词)
value:Field …value(Field 的连接词)
CHAIN:CHAIN可以将多个FIELD捆绑成一个同时进行管理
ENDCHAIN:结束CHAIN
CALL:调用(Call a Subscreen)
LOOP:开始处理Screen Table
ENDLOOP:结束Screen Table 的处理

8、界面- 数据处理逻辑

在这里插入图片描述

9、界面- Module执行顺序

PROCESS BEFORE OUTPUT."PBO
MODULE A.
MODULE B.

PROCESS AFTER INPUT."PAI
MODULE C.
MODULE D.

执行MODULE A->执行MODULE B->将数据从ABAP工作区传到Screen工作区->显示界面->点击回车->将数据哦才能够Screen工作区传到ABAP工作区->执行MODULE C->执行MODULE D

10、界面- 程序事务代码

右键程序-》创建-》事务
输入事务代码、描述、选择程序、定义屏幕编号

三、界面元素

1、按钮

在屏幕编辑器中定义一个按钮
名称、文本、功能码
在PAI中处理结果

2、文本/输入框控件

  • TEXT控件:在适宜位置定义,定义名称、描述、显示长度
  • INOUT/OUTPUT控件
    • 显示效果是否可输入/必输项设置
    • 2D/3D显示
    • 下拉框设置/可接受负数值设置

3、数据检查

一些程序中,设置输入框后,需要根据用户的输入,进行有效性的检查等,DIALOG中提供了针对字段的检查

  • 针对某个字段
    • FIELD F1 MODULE M1 [ON REQUEST]
  • 针对多个字段同时检查
CHAIN.
FIELD F1.
FIELD F2.
FIELD F3.
MODULE M1 [ON CHAIN-REQUEST].
ENDCHAIN.

4、单选按钮

没有关联功能码,本身不触发PAI事件
成组设置功能码,可以触发
设置多个单选按钮,拖拽选中,右键建组
默认为第一个选中
在这里插入图片描述

5、复选框

默认情况下为不选中
可以关联功能码实现功能
在这里插入图片描述

6、框BOX控件

创建BOX控件,通过拖拽框将多个控件包含在BOX控件内
成组移动
设置隐藏/显示属性,需要设置GROUP字段

7、GUI STATUS/GUI TITLE

  • 按钮
    • 在程序中定义GUI STATUS
    • 在PBO中创建MODULE,用SET PF-STATUS语句设置按钮
    • 在PAI中根据SY-UCOMM的值进行判断
      • 使用OK_CODE/OK_SAVE
    • …EXCLUDING…一个字段的内表
  • 标题
    • 在程序中定义GUI TITLE
    • 在PBO中创建MODULE,用SET TITLEBAR语句设置标题
    • …with…(&1占位符)

8、Tabstrip控件

Tabstrip可以实现在某个界面中,通过tab页的形式来显示多个界面
构成:按钮及子界面区域

9、使用向导创建Tabstrip Control

创建Tabstrip Control
Tabstrip Name: Tabstrip Control控件名(例:TS_tab)
输入需要创建的各个TAB页的描述
设定各tab页的名称,及相应的子界面编号
设定各部分代码进入的include程序
激活程序后,可以查看到程序中增加了子界面的编号,可以依次进入界面,修改界面格式,设置方式与主界面相同,但不能设置GUI STATUS和GUI TITLE

10、标签页的修改

  • 减少
    选中标签页切换位置,点击删除,在数据定义/PBO/PAI中做相应变更,也可不变更
  • 增加
    选择pushbutton控件,在标签页旁增加一个页面
    NAME、TEXT、FCT CODE、REF FIELD
    增加数据定义/PBO/PAI处代码,可以直接参考复制

11、表格控件TABLE CONTROL

当界面中查询多条数据时,可以使用表格控件来进行表单输出
table control的行和列可以由以下元素构成:
KEYWORDS关键字、INPUT/OUTPUT FIELDS输入输出域、RADIO BUTTON/TADIO BUTTON GROUP单选按钮、CHECKBOX复选框、PUSHBUTTON按钮

12、使用向导创建TABLE CONTROL

  • 在程序中创建TABLE CONTROL使用的内表(向导会自动创建相应代码)
  • 创建TABLE CONTROL
  • Name of Table Control:Table Control 的名称(例如:TC_TAB)
  • 使用Internal Program Table创建,选择程序中的内表
  • 选择显示列
  • 设定属性
    • 只显示、不可输入
    • 可输入
    • 带标题
    • 行可选中
    • SINGLE:只能选一行
    • MULTIPLE:可以选中多行
  • 设定按钮
    • SCROLL:设定滚动条
    • 插入/删除行按钮
    • 选中所有/不选中按钮
    • 设定选中列的字段
  • 设定各部分进入的include程序

13、Table Control列的修改

  • 减少
    • 选中输入域,直接删除
    • 将PAI中的chain部分,相应字段注释
  • 增加
    • 内表中增加字段
    • 使用输入域增加列
    • Text控件增加描述
    • 在PAI的chain部分增加相应字段
  • 属性修改
    • 将输入域设成不可输 入
  • 在PAI中修改属性(修改 Table Control的静态属性)
    • 在PAI中修改静态属性,在PBO中输出时自动获取,按属性输出
    • 以列修改为例
      • 屏幕中创建按钮,功能码输入’COL‘
      • 修改table control控件属性结构中的Cols字段(此字段为一个内表)
      • 创建COLS表相应的结构,通过执行其中的第五列的行,将COL中的SCREEN字段(结构)中的input字段进行修改

四、F4的实现

  • 静态实现Srearch Help:数据字典中创建Search Help
    • Data Element 中设置关联
    • Input/Output中设置关联
    • Domain的固定值/数据库表的check table等也会实现F4帮助
  • 动态实现 Search Help:定义内表实现
    • PROCESS ON VALUE-REQUEST部分定义
      • FIELD< field >MODULE < module >.
    • 使用函数F4IF_INT_TABLE_VALUE_REQUEST
  • 下拉菜单
    • input/output field 属性:是否含有KEY显示
    • 使用函数VRM_SET_VALUES,在PBO中给List赋值

下拉菜单:

  • 界面控件定义为下拉菜单
    • ListBox(只显示描述)
    • ListBox with key(显示描述及关键字)
  • 在PBO部分增加Module设置给下拉菜单增加内容
    • 使用函数VRM_SET_VALUES
      • ID = (返回界面中的字段名称)
      • values = (下拉菜单内容所在内表,要参照VRM_VALUES定义)

几个特别的F4

  • 日期类型的F4
    • 函数:F4_DATE
    • 注意界面中的控件定义为D类型
  • 文件路径的F4
    • 函数:F4_FILENAME
    • 界面中的控件定义为RLGRAP-FILENAME

总结