您的位置:首页 > 其它

调试使用了函数模块的程序时需要注意的一个小问题

2007-07-11 09:29 911 查看
昨天下午复制了一个系统标准程序,在它的 SAP List Viewer 控件里添加一个显示字段,结果在内表里增加了字段以后,调试了一个小时也没能在 List Viewer 中显示出来。看看所有调用的地方该添加的都添加了,就是运行到系统的函数模块 REUSE_ALV_FIELDCATALOG_MERGE 时,添加的字段就死活出不来。因为快下班了,就没有继续调——加班解决问题是个不好的工作习惯。
今天早上来了之后,打开程序继续查,在调用 REUSE_ALV_FIELDCATALOG_MERGE 的地方加了个断点,深入函数模块内部继续观察。结果,居然昨天没有显示的字段今天自己就出来了,这也太奇怪了吧。

回想这期间做的工作,再联想到最近看的标准教程,忽然觉悟——由于函数模块所属的函数组在函数模块被调用时会整体加载,同时函数组中间的全局数据对象也一起被加载,并且在程序运行过程中一直保持。
这样这个问题就可以解释了,昨天调试,一直是在事务码 SE38 下进行的,无论怎么改程序,都没有退出事务码,也就没有退出整个程序的内部会话,这样,REUSE_ALV_FIELDCATALOG_MERGE 所属的函数组 SALV 也就总在这个内部会话中盘踞着,导致某些 SALV 中的全局变量在调用时值未改变,从而使输出结果也无法达到预期的内容。而今天是退出 SE38 并重新读取和运行程序,退出后内部会话所占用的内存已经清除,重新运行时会再次加载函数组并初始化相应全局变量,这样用新值运算出来的结果就正确了。

由此想到,学习基础知识确实非常重要。如果没有最近学习标准教程,对此问题就无法解释,最后只能归于 RPWT,而现在能够解释原因并写出这篇文章为后来的朋友解惑,我也感觉到十分欣慰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐