zoukankan      html  css  js  c++  java
  • 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调用,如图:

    可以发现,由于调用栈的变化,想要用刚刚的方式获取调用者的全局变量是不行的:

  • 相关阅读:
    Rotate to Attend: Convolutional Triplet Attention Module
    论文阅读:《Automatic Change Detection in Synthetic Aperture Radar Images Based on PCANet》
    论文阅读:Change Detection From Synthetic Aperture Radar Images Based on Channel Weighting-Based Deep Cascade Network
    第二次作业:卷积神经网络 part 2
    CGAN和DCGAN
    GAN
    About me
    极大似然估计与贝叶斯估计
    支持向量机(一)
    非参数估计——Parzen窗与k近邻估计
  • 原文地址:https://www.cnblogs.com/hhelibeb/p/6594683.html
Copyright © 2011-2022 走看看