日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ABAP】Field Symbol使用总结

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ABAP】Field Symbol使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Field?Symbol(以下簡稱FS),主要作用是程序更加靈活,有時可以實現一般做法無法實現的功能,比如動態ALV內表,LOOP使用FS還可以提高程序效率。FS缺點是影響程序可讀性,為修改和維護代碼造成困難,而且有時錯誤是編譯器檢查不出來的,只有運行時才會發生錯誤。下面是FS的一些使用總結。

?

首先請牢記,FS必須和某個變量,結構或者內表綁定后才能使用,這點和C語言里的指針(在ABAP里最接近指針的是TYPE?REF?TO)是不同的,在使用FS前必須分配給某個變量,不然會發生FS未分配的運行時錯誤。注意如果LOOP內表時ASSIGNINGFS.,那么之后假如有REFRESH內表的操作的話,FS也會再次回到初始未被ASSIGN的狀態,這時如果使用FS也會發生FS未分配的RUNTIME?ERROR

?

ASSIGN?‘200’?TO<fs1>.意思是指向常量的<fs1>,之后不可更改值,比如執行<fs1>?=?‘300’會發生運行時錯誤。如果想實現改值的效果,那么需要ASSIGN一個變量給FS

DATA?gv_abc(6).

gv_abc?=?'200'.

ASSGIN?gv_abc?TO?<fs1>.

<fs1>?=?'300'.

這時<fs1>就從200變更為300了,另外如果直接改變變量的值,那么<fs1>也會發生變化。比如上例里gv_abc?=?'400',那么<fs1>也隨之變為400,因為<fs1>gv_abc是綁定了的。

?

假設定義了<fs1><fs2>兩個FS,分別ASSGIN到兩個變量,變量A和變量B

ASSIGN?<fs1>?TO?<fs2>的意思是,讓<fs2>也指向<fs1>所指向的地方,即兩個FS都指向變量A;而<fs2>=?<fs1>的意思是,把<fs1>所指向的變量A的值賦給<fs2>所指向的變量B的值,<fs1>依然指向變量A<fs2>依然指向變量B

?

LOOP?內表?INTO?結構(工作區)和LOOP內表ASSIGNING?<結構>的比較

LOOP內表INTO結構時,系統會把先把當前行的數據復制到結構,如果結構的值改了,還需要使用MODIFY語句把更改后的值傳回內表。也就是說,結構是內表里的數據的一個副本,操作這個副本并不會影響內表里的數據。帶表頭的內表也是類似,LOOP內表時,把內表數據復制到表頭

為了提高效率,可以使用FSFS直接指向內表數據,省去了復制數據到結構的過程,修改FS的值也就是相當于直接修改內表里的數據,不需要再使用MODIFY語句。

這里額外提一點,有一些人喜歡在ENDLOOP前使用CLEAR清空結構,首先這是沒有必要的,為了提高效率,LOOP內的語句應該越精簡越好,其次如果是LOOPFS的寫法,是不能使用CLEAR清空FS的,因為剛剛說了FS是直接指向內表數據,如果清空了FS,那相當于把內表內對應的那行數據也給清空了。

此外,像LOOP?AT?內表?INTO?<結構>的寫法,初學者容易混淆,其實這里的<結構>是指向一個結構,這種寫法和LOOP?內表?INTO?結構沒什么區別。

?

READ?TABLE?內表?INTO?結構和READ?TABLE?內表?ASSIGNING?<結構>的比較。

效率上的區別同LOOP的情況,這里說下READ?TABLELOOP不同的地方,主要差別是,LOOP?是不會失敗的,而READ?TABLE是可能失敗的,一旦READ失敗,那么結構或<結構>的值依然是上次READ成功的值(而不是清空),所以READ使用完建議根據情況CLEAR結構或<結構>

確定結構的FS和不確定結構的FS

FIELD-SYMBOLS?<gs_ab>?TYPE?ty_ab.?“ty_ab是個結構,有一個字段為col1

FIELD-SYMBOLS?<gs_ab>?TYPE?ANY.

前者是指定了結構,后者是不指定結構。

之后在為<gs_ab>賦值時,

ASSIGN?COMPONNET?'COL1'?OF?STUCTURE?<gs_ab>TO?<fs1>.

<fs1>?=?'AAA'.

此種寫法對確定結構的定義和未確定結構的定義的<gs_ab>都可行。

?但是有確定結構定義的<gs_ab>可以直接使用<gs_ab>-col1?=?'AAA'來賦值。

一般如果能事先知道結構的話,還是應該用確定結構的方式來定義FS,不確定結構的定義通常用于動態處理。

總結

以上是生活随笔為你收集整理的【ABAP】Field Symbol使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。