ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了

看下图代码:

report  z_xul_test2 中 定义了 全局变量 G_DATA1 , 分别调用了 z_xul_tes1 中的 form  和 function zbapi_test , 这两个调用都没有将

G_DATA1 作为参数,但在两个子程序中通过 field-symbol 成功修改了其值。

ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了_第1张图片

打印结果如下:

ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了_第2张图片

 

如果直接把 G_DATA1 作为一个普通变量来改,在语法检查时就通不过的,但如果利用 field-symbol 在运行期来修改就可以成功修改。

ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了_第3张图片

 

同样在 function 中也可以修改。 这个function 没有任何参数。

ABAP FIELD-SYMBOLS 有大作用- 将没有可改参数的增强出口变得也能改主程序的值了_第4张图片

 

 

很有意思,如果碰到增强出口都是不带修改功能的,没法实现通过出口来改程序中的值,这时候,利用这个特点,说不定将不可能变成可能。。。

 

http://blog.csdn.net/fangkailove/article/details/39695519

 测试代码,大家可以自己试试。

[java]  view plain copy
  1. 源代码:  
  2. *&---------------------------------------------------------------------*  
  3. *& Report  Z_XUL_TEST2  
  4. *&  
  5. *&---------------------------------------------------------------------*  
  6. *&  
  7. *&  
  8. *&---------------------------------------------------------------------*  
  9.   
  10. REPORT  Z_XUL_TEST2.  
  11.   
  12.   
  13.   
  14. DATA:G_DATA1(100).  "定义全局变量  
  15.   
  16.   
  17. G_DATA1 = '111111111111'. "初始值  
  18. WRITE: / , '\ REPORT  Z_XUL_TEST2 初始值:' ,G_DATA1.  
  19.   
  20.   
  21. PERFORM TEST1_FORM1 IN PROGRAM ('Z_XUL_TEST1')  . "调用其它程序的 FORM  
  22. WRITE: / , '\ 经过Z_XUL_TEST1.TEST1_FORM1修改后:' ,G_DATA1.  
  23.   
  24.   
  25. CALL FUNCTION 'ZBAPI_TEST' . "调用 function module  
  26. WRITE: / , '\ 经过 ZBAPI_TEST修改后:' ,G_DATA1.  
  27.   
  28.   
  29.   
  30.   
  31.   
  32.   
  33. *&---------------------------------------------------------------------*  
  34. *& Report  Z_XUL_TEST1  
  35. *&  
  36. *&---------------------------------------------------------------------*  
  37. *& 没有任何参数,却改变了主程序里的变量。  
  38. *&  
  39. *&---------------------------------------------------------------------*  
  40.   
  41. REPORT  Z_XUL_TEST1.  
  42.   
  43. form  test1_form1  .  
  44.   
  45.   
  46.    "(Z_XUL_TEST2)G_DATA1 = '尝试1'.  
  47.    "G_DATA1 = '尝试1'.  
  48.   
  49.   
  50.    FIELD-SYMBOLS:<f1> TYPE any.  
  51.    data fieldname(50).  
  52.    fieldname = '(Z_XUL_TEST2)G_DATA1' .  
  53.    ASSIGN (fieldname) to <f1>  .  
  54.   
  55.    <f1> = '2222222222222222'.  
  56.   
  57. ENDFORM.  
  58.   
  59.   
  60.   
  61.   
  62.    FUNCTION ZBAPI_TEST .  
  63.   
  64.   
  65.   
  66.    FIELD-SYMBOLS:<f1> TYPE any.  
  67.    data fieldname(50).  
  68.    fieldname = '(Z_XUL_TEST2)G_DATA1' .  
  69.    ASSIGN (fieldname) to <f1>  .  
  70.   
  71.    <f1> = '333333333'.  
  72.   
  73.   
  74.    ENDFUNCTION.  

你可能感兴趣的:(Field)