在ABAP中,存在着一條法則:名字不一定代表實際規則(具體可看最近的相關讨論)。
但是如你們所知的,存在着一個很好的例外: 所有涉及到使用CORRESPONDING為結構指派的關鍵字的文法形式(偶然地)有着相同的名字..
- 在ABAP 7.40之前,主要有用MOVE-CORRESPONDING來複制結構元件、Open SQL的SELECT的CORRESPONDING附加字段,以及某些過時的計算語句等。
- 在ABAP 7.40中,MOVE-CORRESPONDING可以用于操縱帶有結構的内表。并且7.40引入了一個新的構造器操作符CORRESPONDING,它允許顯式地将結構的元件映射到不同名字的元件上。
還缺了點什麼?答案是動态的映射!這個特性在ABAP 7.50中得到了引入。
新的系統類 CL_ABAP_CORRESPONDING 允許你适用動态指定的映射規則為結構或内表的元件指派。
映射規則需要建立在一個映射表中,然後傳遞給映射對象。
例子如下:
DATA(mapper) =
cl_abap_corresponding=>create(
source = struct1
destination = struct2
mapping = VALUE cl_abap_corresponding=>mapping_table(
( level = 0
kind = cl_abap_corresponding=>mapping_component
srcname = ‘…’
dstname = ‘…’ )
( level = 0
kind = cl_abap_corresponding=>mapping_component
srcname = ‘…’
dstname = ‘…’ )
( level = 0
kind = cl_abap_corresponding=>mapping_component
srcname = ‘…’
dstname = ‘…’ ) ) ).
這是個簡單的例子,所有元件都在第0層,并且所有元件都得到了映射 (kind = cl_abap_coresponding=>mapping_component)。複雜點的形式會涉及到嵌套結構和排除項。通過srcname和dstname,元件名可以動态地指定。表的建立和CORRESPODING操作符的mapping子句類似。
建立映射對象後,你需要做的就是按如下方式執行指派:
mapper->execute( EXPORTING source = struct1
CHANGING destination = struct2 ).
你可以一次又一次地為擁有相同類型的結構或者内表來進行這樣的操作。
沒别的了。更多細節請看:
CL_ABAP_CORRESPONDING – System Class.
遠景
到目前為止,隻有CORRESPONDING操作符的基本形式被反映到了CL_ABAP_CORRESPONDING裡面。而适用lookup table的變體還在實作中..
本文連結: http://www.cnblogs.com/hhelibeb/p/7134317.html
原文标題:ABAP News for Release 7.50 – CORRESPONDING, again …