尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

081、模块化程序与模块池(Module Pool)

081、模块化程序与模块池(Module Pool) 081、模块化程序与模块池(Module Pool)调试一个“点击按钮没反应”的老问题,追到一半发现PBO里死了循环,屏幕刷新把用户操作冲掉了。后来一看,那是个模块池程序,代码写在MODULE里,逻辑全堆在屏幕流控上。这种项目多了,光靠SE38看程序列表根本分不清哪个是能直接F8跑的,哪个是只能绑事务码的——这就是模块池(Module Pool)和普通ABAP程序最大的差别。模块化程序,说白了就是把代码拆成能重复套用的单元。早期ABAP没有方法,没有面向对象,大家靠子程序(FORM)、函数模块(FUNCTION MODULE)外加宏(DEFINE)来组织代码。这些单元各有脾气:FORM传参靠PERFORM,容易把内表整个拷一遍,性能上跑大单子会肉疼;函数模块有导入导出表,有异常处理,还能挂到RFC上让别的系统调,算是那个年代最体面的封装;宏就是预编译替换,写起来爽,调试时跟跳大神一样,一行展开一坨,别在复杂逻辑里用。后来面向对象来了,这些老辈子手段没被淘汰,代码库里照样一堆,你得认得它们。模块池跟这些不是一回事。模块池本身不是一个可执行程序,它是一堆ABAP代码加上一个或多个屏幕(Screen)的集合,专门跑对话事务。它没有标准的选择屏幕,也没有START-OF-SELECTION事件。它的入口是屏幕流控——PROCESS BEFORE OUTPUT(PBO)和PROCESS AFTER INPUT(PAI)。你用SE93建一个事务码,把程序名填进去,指定屏幕号,运行时ABAP会把那个屏幕拉起来,先跑PBO的MODULE,把数据填到屏幕字段上,然后等用户输入,点了确认键之后跑PAI,处理OK_CODE,再决定是留在当前屏幕、跳到下一个屏幕、还是退出。/
返回列表