調試使用了函數模組的程式時需要注意的一個小問題

來源:互聯網
上載者:User
昨天下午複製了一個系統標準程式,在它的 SAP List Viewer 控制項裡添加一個顯示欄位,結果在內表裡增加了欄位以後,調試了一個小時也沒能在 List Viewer 中顯示出來。看看所有調用的地方該添加的都添加了,就是運行到系統的函數模組 REUSE_ALV_FIELDCATALOG_MERGE 時,添加的欄位就死活出不來。因為快下班了,就沒有繼續調——加班解決問題是個不好的工作習慣。
今天早上來了之後,開啟程式繼續查,在調用 REUSE_ALV_FIELDCATALOG_MERGE 的地方加了個斷點,深入函數模組內部繼續觀察。結果,居然昨天沒有顯示的欄位今天自己就出來了,這也太奇怪了吧。

回想這期間做的工作,再聯想到最近看的標準教程,忽然覺悟——由於函數模組所屬的函數組在函數模組被調用時會整體載入,同時函數組中間的全域資料對象也一起被載入,並且在程式運行過程中一直保持。
這樣這個問題就可以解釋了,昨天調試,一直是在事務碼 SE38 下進行的,無論怎麼改程式,都沒有退出事務碼,也就沒有退出整個程式的內部會話,這樣,REUSE_ALV_FIELDCATALOG_MERGE 所屬的函數組 SALV 也就總在這個內部會話中盤踞著,導致某些 SALV 中的全域變數在調用時值未改變,從而使輸出結果也無法達到預期的內容。而今天是退出 SE38 並重新讀取和運行程式,退出後內部會話所佔用的記憶體已經清除,重新運行時會再次載入函數組並初始化相應全域變數,這樣用新值運算出來的結果就正確了。

由此想到,學習基礎知識確實非常重要。如果沒有最近學習標準教程,對此問題就無法解釋,最後只能歸於 RPWT,而現在能夠解釋原因並寫出這篇文章為後來的朋友解惑,我也感覺到十分欣慰。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.