第十二章DIALOG程序入门
前言
DIALOG程序是在SAP中,专门用于设计使用者接口的ABAP/4程序技巧;事
实上,所有SAP的FUNCTIONAL模块的操作接口,都是透过DIALOG程序开
发出来的。本章将对DIALOG程序操作的原理以及开发工具的使用进行简介。
DIALOG 程序运作的原理
要运作一个DIALOG程序,要包含以下的几个要项:
1. Transaction Code:这是启动DIALOG程序的T-CODE,在建立
DIALOG程序时便要定义之。
2. Screen:在DIALOG程序中的运作核心。程序开发者透过SCREEN
PAINTER定义DAILOG程序中每一个画面的样式与出现的字段
(FIELD),以及画面出现前后要运作的模块。
3. PAI module(Process After Input):指当使用者完成输入画面后,
需要动用到的动作的模块。
4. PBO module(Process Before Output):指一个SCREEN要显示
到屏幕之前,所要动用到的动作的模块。
5. Field module:所有模块、SCREEN所使用到的FIELD都在这里定
义。
6. Menu:程序开发者可以透过MENU PAINTER,定义MENU BAR
上值以及与程序之间连结。
7. Subroutines:程序开发者自订的子程序都定义在此。
8. 其它:如TITLE、VARIANT等,是在定义程序的一些细节。
在建立一个DIALOG程序时,必须要INCLUDE上述的几个OBJECT运作,而
这些OBJECT即提供DIALOG程序中各个SCREEN操作所需要的MODULE。
因此在设计、制作SCREEN时,先要决定SCREEN中要处理的动作以及所需
的数据域位,再将其中的内容逐一建入程序中。
而DIALOG程序的运作方式为何?请见下图:
1. 透过TRANSACTION CODE启动DIALOG程序。在定义TRANSACTION
CODE时,会指定第一个启动的SCREEN;假设此时指定SCREEN为XXX。
2. 启动后,SAP首先执行SCREEN XXX定义的PBO MODULE,执行的顺序
就依照SCREEN XXX中定义的顺序。
3. PBO执行完毕后,即将结果显示在屏幕上。
4. 使用者在屏幕上输入完数据后,按下特定的按钮或快速键(也就是所谓的
OK-CODE),随即启动PAI MODULE。在PAI MODULE中会对屏幕上的
FIELD执行定义的MODULE处理之,并会分析OK-CODE决定,回到
SCREEN XXX的PBO?或是离开目前的TRANSACTION?还是跳到另一
个SCREEN YYY?
PBO、PAI所有定义的MODULE的程序代码是存放在特定的MODULE里。至
于运算时所需定义的FIELD、定义MENU BAR的GUI STATU、或其它自订的
子程序,则是存在其它的MODULE里。
如何建立DIALOG程序
DIALOG程序是SCREEN、MODULE、STATU、TRANACTION CODE等各个
OBJECT的组合,因此建立DIALOG程序的过程,便是一个建立各种对象的过
程。
editor bar1. 建立DIALOG程序的TRANSACTION是ABAP/4 WORKBENCH里的
OBJECT LIST,TCODE是SE80。进入后的画面如下:
2. 如果要建立时,键入新程序名称,直接按「DISPLAY」后就会出现以下画面:
按YES后,就会出现以下画面。这个窗口的用意是确定您新建的程序名称;
而「With TOP INCL.」选项是决定是否要建立TOP INCLUDE MODULE。
这个MODULE的用途是用来定义GLOBE FIELD与MODULE用的,建议最好建立起来。
如果选择建立TOP INCLUDE,会接着出现以下窗口,以确定这个MODULE 的PROGRAM NAME。而这个PROGRAM是可以用ABAP/4 EDITOR直接编辑的。
而后就会出现编辑PROGRAM ATTRIBUTE的画面(如下)。值得注意的是,PROGRAM TYPE要设成「M」,表示是「MODULE POOL」,也就是专门INCLUDE MODULE的程序。
按下「SAVE」之后,就会出现下图的画面;此时一支DIALOG程序便建立起来了!接下来,我们将介绍其中MODULE与OBJECT的建立。
3. 此时对「Program Object Types」Double-Click,会出现如下图的画面:
OBJECT BROWSER,在选取特定的OBJECT之后(如PBO MODULE或SCREEN),再依据下方的IC
ON执行动作,我们就可以对指定的OBJECT 进行动作了。
4. 在DIALOG程序中,SCREEN是指个运作的核心;而运作一个SCREEN
所需要的MODULE、DATA FIELD、SUBROUTINE等就可在特定的OBJECT中定义。如果我们DISPLAY一个一般REPORTING的程序,会发现到他也会有上述的几个MODULE,只是比较简单而已。而这些OBJECT,都会在定义在主程序中,以「include module zXXXXXXX」的语法定义。事实上,主程序中也只有上述的程序代码而已。