ABAP 两个内表不同名称字段赋值的方法

*& 两个内表不同名称字段赋值的方法

*& 方法1:使用Loop循环手动赋值

*& 方法2:维护一个映射表,返回一个执行器,调用其execute方法

*& 方法3:CORRESPONDING #( )

复制代码
TYPES :BEGIN OF developer,              "内表1
         name           TYPE string,
         focus_language TYPE string,
         salary         TYPE i,
       END OF developer,

       BEGIN OF presale,               "内表2
         name              TYPE string,
         focus_area        TYPE string,
         salary_plus_bouns TYPE i,
       END OF presale.

DATA: developer_list TYPE TABLE OF developer WITH EMPTY KEY,
      presale_list1  TYPE TABLE OF presale WITH EMPTY KEY,
      presale_list2  TYPE TABLE OF presale WITH EMPTY KEY,
      presale_list3  TYPE TABLE OF presale WITH EMPTY KEY.

developer_list = VALUE #( ( name = 'AAA' focus_language = 'ZH' salary = 1 )
                          ( name = 'BBB' focus_language = 'EN' salary = 2 ) ).

"方法一:使用Loop循环手动赋值
LOOP AT developer_list ASSIGNING FIELD-SYMBOL(<temp1>).
  APPEND INITIAL LINE TO presale_list1 ASSIGNING FIELD-SYMBOL(<temp2>).
  <temp2>-name = <temp1>-name.
  <temp2>-focus_area = <temp1>-focus_language.
  <temp2>-salary_plus_bouns = <temp1>-salary.
ENDLOOP.

"方法2:维护一个映射表,返回一个执行器,调用其execute方法
*DATA(it_mapping) = VALUE cl_abap_corresponding=>mapping_table( ( level = 0 kind = 1 srcname = 'name' dstname = 'name' ) ).
DATA(lo_mapping_executor) = cl_abap_corresponding=>create(
  source      = developer_list
  destination = presale_list2
  mapping     = VALUE cl_abap_corresponding=>mapping_table(
    ( level = 0 kind = 1 srcname = 'name' dstname = 'name' )
    ( level = 0 kind = 1 srcname = 'focus_language' dstname = 'focus_area' )
    ( level = 0 kind = 1 srcname = 'salary' dstname = 'salary_plus_bouns' )
    )
  ).
lo_mapping_executor->execute( EXPORTING source = developer_list
                              CHANGING  destination = presale_list2 ).

"方法3:CORRESPONDING #( )
presale_list3 = CORRESPONDING #( developer_list MAPPING name               = name
                                                        focus_area         = focus_language
                                                        salary_plus_bouns  = salary         ).

推荐方法三,动态的话就用方法二。

相关推荐
冷雨夜中漫步几秒前
Kubernetes入门笔记 ——(4)Windows搭建k8s测试集群
windows·笔记·kubernetes
QT 小鲜肉3 分钟前
【Linux命令大全】001.文件管理之whereis命令(实操篇)
linux·运维·服务器·网络·笔记
乾元6 分钟前
AI 在 BGP 池管理与路由安全(RPKI / ROA)中的自动化运用——服务提供商网络中“可验证路由”的工程化实现
运维·服务器·网络·人工智能·网络协议·安全·自动化
悄悄敲敲敲9 分钟前
MySQL内置函数
数据库·mysql
小北方城市网11 分钟前
第 5 课:后端工程化进阶 ——Python 分层架构 + 中间件 + 日志 / 异常统一处理(打造企业级高可用后端)
数据库·人工智能·python·mysql·数据库架构
m0_5981772313 分钟前
SQL(5)- 事务
java·数据库·sql
莫生灬灬14 分钟前
VueMultiBrowser - 开源多浏览器管理器
运维·开发语言·chrome·c#·自动化·vue
郝学胜-神的一滴17 分钟前
Qt重复添加控件问题探析:现象、原理与解决方案
开发语言·数据库·c++·qt·程序人生
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。17 分钟前
docker配置镜像Docker pull时报错:https://registry-1.docker.io/v2/
运维·docker·容器
星空椰19 分钟前
Windows 安装 Oracle 19c Instant Client
数据库·windows·oracle