ABAP中开发的程序分2种。REPORT和DIALOG.在REPORT编程中, SAP系统中已经安排了事件流执行顺序。我们只要在相应的事件块块中敲上代码,程序会按照事件块的先后顺序执行的。
REPORT事件流大概如下:INITIALIZATION——》AT-SELECTION——》AT-SELECTION-OUTPUT ——》START-OF-SELECTION——》AT USER_COMMAND——》AT LINE-SELECTION.——》TOP-OF-PGAE——》END-OF-PAGE ——END-OF-SELECTION.
DIALOG中由flow logic 控制, flow logic分成PBO(Process Before Output)与PAI(Process After Input)。一个屏幕流的执行过程是:屏幕对应的PBO(屏幕输出前处理块)——》输出相应的屏幕——》 PAI(屏幕输出后处理块)。如果在PAI中没有去触发执行下一个屏幕事件的话,会在当前的屏幕流中进行循环,也就是当前PBO->显示屏幕->PAI进行循环。
PBO过程中处理的大部分是内表数据填充到要显示的屏幕字段中。
PAI过程中处理的大部分是把更新的屏幕数据更新到内表,根据相应的屏幕命令动作做相应的事件。比如保存按钮的画,要把数据从内表更新到数据库中。
如果输出屏幕是数字的画,在SE51制作的屏幕字段中,后面要加大写的‘V’,否则负数会导致系统的SHORT DUMP.
在一个dialog中一个内表很有可能贯穿好几个屏幕,这时就要非常小心屏幕的流向了。比如这样一个场景:在500中抓取数据放入一个内表中,在600屏幕中发生一个动作到屏幕700进行一个数据的更新,数据跟新完之后跳回屏幕600,屏幕600进行保存后返回到屏幕500。而这时又开始执行屏幕500的PBO,这时这个内表数据照理说要重新抓取的哦!但是问题是如果在屏幕500中抓取的这个内表数据是根据后续的一些条件来抓取的话就会产生一些问题。这时候千万要注意的是在抓取数据到这个内表要进行内表清空的动作。否则这个内表在第二次进入500屏幕时是还存在值的,不一定是我们想要的!所以在抓取数据到一个内表前对内表的清空操作是必要的。以免引起不必要的麻烦!
区别于REPORT的一点是REPORT就按事件流执行下来完就完成了,而在DIALOG中常常存在着杀回马枪的动作,而这时数据该是什么样的要非常小心,就因为没写一个CLEAR就会要了你的命!