一、DIALOG屏幕编程
DIALOG屏幕编程是SAP ABAP中用于创建用户交互界面的一种技术,主要用于开发事务性应用程序。它允许用户通过屏幕输入或操作数据,程序根据用户的操作执行逻辑处理。
1、DIALOG编程的主要组件
a、屏幕 (Screen)
DIALOG程序的核心部分,由多个屏幕组成。每个屏幕都有一个编号(Screen Number)和对应的屏幕流逻辑(Screen Flow Logic)。
b、屏幕流逻辑 (Flow Logic)
定义屏幕的行为,例如输入验证、模块调用。常见的流逻辑关键字:
1)PROCESS BEFORE OUTPUT (PBO)
:输出屏幕前执行的逻辑。
2)PROCESS AFTER INPUT (PAI)
:用户输入后执行的逻辑。
c、模块 (MODULE)
在屏幕流逻辑中使用的逻辑块,用于处理具体的程序逻辑。例如:输入验证、数据更新等。
d、状态栏 (GUI Status)
定义屏幕上的菜单和功能按钮(SY-UCOMM
用于捕获用户动作)。
2、DIALOG编程的核心概念
a、PBO和PAI的执行流程
PROCESS BEFORE OUTPUT
输出屏幕前执行逻辑以及
PROCESS AFTER INPUT
用户输入后执行逻辑。
b、数据传输
使用全局变量或结构在程序和屏幕之间传递数据,屏幕字段绑定程序变量(方法:屏幕字段和程序变量名相同),PBO用于显示变量值,PAI用于接收用户输入。
c、屏幕跳转
LEAVE TO SCREEN <screen_number>.返回到指定屏幕。
LEAVE TO SCREEN 0.返回到上一屏幕。
CALL SCREEN <screen_number>.跳转到新屏幕。
d、功能码 (SY-UCOMM)
捕获用户操作(如点击按钮、选择菜单项)。但一般在编程过程中,不会直接使用SY-UCOMM,因为会涉及到需要清空功能码的语句,直接清空SY-UCOMM可能会影响程序的正常逻辑,因此我们通常会定义一个变量OK_CODE TYPE SY-UCOMM。
二、PBO与PAI
PBO和PAI是DIALOG开发中最重要的两个概念,是ABAP DIALOG开发的核心。可在关键字之后添加模块,进行功能实现。
1、PBO(PROCESS BEFORE OUTPUT
)
PBO 是在屏幕显示之前执行的事件。这个事件的主要任务是准备好在屏幕上显示的数据和界面元素。
a、初始化数据
给输入字段等赋初值,准备好屏幕上需要展示的数据。
b、修改屏幕元素的属性
你可以在 PBO 事件中修改屏幕上元素的属性,控制哪些字段需要禁用或只读。
c、动态调整界面
在 PBO 中,你可以根据特定条件控制屏幕中字段的显示、隐藏或只读等属性。根据用户角色或权限动态改变屏幕布局。
2、PAI(PROCESS AFTER INPUT
)
PAI 是在用户在屏幕上输入数据后,提交(如点击按钮)时触发的事件。这个事件主要用于处理用户输入的验证、保存或更新数据等操作。PAI 事件的主要任务是:
a、验证用户输入
检查用户在屏幕上输入的数据是否符合业务规则。
b、更新数据
处理输入的数据,将其更新到相应的工作区(Work Area)或内表(Internal Table)。
c、控制用户交互
根据用户的输入结果,决定是否跳转到其他屏幕或显示错误消息。处理表单提交或按钮点击事件。
三、创建 ABAP Dialog(Dynpro)屏幕
1、使用事务码SE38创建 注意:这里的类型需要选择模块池!后续选择包保存即可。
模块池程序是 SAP 提供的一种专门用于屏幕处理的程序类型,支持 Dynpro 的开发。
a、Dialog 屏幕需要和事件处理逻辑(PBO 和 PAI)结合,而模块池程序的结构专门为这种交互设计。
b、它允许你将每个屏幕的逻辑(包括输入、输出、用户事件等)通过模块(MODULE
)进行组织和管理。
创建好之后,是PROGRAM不是之前选择可执行程序时的REPORT。
2、创建屏幕
a、点击显示对象列表
b、右键->创建->屏幕。
c、输入屏幕编号。
d、输入简短描述。
可以在逻辑流里面看到前文提到的PBO和PAI,后续会在此创建各模块。
3、创建事务码
为了更好的查看写的屏幕效果,最好先创建事务码,通过事务码来查看屏幕效果。
a、右键->创建->事务。
b、输入事务码,短文本。
c、 输入程序名字(即创建屏幕的时候的程序名),和显示的屏幕(刚刚创建的屏幕),下面的GUI支持全部勾选,点击保存。可以运行尝试一下看是否成功创建。
屏幕中还没有添加任何的元素,所以还没有任何显示。
4、创建一个INCLUDE程序,用于定义所有的变量。双击创建。
其中的变量定义。
*&---------------------------------------------------------------------*
*& 包含 ZVIA_SCREEN_D01
*&---------------------------------------------------------------------*
DATA :
gv_date TYPE sy-datum,"当前日期格式
gv_time TYPE sy-uzeit."当前时间格式
5、创建一个初始化变量的模块,方便后续演示。
初始化数据是在屏幕输出前,所以应该在 PBO 处。
a、输入如下模块创建语句。双击创建。
b、创建一个INCLUDE程序,将所有PBO模块放至此程序中。
c、其中的定义语句。
*&---------------------------------------------------------------------*
*& Module INIT_DATA OUTPUT
*&---------------------------------------------------------------------*
*& 初始化数据
*&---------------------------------------------------------------------*
MODULE init_data OUTPUT.
gv_date = sy-datum."当前日期
gv_time = sy-uzeit."当前时间
ENDMODULE.
四、页面元素
点击布局就可以前往编辑页面。
左边为页面元素。
1、文本字段
点击选择之后,长按拖动。点击即可输入文本(显示的文字),和名称(取一个字段名称)。双击可添加属性,后面会涉及到,自己可以尝试看看效果。
查看效果。一定记得先保存,可以不在此激活,在程序中激活。
2、输入/输出字段
点击选择之后,长按拖动。点击和名称(取一个字段名称,这里的字段名称需要和对应的变量名保持一致,才能在后续的获取用户输入或者对输出字段进行处理的时候绑定到对应的数据)。
a、输入字段
这里将其设定成学生学号。具体的表可以看博文:学生表中提到的学生表。
注意:
1)双击后,词典->格式处请和自己定义变量的时候的TYPE保持一致。
2)程序->INPUT处可以编辑输入状态。
NOT POSSIBLE:不可输入
POSSIBLE:允许输入
3)可以给多个元素添加组,方便对他们一并进行处理。一个元素可以属于多个组,但注意字段处理的时候的字段名称。
查看效果。
b、仅输出字段
演示设置一个输入/输出框来显示当前时间。程序处选择仅输出。
格式一定要进行修改,和定义变量的时候保持一致。
这里的日期用的input not possible,时间用的仅输出,可以看看两者的区别。
3、复选框
需要填写名称,这里的名称也需要和定义的变量保持一致。
双击可填写功能码。填写功能码才可用,功能码随便取,只要不撞就行。
还需要增加变量定义。勾选的时候 = 'X'。
gv_check TYPE flag."FLAG = C LENGTH 1
4、单选框
需要添加名称。
一个单选是没有意义的,单选默认直接选,不可以取消,所以需要创建组。
按住CTRL点要组合的按钮。
点击编辑-> 分组-> 单选按钮组-> 定义。完成。
实现的效果。
5、按钮
点击后,长按拖选长度,输入名称文本。发现还是红色。
双击,在功能码处填写功能码。会在用户指令处用到该功能码,下一篇会涉及到。
实现的效果。
6、框
类似于REPORT可执行程序中的BLOCK。
点击,框选住需要在一个框中的元素,输入文本(即框的标题)和名称。
显示的效果。
五、总结
这一篇主要是对于DIALOG的概念和最重要的PBO和PAI进行了解释,并对常用的页面元素进行了演示。后续会更新下拉框和涉及到对于数据进行处理、处理用户指令的内容。