ABAP 自动填充DATAX

问题

经常做BAPI开发的时候,SAP有个什么DATAX的表对应DATA,每次都要写一堆成对的DATA和DATAX,不然就会修改失败,每次复制粘贴也有点麻烦而且容易漏
在这里插入图片描述

代码实现

群里大姑刚好写了段代码用来匹配这个DATA和DATAX格式的,稍微优化了一下封装成function用来适配各种场景
函数代码

FUNCTION zdemo_seele03.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IT_DATA) TYPE  ANY TABLE
*"  CHANGING
*"     REFERENCE(CT_DATAX) TYPE  ANY TABLE
*"----------------------------------------------------------------------

  FIELD-SYMBOLS: <fs_data>       TYPE any,
                 <fs_cell_data>  TYPE any,
                 <fs_datax>      TYPE any,
                 <fs_cell_datax> TYPE any.

  DATA: lr_data        TYPE REF TO data,
        lr_datax       TYPE REF TO data,
        lo_str_descr   TYPE REF TO cl_abap_structdescr,
        lo_strx_descr  TYPE REF TO cl_abap_structdescr,
        lo_ele_descr   TYPE REF TO cl_abap_elemdescr,
        lo_elex_descr  TYPE REF TO cl_abap_elemdescr,
        ls_comp_descr  TYPE abap_compdescr.

*&--Get structure of data and datax
  CREATE DATA lr_data LIKE LINE OF it_data.
  ASSIGN lr_data->* TO <fs_data>.
  lo_str_descr ?= cl_abap_structdescr=>describe_by_data( <fs_data> ).

  CREATE DATA lr_datax LIKE LINE OF ct_datax.
  ASSIGN lr_datax->* TO <fs_datax>.
  lo_strx_descr ?= cl_abap_typedescr=>describe_by_data( <fs_datax> ).

*&--Foreach row
  LOOP AT it_data ASSIGNING <fs_data>.

    " Foreach cell
    LOOP AT lo_str_descr->components INTO ls_comp_descr.
      ASSIGN COMPONENT ls_comp_descr-name OF STRUCTURE <fs_data> TO <fs_cell_data>.

      " check whether data cell field name equals datax cell field name
      IF <fs_cell_data> IS NOT INITIAL.
        READ TABLE lo_strx_descr->components TRANSPORTING NO FIELDS WITH KEY name = ls_comp_descr-name.
        IF sy-subrc = 0.
          ASSIGN COMPONENT ls_comp_descr-name OF STRUCTURE <fs_datax> TO <fs_cell_datax>.
          lo_elex_descr ?= cl_abap_typedescr=>describe_by_data( <fs_cell_datax> ).

          " field name is the same, then check whether element name equals special char1 field( BAPIUPDATE CHAR1CFD_CUSTOM CHANGE_INDICATOR )
*          IF lo_elex_descr->absolute_name CS 'BAPIUPDATE'      OR
*             lo_elex_descr->absolute_name CS 'CHAR1CFD_CUSTOM' OR
*             lo_elex_descr->absolute_name CS 'CHANGE_INDICATOR'.
*            <fs_cell_datax> = 'X'.
*          ELSE.
*            <fs_cell_datax> = <fs_cell_data>.
*          ENDIF.

          " check whether element name is the same
          lo_ele_descr ?= cl_abap_typedescr=>describe_by_data( <fs_cell_data> ).
          IF lo_ele_descr->absolute_name = lo_elex_descr->absolute_name.
            <fs_cell_datax> = <fs_cell_data>.
          ELSE.
            <fs_cell_datax> = 'X'.
          ENDIF.

        ENDIF.

      ENDIF.

    ENDLOOP.

    ct_datax = VALUE #( BASE ct_datax
                          ( <fs_datax> ) ).

  ENDLOOP.

ENDFUNCTION.

测试场景

*&---------------------------------------------------------------------*
*& Report ZDEMO_SEELE12
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdemo_seele12.

DATA: lt_data  TYPE TABLE OF bapimepoitem,
      lt_datax TYPE TABLE OF bapimepoitemx.

lt_data = VALUE #( ( po_item = '00010' material = 'M001' )
                   ( po_item = '00020' material = 'M001' ) ).

*lt_datax = VALUE #( ( po_item = '00010' material = 'X' )
*                    ( po_item = '00020' material = 'X' ) ).

CALL FUNCTION 'ZDEMO_SEELE03'
  EXPORTING
    it_data  = lt_data
  CHANGING
    ct_datax = lt_datax.

BREAK-POINT.

下面是两位大姑的聊天截图,感恩大姑分享经验和思路~
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/666819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s集群的存储卷、pvc和pv

目录 简介 简介 PV 全称叫做 Persistent Volume&#xff0c;持久化存储卷。它是用来描述或者说用来定义一个存储卷的&#xff0c;这个通常都是由运维工程师来定义。 PVC 的全称是 Persistent Volume Claim&#xff0c;是持久化存储的请求。它是用来描述希望使用什么样的或者说…

Spring Cloud | 客户端 “负载均衡器“ : Ribbon

目录: 1. 什么是 "负载均衡" ? ( 通过 "负载均衡" 可以将 "用户请求" "分发" 到 不同的服务器&#xff0c;以此来提高 "性能" 和 "可靠性" )2. "负载均衡" 的 分类 &#xff1f;3. 认识 Ribbon :3.1 R…

[香橙派 AIpro] 性能强劲的昇腾AI开发板,应用广泛,性能出众,遥遥领先!

[香橙派 AIpro] 性能强劲的昇腾AI开发板&#xff0c;应用广泛&#xff0c;性能出众&#xff0c;遥遥领先&#xff01; 开发板简介 香橙派AIpro开发板凭借华为昇腾AI芯片的强大算力、丰富的接口、完善的开发工具等优势&#xff0c;在AI开发板市场具有很高的竞争力&#xff0c;可…

基于模板匹配的信用卡数字识别

文章目录 一、项目介绍二、模板匹配的原理三、模板匹配的步骤模板图片处理信用卡图片处理进行模板匹配 一、项目介绍 模板识别&#xff08;Template Matching&#xff09;是一种基于图像匹配的技术&#xff0c;用于在较大图像中识别和定位小图像&#xff08;模板&#xff09;。…

如何在 llama.cpp 服务器中实现用户登录功能的优化方案?(语言-c++)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

揭秘APP广告变现项目

在当今移动应用市场&#xff0c;广告变现已经成为开发者盈利策略的重要组成部分。 通过在应用程序中展示多种类型的广告&#xff0c;如插页式广告、横幅广告和激励视频广告&#xff0c;开发者能够获得经济效益。 实现这一目标的核心在于平衡收入与用户体验&#xff0c;避免过…

前端树形结构组件的设计与实现:以企查查、天眼查股权结构为例

摘要 随着信息化时代的不断发展&#xff0c;数据可视化在各行各业的应用越来越广泛。特别是在商业信息查询领域&#xff0c;如企查查、天眼查等平台&#xff0c;通过直观的数据展示方式&#xff0c;帮助用户快速理解复杂的商业关系。本文将以一个前端tree树形结构模版组件为例…

C语言序列化和反序列化--TPL中的API(三)

tpl_map 创建tpl的唯一方法是调用tpl_map()。第一个参数是格式字符串。后面是格式字符串中特定字符所需的参数列表。例如, tpl_node *tn; int i; tn tpl_map( "A(i)", &i );该函数在格式字符串中的项和给定地址的C程序变量之间创建映射。稍后&#xff0c;C变量…

Java-集合基础

集合 一、含义 集合是Java API所提供的一系列类&#xff0c;可以用于动态存放多个对象 (集合只能存对象)集合与数组的不同在于&#xff0c;集合是大小可变的序列&#xff0c;而且元素类型可以不受限定&#xff0c;只要是引用类型。(集合中不能放基本数据类型&#xff0c;但可以…

element-plus关于表单数据自定义参数校验

element-plus关于表单数据自定义参数校验 核心点&#xff1a; 代码&#xff1a; <el-form-item :prop"tableData[ scope.$index ].score":rules"[{ required: true, message: 得分不能为空, trigger: blur },{ validator: (rule: any, value: any, ca…

服务器主板电池

一、什么是服务器纽扣电池&#xff1f; 服务器纽扣电池&#xff0c;也叫CMOS电池&#xff0c;是一种非常小型的电池&#xff0c;通常与服务器主板上的CMOS芯片相结合&#xff0c;用于储存BIOS设置、时钟和其他关键系统信息。这种电池的体积通常比一枚硬币还小&#xff0c;而且…

JeecgBoot-Vue3:基于Vue3的低代码开发平台的新篇章

摘要 随着前端技术的不断发展&#xff0c;Vue3.0、TypeScript、Vite以及Ant Design Vue等新技术方案的涌现&#xff0c;为低代码开发平台带来了全新的可能性。JeecgBoot-Vue3作为JeecgBoot低代码平台的全新UI版本&#xff0c;采用Vue3技术栈&#xff0c;结合上述先进技术&#…

海外动态IP代理可以用来批量注册邮箱吗?

无论是个人还是企业&#xff0c;都需要使用邮箱进行沟通、注册账号、接收通知等多种用途。然而&#xff0c;由于互联网服务商为了防止滥用和垃圾邮件的传播&#xff0c;通常对注册邮箱设置了一定的限制&#xff0c;如IP限制、验证码验证等。为了解决这些问题&#xff0c;海外动…

【EFK日志系统】docker一键部署filebeat、metricbeat

docker一键部署filebeat、metricbeat filebeat部署创建配置文件一键启动修改配置文件查验信息 metricbeat部署创建配置文件一键启动修改配置文件查验信息 上两篇文章写了搭建部署es集群和部署kibana 这篇写一键部署filebeat和metricbeat收集工具 规划服务器是 es01:172.23.16…

段码屏|液晶显示模块|超低功耗LCD驱动芯片

1 简介 PC164S32 是一款支持 128 点 (32 4)显示 的多功能 LCD 控制器芯片&#xff0c;内部存储器RAM数据直接映射到 LCD 显示。可软件配置特性使其适用于包括 LCD 模块和显示子系统在内的多种 LCD 应用。主控制器与 PC164S32接口仅需3 或 4 条线。内置的省电模式极大的降低了功…

MYSQL四大操作——查!查!查!

目录 简洁版&#xff1a; 详解版&#xff1a; SQL通用语法&#xff1a; 分类&#xff1a; 1. DDL —库 1.1 查询&#xff1a; 1.2 创建&#xff1a; 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表&#xff1a; 2.1.2 查询表结构 &#xff1a; 2.1.…

【云原生】Kubernetes----POD控制器

目录 引言 一、Pod控制器概述 二、Pod控制器的种类 &#xff08;一&#xff09;ReplicaSet &#xff08;二&#xff09;Deployment &#xff08;三&#xff09;StatefulSet &#xff08;四&#xff09;DaemonSet &#xff08;五&#xff09;Job 三、使用POD控制器 &a…

江苏大信环境科技有限公司:环保领域的开拓者与引领者

2009 年&#xff0c;江苏大信环境科技有限公司在宜兴环保科技工业园成立。自创立之始&#xff0c;该公司便笃定坚守“诚信为本、以质量求生存、以创新谋发展”这一经营理念&#xff0c;全力以赴为客户构建专业的工业有机废气治理整体解决方案&#xff0c;进而成为国家高新技术企…

Vxe UI vxe-upload 上传组件,显示进度条的方法

vxe-upload 上传组件 查看官网 https://vxeui.com 显示进度条很简单&#xff0c;需要后台支持进度就可以了&#xff0c;后台实现逻辑具体可以百度&#xff0c;这里只介绍前端逻辑。 上传附件 相关参数说明&#xff0c;具体可以看文档&#xff1a; multiple 是否允许多选 li…

6.5 Go 指针

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…