• 2019.12.27 【ABAP随笔】7.40新语法


    今天学习一下新语法 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 

  • 相关阅读:
    【剑指offer】二叉搜索树与双向链表
    【剑指offer】复杂链表的复制
    【剑指offer】二叉树中和为某一值的路径
    2018.12.30 Intellij IDEA设置main方法自动补全
    2018.12.29 Spring FrameWork各个版本下载
    2018.12.26 Mac下的Eclipse在编辑Spring配置文件xml时自动提示类class包名配置
    2018.12.25 Spring中JDBCTemplate模版API学习
    2018.12.24 Spring中的aop演示(也就是运用aop技术实现代理模式)
    2018.12.22 Spring学习02
    2018.12.24 Ubuntu18.0.4 主题参考
  • 原文地址:https://www.cnblogs.com/jxzhu/p/12107924.html
Copyright © 2020-2023  润新知