SAP MDG —— 使用DIF导入物料主数据 Part4 开发篇

news2025/1/19 14:36:17

文章目录

  • 通过CSV文件创建物料主数据的一些建议
  • 在DIF中使用CSV文件
    • 文件转换器类型
    • BAdI
    • BAdI 示例代码
    • 测试
  • DIF全篇总结

通过CSV文件创建物料主数据的一些建议

  1. 在Staging Area中创建/修改小批量的物料主数据,推荐使用标准文件上载功能(USMD_FILE_UPLOAD)。

  2. 使用Data Import Framework (DIF),配合转换器也可以实现在Staging Area中上传物料:

    • 所有治理范围内的实体都将基于给定的主键而创建(工厂,分销链等)。
    • 这可能导致出现大量的Maintenance Status数据。
    • 这可能导致一些意料之外的必输字段检查,比如由于扩展出销售视图,导致重量单位必填。
  3. 如果你想直接在Active Area中创建完整的物料主数据,你也可以选择其他方式,比如开发自定义批导程序,使用LSMW,使用Migration Cockpit,使用MDG-合并模块等。

下面的章节将详细解释如何基于DIF根据CSV文件批量创建物料主数据。
记住,想要使用DIF在Staging Area中修改物料主数据是不可能的;DIF只允许直接在Active Area中修改物料主数据。

在DIF中使用CSV文件

DIF必须经过一些配置才可以使用CSV文件进行物料主数据导入。下面的步骤展现了如何定义一个新的自定义转换器,并创建对应的BAdI实施。

文件转换器类型

  • 定义文件转换器
    自定义的文件转换器将在文件导入之后立即执行(可以用于从XML文件匹配字段)
  • 文件转换器的BAdI
    实施文件转换器

在这里插入图片描述
在这里插入图片描述

BAdI

在这里插入图片描述
创建新的BAdI实施
在这里插入图片描述
增强点:MDG_FILECONVERTER
BAdI定义:BADI_MDG_FILECONVERTER

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为你的转换器设置过滤器
在这里插入图片描述
备注:如果你想直接使用Excel文件取代CSV文件用于数据导入,你同样需要自己编写转换器代码。相关代码可参考自SRM包 /SAPSRM/EXCEL,你可以从这个包中复制标准代码,用于在Webdynpro上处理Excel文件。

备注:如果你想支持物料编码的内部给号,可以调用BAPI_STDMATERIAL_GETINTNUMBER来获取新的物料编号,以便在该BAdI中使用。

BAdI 示例代码

METHOD if_ex_mdg_fileconverter~get_data.
* 将文件加载到String字符串
* 按行按列分割字符串得到各字段值
* 转换到IDoc结构
* 包含了MARAMAKT(默认使用当前登录语言),MARC的内容
  DATA: lo_conv       TYPE REF TO cl_abap_conv_in_ce.
  DATA: lv_file       TYPE string.
  DATA: lt_table_line TYPE STANDARD TABLE OF string.
  DATA: lt_fields     TYPE STANDARD TABLE OF string.
  DATA: lt_content    TYPE mdg_idoc_data_t.
  DATA: ls_edidd      TYPE edidd.
  DATA: ls_maram      TYPE e1maram.
  DATA: ls_maktm      TYPE e1maktm.
  DATA: ls_marcm      TYPE e1marcm.
  DATA: lv_docnum     TYPE edi_docnum.
  DATA: lt_matnr TYPE TABLE OF bapimatinr.
  FIELD-SYMBOLS: <ls_table_line> TYPE string.
  FIELD-SYMBOLS: <ls_content>    TYPE mdg_idoc_data.

  CLEAR: et_content, es_message. " But not EV_CONTENT!
* 获取文件内容
* 使用UTF-8解码
  lo_conv = cl_abap_conv_in_ce=>create( encoding = 'UTF-8'
                                        input = iv_file_content_frontend ).
  TRY.
      CALL METHOD lo_conv->read( IMPORTING data = lv_file ).
    CATCH cx_sy_conversion_codepage
          cx_sy_codepage_converter_init
          cx_parameter_invalid_type
          cx_parameter_invalid_range.
      RETURN.
  ENDTRY.
* 从文件流中获取行
  SPLIT lv_file AT gc_delimeter_line INTO TABLE lt_table_line.
* 忽略第一行的抬头信息
  DELETE lt_table_line INDEX 1.
* 得到字段值
  LOOP AT lt_table_line ASSIGNING <ls_table_line>.

    CLEAR: lt_matnr.

    SPLIT <ls_table_line> AT gc_delimeter_field INTO TABLE lt_fields.
    CHECK NOT lt_fields IS INITIAL.
    lv_docnum = lv_docnum + 1.
    APPEND INITIAL LINE TO lt_content ASSIGNING <ls_content>.
    " 将字段信息映射到IDoc结构
    CLEAR: ls_maram, ls_maktm.
    CALL METHOD fill_no_data_sign( EXPORTING iv_segment_name = gc_segment_mara CHANGING cs_segment = ls_maram ).
    CALL METHOD fill_no_data_sign( EXPORTING iv_segment_name = gc_segment_makt CHANGING cs_segment = ls_maktm ).
    CALL METHOD fill_no_data_sign( EXPORTING iv_segment_name = gc_segment_marc CHANGING cs_segment = ls_marcm ).

    READ TABLE lt_fields INDEX 2 INTO ls_maram-matnr.
    READ TABLE lt_fields INDEX 2 INTO ls_maram-matnr_long.
    READ TABLE lt_fields INDEX 3 INTO ls_maram-mtart.
    " 如果未输入物料号,则获取内部编号
    IF ls_maram-matnr IS INITIAL.
      CALL FUNCTION 'BAPI_STDMATERIAL_GETINTNUMBER'
        EXPORTING
          material_type   = ls_maram-mtart
        TABLES
          material_number = lt_matnr.
      ls_maram-matnr = lt_matnr[ 1 ]-material.
      ls_maram-matnr_long = lt_matnr[ 1 ]-material.
    ENDIF.
    READ TABLE lt_fields INDEX 4 INTO ls_maram-mbrsh.
    READ TABLE lt_fields INDEX 5 INTO ls_maram-meins.
    READ TABLE lt_fields INDEX 6 INTO ls_maram-matkl.
    READ TABLE lt_fields INDEX 7 INTO ls_maram-gewei.
    READ TABLE lt_fields INDEX 8 INTO ls_maktm-maktx.
    READ TABLE lt_fields INDEX 9 INTO ls_marcm-werks.
    READ TABLE lt_fields INDEX 10 INTO ls_marcm-ekgrp.
    READ TABLE lt_fields INDEX 11 INTO ls_marcm-mtvfp.
    READ TABLE lt_fields INDEX 12 INTO ls_marcm-dismm.
    READ TABLE lt_fields INDEX 13 INTO ls_marcm-dispo.
    ls_maktm-spras = sy-langu.
    " 填充 ET_CONTENT
    ls_edidd-docnum = lv_docnum.
    ls_edidd-segnam = gc_segment_mara.
    ls_edidd-sdata  = ls_maram.
    ls_edidd-dtint2 = strlen( ls_maram ).
    APPEND ls_edidd TO <ls_content>-idoc_data.
    ls_edidd-docnum = lv_docnum.
    ls_edidd-segnam = gc_segment_makt.
    ls_edidd-sdata  = ls_maktm.
    ls_edidd-dtint2 = strlen( ls_maktm ).
    APPEND ls_edidd TO <ls_content>-idoc_data.
    ls_edidd-docnum = lv_docnum.
    ls_edidd-segnam = gc_segment_marc.
    ls_edidd-sdata  = ls_marcm.
    ls_edidd-dtint2 = strlen( ls_marcm ).
    APPEND ls_edidd TO <ls_content>-idoc_data.
    <ls_content>-idoc_control-docnum = lv_docnum.
    <ls_content>-idoc_control-idoctp = gc_matmas.
    <ls_content>-idoc_control-sndprn = gv_parnum. "MDG-M MATMAS loader 需要合作伙伴信息
    <ls_content>-idoc_control-sndprt = gc_partyp. "MDG-M MATMAS loader 需要合作伙伴信息
  ENDLOOP.
  CLEAR: ev_content.
  et_content = lt_content.
ENDMETHOD.

测试

你可以使用如下的CSV文件用于测试:
该文件中并没有输入物料号,因为FERT物料类型使用内部给号。
在这里插入图片描述
导入结果日志:
在这里插入图片描述
物料主数据:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DIF全篇总结

DIF系列文章到此告一段落,本系列从最初的什么是DIF,是否该使用DIF,到DIF的应用、配置和开发都有一些详细的介绍和演示。DIF工具对于标准数据对象,例如物料、客户、供应商、及其他对象(SAP提供了26种标准数据对象)的批量导入有着得天独厚的优势。在导入方式上,大部分标准对象都使用了标准的IDoc或Webservice接口进行数据导入,针对MDG管控范围内的对象,还可选择导入MDG Staging Area生成变更申请。此外,在多并发处理、导入排程管理、导入结果日志监控等方面也都有标准功能支撑。顾问在使用时只需关注导入模板设计,及导入模板字段映射标准IDoc/Webervice结构的相关开发。这些都是使用DIF工具的优点。

缺点方面,一是该工具有一些上手难度,国内缺乏实践和相关资料。二是DIF较为小众,相较于更广为人知的LSMW,MM16,甚至是Migration Cockpit或自开发程序,国内几乎无人知道DIF的存在。此外,针对大批量的数据导入,由于底层还是使用的IDoc或Webservice接口,在效率上比传统BAPI会更慢一些。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机基础--Redis

参考文献 https://zhuanlan.zhihu.com/p/599663544 基础知识 1. Redis的数据类型及使用场景 Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;列表&#xff09;&#xff…

使用assembly插件对boot项目打zip和war部署包

目录 一、maven-assembly-plugin插件的简单使用 1、什么是assembly&#xff1f; 2. 常见的maven插件 3、如何使用&#xff1f; 二、如何通过assembly打不同的包 三、boot项目如何转成war包部署 背景&#xff1a;之前项目上已经使用了assembly对多个boot项目分别打zip包且…

MATLAB应用笔记

其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数&#xff1a;isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本&#xff08;如果有&#xff0c;可选&#xff0c;非必须&#xff09;3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

部署环境从docker swarm迁移到k8s后kie-server的发布方式变化(二)

正如后来的考虑, 如果外接maven私库照理说是ok的, 这样去掉volume的设计整个流程更加的自动化标准化. 开搞 第一步先部署一个nexus yaml文件如下: apiVersion: v1 kind: Namespace metadata:name: nexus---apiVersion: v1 kind: Service metadata:labels:k8s-app: nexusname…

【数据结构与算法】八大排序

[数据结构与算法]八大排序 数据结构与算法-八大排序排序的概念及其应用排序的概念排序的应用 常见的排序算法实现常见的排序算法插入排序直接插入排序希尔排序(缩小增量排序)希尔排序的时间复杂度希尔排序对插入排序的优化效果 选择排序直接选择排序堆排序向上调整建堆&#xf…

【C语言】从n个字符串中匹配查找abc字符串个数

目录 前言知识点重温1、scanf和scanf_s区别2、指针3、char、char*使用查找字符串收尾前言 这是小5聊的《C语言知识点例子》系列的第四篇文章。 在软件行业已经有快十年,技术虽然一般般,但是足够应付和解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自…

数据库基础篇 《1. 概述》

目录 1. 为什么要使用数据库 2. 数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据库管理系统的关系 2.3 常见的数据库管理系统排名(DBMS) 2.4 常见的数据库介绍 3. MySQL介绍 3.1 概述 3.2 MySQL发展史重大事件 4. RDBMS 与 非RDBMS 4.1 关系型数据库…

Delphi Web Server 流程分析

通过向导 "Web Server Application" (选择 "Stand-alone GUI Application") 创建一个 WebServer Demo。 主单元代码: ...... private FServer: TIdHTTPWebBrokerBridge; procedure StartServer; ............. Delphi的网络组件是基于INDY的&a…

项目四:无极调光台灯

项目四&#xff1a;无极调光台灯 文章目录 项目四&#xff1a;无极调光台灯一、导入(5分钟&#xff09;学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(5分钟)4.图形化块介绍(10分钟)5.单个模块的简单使用(10分钟)6.无极调光台灯编程逻辑…

SQLServer的内存管理架构

内存管理架构说明 一、Windows的虚拟内存管理器二、SQL Server 内存体系结构2.1、传统&#xff08;虚拟&#xff09;内存2.2、地址窗口扩展 &#xff08;AWE&#xff09; 内存 三、从 SQL Server 2012 &#xff08;11.x&#xff09; 开始发生的改变3.1、对内存管理的更改3.2、对…

【网络原理】TCP/IP协议

目录 1.应用层 2.传输层&#xff08;核心问题&#xff09; 2.1 UDP协议 2.1.2 UDP的特点 2.1.3 基于UDP的应用层协议 2.2 TCP协议&#xff08;重点内容&#xff09; 2.2.1 TCP/IP 协议含义 2.2.2 TCP协议端格式&#xff1a; 2.2.3 TCP的特点 2.3 TCP原理 2.4 确认应…

Fork/Join优化mybatis-plus批量插入性能

最近在项目开发中&#xff0c;遇到需要一次性保存100万数据到数据库中。想到以下几种实现方式&#xff1a; 第一种方案&#xff1a;在mapper文件中&#xff0c;实现批量插入动态SQL语句&#xff0c;采用insert into table_name values(?,?,?,),(?,?,?)拼接SQL方式。 &l…

HTTP中ETag语法及使用实战详解

1.1 ETag 是什么 ETag&#xff08;Entity Tag&#xff09;是万维网协议 HTTP 的一部分。它是 HTTP 协议提供的若干机制中的一种 Web 缓存验证机制&#xff0c;并且允许客户端进行缓存协商。这使得缓存变得更加高效&#xff0c;而且节省带宽。如果资源的内容没有发生改变&#x…

电脑网速慢怎么解决?4个方法有效提升电脑网速!

案例&#xff1a;电脑网速慢怎么解决 【谁懂啊&#xff01;我的电脑网速太慢了&#xff01;总是上不了网&#xff0c;打开浏览器也是一直在转圈圈&#xff01;太折磨了&#xff01;这是为什么呢&#xff1f;谁能帮帮我呀&#xff01;】 随着互联网的发展和普及&#xff0c;电…

继续学c++

由于c里面有很多和c语言很像的东西&#xff0c;这里就来总结一点不像的或者要注意的&#xff0c;或者是我已经快忘记的&#xff1b; 先来一个浮点型也就是实型类型的总结&#xff1b; 知道浮点型有这两个类型&#xff1a;float和double型&#xff1b; 然后float型占四个字节…

To B第六年,腾讯过分温柔

腾讯做2B&#xff0c;方向是正确的&#xff0c;初心是果决的&#xff0c;行动是温柔的&#xff0c;事实是掉队的。 2018年&#xff0c;率先打出“互联网的下半场属于产业互联网”的大旗&#xff0c;宣布“拥抱产业互联网”&#xff0c;腾讯发力To B业务&#xff0c;绝对是有先发…

HTB-Jarvis

HTB-Jarvis 信息收集80端口 www-data(sqlmap)www-data(myPhpAdmin)www-data -> pepperpepper -> root 信息收集 80端口 目录扫描 我啥也没干咋就被ban了&#xff0c;可能是gobuster流量太大被逮住了。 老老实实等90秒&#xff0c;先从已有的目录收集信息。 phpMyAdmin 4…

X 态及基于 VCS 的 X-Propagation 检测

&#x1f525;点击查看精选 IC 技能树系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#…

Lightroom Classic2022图文安装教程

Lightroom Classic是一款专业的数字照片处理软件&#xff0c;具有数字照片编辑、照片整理和管理、批量处理、智能预览、输出等特点。 该软件适用于摄影师和数字照片后期处理爱好者&#xff0c;可以帮助用户提高处理效率和照片质量。 Lightroom Classic是Adobe公司推出的系列软…