看下圖代碼:java
report z_xul_test2 中 定義了 全局變量 G_DATA1 , 分別調用了 z_xul_tes1 中的 form 和 function zbapi_test , 這兩個調用都沒有將api
G_DATA1 做爲參數,但在兩個子程序中經過 field-symbol 成功修改了其值。app
打印結果以下:oop
若是直接把 G_DATA1 做爲一個普通變量來改,在語法檢查時就通不過的,但若是利用 field-symbol 在運行期來修改就能夠成功修改。測試
一樣在 function 中也能夠修改。 這個function 沒有任何參數。spa
頗有意思,若是碰到加強出口都是不帶修改功能的,無法實現經過出口來改程序中的值,這時候,利用這個特色,說不定將不可能變成可能。。。.net
http://blog.csdn.net/fangkailove/article/details/39695519orm
測試代碼,你們能夠本身試試。blog
- 源代碼:
- *&---------------------------------------------------------------------*
- *& Report Z_XUL_TEST2
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
-
- REPORT Z_XUL_TEST2.
-
-
-
- DATA:G_DATA1(100). "定義全局變量
-
-
- G_DATA1 = '111111111111'. "初始值
- WRITE: / , '\ REPORT Z_XUL_TEST2 初始值:' ,G_DATA1.
-
-
- PERFORM TEST1_FORM1 IN PROGRAM ('Z_XUL_TEST1') . "調用其它程序的 FORM
- WRITE: / , '\ 通過Z_XUL_TEST1.TEST1_FORM1修改後:' ,G_DATA1.
-
-
- CALL FUNCTION 'ZBAPI_TEST' . "調用 function module
- WRITE: / , '\ 通過 ZBAPI_TEST修改後:' ,G_DATA1.
-
-
-
-
-
-
- *&---------------------------------------------------------------------*
- *& Report Z_XUL_TEST1
- *&
- *&---------------------------------------------------------------------*
- *& 沒有任何參數,卻改變了主程序裏的變量。
- *&
- *&---------------------------------------------------------------------*
-
- REPORT Z_XUL_TEST1.
-
- form test1_form1 .
-
-
- "(Z_XUL_TEST2)G_DATA1 = '嘗試1'.
- "G_DATA1 = '嘗試1'.
-
-
- FIELD-SYMBOLS:<f1> TYPE any.
- data fieldname(50).
- fieldname = '(Z_XUL_TEST2)G_DATA1' .
- ASSIGN (fieldname) to <f1> .
-
- <f1> = '2222222222222222'.
-
- ENDFORM.
-
-
-
-
- FUNCTION ZBAPI_TEST .
-
-
-
- FIELD-SYMBOLS:<f1> TYPE any.
- data fieldname(50).
- fieldname = '(Z_XUL_TEST2)G_DATA1' .
- ASSIGN (fieldname) to <f1> .
-
- <f1> = '333333333'.
-
-
- ENDFUNCTION.