尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

080 、ALV进阶与最佳实践:一个困扰两天的刷新问题,让我重新整理了ALV的正确用法

080 、ALV进阶与最佳实践:一个困扰两天的刷新问题,让我重新整理了ALV的正确用法 080 、ALV进阶与最佳实践:一个困扰两天的刷新问题,让我重新整理了ALV的正确用法那是一个周四下午,用户说ALV点“导出”按钮经常卡死,偶尔还会闪退。我连上调试器,发现不是EXCEL生成慢,而是ALV刷新数据时,内部表指针失效,一旦用户滚动条停在某个位置,点工具栏按钮再回来,程序就崩溃。翻代码,发现是有人用REFRESH后直接CALL METHOD去刷ALV,却忘了SET_TABLE_FOR_FIRST_DISPLAY之后那个ref引用还指向旧的内存区域。这个坑不深,但很隐蔽。后来我把ALV这块重新捋了一遍,把那些零散的实战经验沉淀成一套“ALV进阶做法”,今天挑重点写出来。先别急着写业务逻辑,检查你的ALV数据源生命周期很多同事写ALV,习惯把gt_data定义在子程序中,循环填充完就丢给ALV。第一版能跑,业务一复杂就炸——因为ALV默认持有内表的数据引用,如果内表在栈上被释放,ALV就成了悬挂引用。我的做法是:ALV显示的内表,要么定义在全局变量区,要么用类成员属性,并且显式控制它的生命周期。程序退出之前别释放它,任何刷新都对着同一个内表操作,而不是重新CREATE一个内表再塞回去。DATA: gt_data TYPE TABLE OF zsflight_out. " 全局内表,别到处REFRESH CALL METHOD go_alv-set_table_for_
返回列表