ABAP 在被访问的程序中获取访问程序的全局变量
?
前些日子接到過一個看起來比較普通的需求:
存在一個系統標準函數組FG01,內含函數模塊FM00,FM01……等等。在系統程序中,FM00會調用FM01,通過FM01獲取獲取某些數據。
需求要求,復制一個FM01為ZFM01,修改其中的代碼,然后通過Work Organizer配置的方式替換掉標準程序中的FM01。
?
做到一半,卻遇到了障礙。因為標準程序中,FM00和FM01是在同一個函數組里面的,因此,這兩個函數模塊會共用某些全局變量。而自建的ZFM01,顯然不屬于這個標準函數組的一部分,因此并不能直接獲取到這些全局變量。如下圖:
當時的我認為,標準函數組中的全局變量的作用范圍即標準函數組本身,在這個函數組之外的函數是不可能訪問到這些全局變量的。因此,我提出當前的方案不妥當,并給出了更為簡潔的辦法來滿足需求。業務顧問對我的建議欣然同意。接下來,我很順利地完成了開發任務,甚至感覺自己做得很不錯。
?
然而,事后看來,我確實犯下了無知的錯誤...在一個被調用的函數里,真的不能訪問到調用函數所屬函數組中的全局變量嗎?答案是:可以。
?
以下是一個小小的示例:
1,創建第一個函數組:ZTEST_GETV。在TOP文件中聲明全局變量global
?
2,創建第二個函數組:ZTEST_ACCESS,在其中創建需要被調用的函數模塊ZTEST_ACCESSED1
?
3,在ZTEST_GETV中創建一個FM:ZTEST_CALLER,為全局變量global賦值“全局變量”,并調用ZTEST_ACCESSED1
?
4,在被調用的函數模塊中寫入以下代碼(SAPLZ_TEST_GETV是調用函數所在的程序名):
?
現運行ZTEST_CALLER,進入調試模式,可以看到:
?
也就是說,此時,我們已經成功地在第二個函數組中獲取了第一個函數組中的全局變量的值。
?
?當然,這不是一種無限制的功能,如果將被調用的程序改為RFC調用,如圖:
可以發現,由于調用棧的變化,想要用剛剛的方式獲取調用者的全局變量是不行的:
轉載于:https://www.cnblogs.com/hhelibeb/p/6594683.html
總結
以上是生活随笔為你收集整理的ABAP 在被访问的程序中获取访问程序的全局变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ4403 序列统计—Lucas你
- 下一篇: FFT-Matlab初步实现