ACCESSABAP 在被访问的顺序中获取访问程序的全局变量

 

前些日子接到过一个看起来相比较普通的需要:

存在一个体系专业函数组FG01,内含函数模块FM00,FM01……等等。在系统程序中,FM00会调用FM01,通过FM01获取获取某些数据。

急需要求,复制一个FM01为ZFM01,修改其中的代码,然后通过Work
Organizer
配置的不二法门替换掉标准程序中的FM01。

 

完成一半,却遇上了障碍。因为专业程序中,FM00和FM01是在同一个函数组里面的,因而,这六个函数模块会共用一些全局变量。而自建的ZFM01,显然不属于那一个专业函数组的一有些,因而并不可能直接拿走到那一个全局变量。如下图:

ACCESS 1

顿时的本身认为,标准函数组中的全局变量的效率范围即规范函数组本身,在这些函数组之外的函数是不容许访问到这么些全局变量的。由此,我指出当前的方案不妥当,并付出了越来越简单的法门来满意要求。业务顾问对自家的指出欣然同意。接下来,我很顺利地形成了支出任务,甚至觉得温馨做得很正确。

 

而是,事后看来,我真正犯下了无知的错误…在一个被调用的函数里,真的不能访问到调用函数所属函数组中的全局变量吗?答案是:可以。

 

以下是一个小小示例:

1,创制第一个函数组:ZTEST_GE电视机。在TOP文件中声称全局变量global

 ACCESS 2

 

2,创立第二个函数组:ZTEST_ACCESS,在里头创造需要被调用的函数模块ZTEST_ACCESSED1

ACCESS 3

 

ACCESS,3,在ZTEST_GE电视中创造一个FM:ZTEST_CALLER,为大局变量global赋值“全局变量”,并调用ZTEST_ACCESSED1

ACCESS 4

 

4,在被调用的函数模块中写入以下代码(SAPLZ_TEST_GE电视机是调用函数所在的次序名):

ACCESS 5

 

现运行ZTEST_CALLER,进入调试情势,可以见见:

ACCESS 6

 

也就是说,此时,我们曾经成功地在第二个函数组中拿到了第一个函数组中的全局变量的值。

 

 当然,这不是一种无界定的效能,倘使将被调用的程序改为RFC调用,如图:

ACCESS 7

可以窥见,由于调用栈的变通,想要用刚刚的形式获取调用者的全局变量是异常的:

ACCESS 8

相关文章