在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的變體還在實現中..