ABAP 自动填充DATAX

2024-06-01 07:36
文章标签 自动 填充 abap datax

本文主要是介绍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 dataxCREATE 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 rowLOOP AT it_data ASSIGNING <fs_data>." Foreach cellLOOP 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 nameIF <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 samelo_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'EXPORTINGit_data  = lt_dataCHANGINGct_datax = lt_datax.BREAK-POINT.

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

这篇关于ABAP 自动填充DATAX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020378

相关文章

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp