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

文章讲述了如何使用DataImportFramework(DIF)结合CSV文件在SAP系统中批量创建物料主数据,包括配置自定义转换器、利用BAdI实现文件转换,并提供了BAdI的示例代码。同时,讨论了不同导入方法,如LSMW和MigrationCockpit,以及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会更慢一些。

数字治理作为数字经济时代政府治理现代化的重要方向,强调利用数字技术优化政府组织运行机制、促进政务数据共享、提升公共服务效率,实现由传统行政管理向数据驱动型治理转变 2014年,国家启动“信息惠民国家试点城市建设”,选择80个城市开展试点,核心内容包括:建设政务数据平台、推动数据共享、推动“一网通办”等,是我国数字治理实践的重要探索 本文借鉴刘奥龙等(2026)的研究思路和方法,将信息惠民国家试点城市建设作为数字治理的准自然实验,衡量各城市政府数字治理,整理形成地级市信息惠民政策试点DID数据,并进一步构建省份数字治理程度指标数据,为数字治理经济效应研究提供数据支持 具体整理过程如下: 1.城市政府数字治理:采用信息惠民国家试点城市冲击来衡量各城市政府数字治理,城市若成为信息惠民国家试点城市取值为1, 表明城市推行政府数字治理,否则为0 2.省份数字治理程度:选择各省份内信息惠民国家试点城市数量占省内所有城市的比值来衡量省份整体推进数字治理的程度 一、数据介绍 数据名称:政府数字治理程度_省+地级市 数据范围:省份、地级市 时间范围:2000-2025年 样本数量:省份806条;地级市7722条 数据来源:国家发展改革委 数据说明:含信息惠民试点城市名单、省份数字治理程度、地级市DID明细数据等 二、数据指标 年份 省份 省份代码 所属地域 省内城市总数量 当年实施试点城市数量 数字治理程度 年份 省份 城市 省份代码 城市代码 所属地域 胡焕庸线 “信息惠民”试点时间 Treat Post DID 三、参考文献 [1]刘奥龙,马亦凡,高娜娜.打破创新藩篱:数字治理能否推动区域协同创新[J].山西财经大学学报,2026,48(3):26-38.
内容概要:本文以有源中点箝位(ANPC)三电平并网逆变器为研究对象,提出并构建了一套融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相控制与电网电压前馈的一体化高性能并网控制策略。通过深入分析ANPC三电平拓扑在开关损耗均衡、中点电位可控性及输出谐波低等方面的结构优势,确立了其作为大功率高质量并网系统的硬件基础。在此基础上,DPWMA调制策略有效提升等效开关频率,显著降低输出电流电压的总谐波畸变率,优化稳态电能质量;正负序分离锁相技术精准剥离电网电压中的负序扰动分量,保障电网不平衡工况下的相位同步精度与并网电流对称性;电网电压前馈控制则通过前瞻性补偿机制,突破传统闭环控制的响应滞后瓶颈,大幅提升系统在电压骤变、畸变等动态扰动下的抗扰能力与动态响应速度。研究通过搭建完整的Simulink仿真模型,在稳态对称、电网不平衡及动态切换等多种工况下进行全面验证,结果表明该复合控制策略在电能质量、运行稳定性与工况适应性方面均具有显著优越性。; 适合人群:具备电力电子、自动控制或新能源并网等相关专业背景,从事科研、工程开发或处于研究生及以上学习阶段的专业技术人员。; 使用场景及目标:①应用于光伏发电、风力发电等新能源系统的大功率并网逆变器高性能控制设计;②解决电网电压不平衡、畸变等复杂非理想工况下的并网稳定性与电能质量问题;③提升工业级并网设备的动态响应速度与运行可靠性;④为相关领域的仿真建模、控制算法开发与性能优化提供系统性的技术参考与实现方案。; 阅读建议:建议结合文中所述的Simulink仿真模型进行实践操作,重点深入理解DPWMA调制的具体实现逻辑、正负序分离锁相环的设计原理以及前馈-反馈复合控制结构的集成方法,通过设置不同工况的对比仿真实验,直观体会各项关键技术对系统整体性能的提升作用。
内容概要:本文研究了离网光伏直流微网中功率供需失衡的抑制机制,重点探讨光伏最大功率点跟踪(MPPT)技术与锂离子电池储能系统在“削峰填谷”中的协同控制策略,并通过Simulink仿真平台搭建了完整的光伏-储能-负载系统模型进行验证。系统由光伏阵列、Boost升压电路、双向DC-DC变换器及锂电池储能单元构成,通过MPPT实时捕获光伏最大输出功率,同时利用储能系统的双向充放电能力平抑功率波动,实现能量的时空转移与动态平衡。研究涵盖系统建模、控制逻辑设计与多工况仿真分析,全面验证了该协同机制在应对光照强度变化和负载突变等不确定因素时的有效性与鲁棒性,显著提升了微网在离网条件下的能量自给能力和运行稳定性。; 适合人群:具备电力电子、新能源或自动控制基础知识,从事微电网、光伏发电或储能系统相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握离网光伏直流微网的基本架构与能量管理原理;②学习MPPT算法与储能双向充放电控制的协同设计方法;③通过Simulink仿真复现并优化系统性能,应用于科研项目或工程原型开发。; 阅读建议:该资源以Simulink仿真实现为核心,注重理论与实践结合,建议读者在理解控制策略的基础上动手搭建模型,重点关注MPPT模块与储能控制模块的接口逻辑及参数整定,结合实际光照与负荷数据进行仿真测试以深化理解。
内容概要 本资源是一套完整可运行的 Qt Widgets 批量图片压缩桌面工具源码,基于 Qt5/C++ 从零开发,专为初学者设计,分步实现图片批量处理全套功能。工具支持多选单张图片、直接读取整个文件夹内所有 JPG/PNG 图像,可自定义输出图片分辨率、调节 JPG0~100 区间压缩质量,自带锁定宽高比防拉伸变形功能;批量处理完成后自动统计每张图片压缩前后文件体积,计算整体压缩缩小比例,直观展示压缩效果。 适用人群 Qt/C++ 零基础初学者,学习 QImage 图像绘图、文件目录遍历、UI 交互开发; 需要本地批量处理图片的办公、设计、自媒体从业者; 想要学习图片缩放、JPG 压缩、本地文件 IO、进度条交互的开发学习者。 使用场景 自媒体批量压缩配图,降低图片体积节省上传流量; 摄影、设计批量统一图片尺寸,批量轻量化相册图片; 程序开发学习:QFileDialog 文件选择、QDir 文件夹遍历、QImage 缩放保存、QSlider 参数联动、批量循环界面防卡顿、文件大小格式化转换全套 Qt 图像开发实战案例。 工具核心功能清单 双模式导入图片:手动多选单张图片 / 一键读取整个文件夹全部图片; 自定义输出宽高分辨率,支持锁定原始宽高比,避免图片拉伸变形; 滑块调节 JPG 压缩质量 0~100,平衡图片清晰度与文件占用大小; 自定义输出保存目录,批量生成压缩后的图片文件; 实时进度条展示处理进度,循环中刷新界面,程序不会假死卡顿; 自动统计每张图片压缩前后体积,换算 KB/MB 直观展示; 批量完成弹窗汇总:图片总数、成功数量、单张大小对比、整体压缩节省空间比例; 完整模块化代码,功能拆分清晰,每段代码附带详细注释,新手可分步拆解学习。 其他说明 开发环境:Qt Creator + Qt5.15 MSVC,Windows 平台可直接编译运行; 源码结构清晰,功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值