2019.12.27 【ABAP隨筆】7.40新語法 - CORRESPONDING


今天學習一下新語法 CORRESPONDING

效果和move-corresponding 類似

"1.… CORRESPONDING type( [BASE ( base )] struct|itab [mapping] )

TYPES:BEGIN OF ty_data1,
        field1 TYPE i,
        field2 TYPE i,
      END OF ty_data1,
      BEGIN OF ty_data2,
        field1 TYPE i,
        field2 TYPE i,
        field3 TYPE i,
      END OF ty_data2.

DATA(ls_data1) = VALUE ty_data1(
field1 = 1 field2 = 2
 ).

DATA(ls_data2) = VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).

"使用 curresponding語句可以:

ls_data2 = CORRESPONDING #( ls_data1 ).

WRITE:/ ls_data2-field1,ls_data2-field2,ls_data2-field3.
" 1 2 0 此時 ls_data2-field3 = 0 在賦值過程中被覆蓋


ls_data2  =  VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).
"
ls_data2 = CORRESPONDING #( BASE ( ls_data2 ) ls_data1 ).

WRITE:/ ls_data2-field1,ls_data2-field2,ls_data2-field3.
"此時 ls_data2-field = 6 未被覆蓋


ls_data2  =  VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).

"當直接創建LS_DATA3時,未知道ls_data3是什么結構時,#必須未某一結構
DATA(ls_data3) = CORRESPONDING ty_data2( BASE ( ls_data2 ) ls_data1 ).

WRITE:/ ls_data3-field1,ls_data3-field2,ls_data3-field3.


"2.類似於lookup 的功能

TYPES:BEGIN OF ty_data,
        key     TYPE i,
        remarks TYPE char10,
      END OF ty_data,
      ty_t_data        TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY,
      ty_hashed_t_data TYPE HASHED TABLE OF ty_data WITH UNIQUE KEY key.

DATA(lt_data1) = VALUE ty_t_data( FOR i = 1 UNTIL i > 10 ( key = i ) ).
DATA(lt_data2) = VALUE ty_hashed_t_data( ( key = 2 remarks = `ceshi1` )
                           ( key = 4 remarks = `測試1` )
                           ( key = 6 remarks = `測試2` )
                           ( key = 7 remarks = `測試3` ) ).
"把lt_data2中的內容匹配到 lt_data1里面
DATA:BEGIN OF ls_test,
       aptyp  TYPE c,
       status TYPE c,
       datbi  TYPE sy-datum,
     END OF ls_test.

ls_test-aptyp = 'D'.
ls_test-status = '0'.

IF ls_test-aptyp = 'D' AND ls_test-status = '0' AND ls_test-datbi IS INITIAL.
  ls_test-datbi = sy-datum+0(6) && '01'."申請迄日
ENDIF.

lt_data1 = CORRESPONDING #( lt_data1 FROM lt_data2 USING key = key ).

cl_demo_output=>display( data = lt_data1 ).

"3.類似於mapping的功能,不同名字字段之間傳值 (這個語法可以用戶和外部接口數據賦值的時候使用)
DATA:BEGIN OF customer_oa,
       id   TYPE char10 VALUE '1000000001',
       name TYPE char35 VALUE 'OA_NAME',
       BEGIN OF information,
         company_id         TYPE char4 VALUE '6100',
         sales_organization TYPE char4 VALUE '6200',
         country            TYPE char3 VALUE 'CN',
       END OF information,
     END OF customer_oa,
     BEGIN OF customer_sap,
       kunnr TYPE kna1-kunnr,
       name1 TYPE kna1-name1,
       BEGIN OF info,
         bukrs TYPE knb1-bukrs,
         vkorg TYPE knvv-vkorg,
         land1 TYPE kna1-land1,
       END OF info,
     END OF customer_sap.

"兩個名字不相同的工作區相互賦值

customer_sap = CORRESPONDING #(
customer_oa MAPPING
kunnr = id name1 = name
( info = information MAPPING
  bukrs = company_id
  vkorg = sales_organization
  land1 = country
  ) ).

WRITE:/ 'sap:' , customer_sap .
WRITE:/ 'oa:' , customer_oa.

 

-TAB 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM