文章目录
- 关于使用DIF处理物料主数据的相关信息
- IDOC 缩减
- IDOC 扩展
- 物料编码的主键映射 Key Mapping
- 主键映射和内部给号
- 其他主键的主键映射
- 值映射 Value Mapping
- 将物料主数据导出为IDoc文件 - MATMAS / CLFMAS
- 错误处理
- 本章小结
关于使用DIF处理物料主数据的相关信息
IDOC 缩减
场景:
你已经创建了一个缩减后的消息类型,并希望用它来执行物料导入。
步骤
可以通过事务码 BD53 通过IDoc创建一个缩减后的消息类型。关于如何缩减标准消息类型,可以参考 Reduced Message Types 。
IDoc缩减将创建一个新的消息类型,并将该消息类型分配到IDoc上。这项技术可以允许我们向目标系统发送标准数据的一个子集。
DIF物料导入会检查是否有任何IDoc字段不存在于当前导入的IDoc文件。针对这些缺失字段,DIF将会自动分配NODATA标识符(‘/’)。
注意:
NODATA标识(‘/’)只会在直接导入Active area的场景中被考虑。如果你选择将数据导入Staging area,则NODATA标识并不会起任何作用。因此针对直接导入Staging area的场景,必须填充所有字段内容,否则数据将被覆盖为空值。
IDOC 扩展
场景:
你已经扩展了标准IDoc MATMAS05,以包括一些自定义字段用于物料管控。你想在物料导入时也使用扩展后的IDoc。
步骤
- 创建自定义段 Segment(WE31)
- 创建IDoc扩展并将新的自定义段加入IDoc(WE30)
- 发布段和IDoc扩展(WE31)
- 将扩展分配到MATMAS下(WE82)
- 检查并传输IDoc扩展(WE30)
- 执行事务码 CMOD,并激活增强。提供一个项目名称,并选择增强分配。提供增强 MGV00001。提供用户出口实施:EXIT_SAPLMV01_002 内向和外向实施。
- 为函数IDOC_INPUT_MATMAS01提供新的配置(WE57)
- 调整合作伙伴参数文件(WE20)
小结:
如果可以通过IDoc直接导入数据到Active area,所有自定义字段都在数据模型MM中确定定义,Active 和 Staging area之间的SMT mapping成功设置,那么IDoc也可以用于将数据加载到Staging area。
通常来说,系统使用函数IDOC_INPUT_MATMAS01实现使用IDoc向Active area写书的操作。特殊情况下也可以替换使用自定义函数,实现自定义字段的复杂处理逻辑。
处理代码 决定了数据导入Active area的数据处理类型。SAP默认使用MATM作为处理MATMAS消息类型数据导入的处理代码,并执行函数IDOC_INPUT_MATMAS01。
如果有需要,你也可以定义一个新的内向处理代码,并使用自定义函数处理入站逻辑(WE42)。
物料编码的主键映射 Key Mapping
对于导入的物料主数据来说,导入文件中必须提供每条物料的物料编码。导入过程将决定保持相同物料号(即物料号等于源系统的物料号),或启用主键映射(新物料号与源系统物料号不同)。
场景:
如果你的工作环境存在多套相关系统,当数据从其他系统导入MDG时,主键映射可以协调和处理MDG和其他子系统间的物料编码不一致问题。
解决方案:
通过以下步骤配置MDG系统的主键映射功能:
- 路径:MDGIMG->常规设置->数据复制->为数据复制定义自定义设置->定义技术设置->定义业务系统的技术设置
- 选中一个相关的业务系统,并选择 定义业务系统,BO
- 选中业务对象类 194(物料)
- 对于通讯渠道 “通过IDOC复制”,在 “主键协调 Key Harm.” 字段,按需选择 “主键映射 Key Mapping” 或 “协调标识 Harmonized IDs” ,这地方中文翻译太差了,推荐在英文环境进行相关配置。
如果有需要,特定的主键映射信息也可以在物料治理工作中心内手工维护,如下图:
主键映射和内部给号
场景:
在通过DIF初始化导入物料主数据时,如果系统无法根据文件中提供的物料号通过主键映射找到MDG系统对应的物料号,并且该物料类型配置了内部给号规则,则数据导入逻辑将会生成新的料号,并自动维护好新料号和数据源料号之间的映射关系。
解决方案:
针对外部系统 S4H_100,已启用主键映射:
物料类型 HIBE 在系统中定义为内部给号:
DIF中接收到的来自系统 QM8CLNT421的IDoc XML文件内容(SNDPRN 发送方逻辑系统标识,MATNR 发送方物料号,MTART 发送方物料类型):
通过DIF数据导入生成的MDG变更请求,使用内部给号(该单据已经审批通过,可以看到内部编号已生成):
DIF自动生成的主键映射信息:
其他主键的主键映射
主键映射可以用于映射MDG系统和其他外部系统数据对象的主主键。SAP提供了一组标准的IDoc主键映射字段清单。如果有需要,你也可以在该清单中加入更多主键字段,配置路径:MDGIMG->物料主数据监管->维护IDoc键值映射的字段。
值映射 Value Mapping
值映射用于将内部代码值转换外外部代码值。SAP预置了一组IDoc相关的值映射字段,如果有需要,你也可以向清单中增加更多的字段,配置路径:MDGIMG->物料主数据监管->IDoc值映射的维护字段。
注意:
即便IDoc包含了一些ISO格式的字段,如基本计量单位,语言代码,国家代码,MDG值映射依然只会使用他们的内部格式。例如,单位 “立方厘米”,内部代码为 CCM,对应的ISO代码为 CMQ,IDoc将使用CMQ作为发送数据的内容,然而值映射则会使用CCM进行映射维护。
要启用值映射,需要首先将代码清单分配到MDG 数据元素配置上(例如下述物料类型的代码),配置路径:MDGIMG->常规设置->值映射->分配代码清单到元素和系统
举例来说,字段MARA-MTART(物料类型)对应的数据类型为 MDG_BS_MATERIAL_TYPE_CODE;字段MARC-MMSTA(工厂特定的物料状态)对应的数据类型为MDGCO_PROD_LOG_PROCUSABPR_CODE。
下一步,执行配置:MDGIMG->常规设置->值映射->维护值映射
点击“导航”按钮,可以维护值映射的具体内容,如下图:
按照该配置,当使用DIF从外部系统QMB_421向MDG导入物料主数据时,如果外部导入文件中的MTART(物料类型)字段值为 HERS,在数据导入的处理过程中将被自动根据值映射转换为 FERT(成品)。
将物料主数据导出为IDoc文件 - MATMAS / CLFMAS
为了从源系统导出物料主数据,你需要在每个源系统中配置XML-IDoc数据抽取相关的逻辑系统,用于将文件导出到每个应用服务器的文件系统中。该配置步骤和标准配置IDoc分发类似,有过经验的同学应该都很熟悉。
步骤
- 创建一个逻辑系统(SALE)
- 将IDoc类型 “MATMAS” 和 “CLFMAS” 配置到分发模型中(BD64)
- 创建一个外向合作伙伴参数文件(WE20)
- 创建一个用户IDoc处理XML导出文件的端口(WE21)
- 通过事务码 BD10 分发物料主数据 —— 包括物料分类数据
关于此处的详细配置,可参考 从源系统中导出数据。
错误处理
DIF标准程序允许同时导入一个或多个MATMAS IDoc XML文件,每个XML文件包含一条或多条IDoc,每个IDoc包含一个或多个物料主数据。因此针对每种情况都有不同的错误处理逻辑,详细见下表。
场景 | XML文件个数 | 直接导入Active Area | 直接导入Active Area,其中有错误的数据发送到Staging Area | 直接导入Staging Area |
---|---|---|---|---|
1条IDoc 1个物料 | 1 XML | 如果物料存在非法数据,IDoc将导入失败,并提供具体的报错信息。 | 如果物料存在非法数据,直接写入Active Area将失败,该物料数据转而写入Staging Area。DIF将展示具体的报错信息,并提供生成的MDG变更请求编号。 如果物料写入Staging Area的时候也失败了,那么DIF将展现具体的报错信息。 | 如果一条物料主数据在写入时失败,那么所有IDoc XML中的物料都会失败。同时DIF会展现具体的报错信息。 |
1条IDoc N个物料 | 1 XML | 如果IDoc中的一条物料存在非法数据(如错误的基本计量单位),那么这条IDoc中的所有物料都会导入失败。 其他情况下,如用户在前台锁定了某条物料,或某条物料存在未决变更请求,导致了写入数据报错,那么这些情况仅会阻止相关物料写入,其他正常物料不受影响可以正常写入Active Area。 | 如果IDoc中的一条物料存在非法数据(如错误的基本计量单位),那么这条IDoc中的所有物料都会转而写入Staging Area。 如果物料写入Staging Area的时候也失败了,那么该XML文件中所有应该写入Staging Area的物料都将写入失败,DIF将会展现具体的报错信息。 | |
N条IDoc 每条IDoc1个物料 | 1 XML/1 Idoc | 同上述“1条IDoc1个物料” | 同上述“1条IDoc1个物料” | |
N条IDoc 每条IDoc1个物料 | 1 XML 包含所有Idoc | 存在报错的IDoc导入将失败,其他IDoc继续正常执行。 | 如果IDoc中的一条物料存在非法数据(如错误的基本计量单位),那么这条IDoc中的所有物料都会转而写入Staging Area。 如果物料写入Staging Area的时候也失败了,那么该XML文件中所有应该写入Staging Area的物料都将写入失败,DIF将会展现具体的报错信息。 | |
N条IDoc M个物料 | 1 XML 包含所有Idoc | 如果IDoc中的一条物料存在非法数据(如错误的基本计量单位),那么这条IDoc中的所有物料都会导入失败(其他没有错误的IDoc不受影响,继续执行)。 其他情况下,如用户在前台锁定了某条物料,或某条物料存在未决变更请求,导致了写入数据报错,那么这些情况仅会阻止相关物料写入,该IDoc中其他正常物料不受影响可以正常写入Active Area。 | ||
N条IDoc M个物料 | 1 XML/1 Idoc | 同上述“1条IDocN个物料” |
本章小结
本章针对DIF工具展开了很多高阶使用方式和技巧,特别是围绕着SAP IDoc的处理。如果小伙伴以前接触或掌握SAP ALE分发技术的话,这些内容应该得心应手。此外针对Key Mapping和Value Mapping,他们不仅在DIF数据导入过程中起作用,在整个MDG产品凡是涉及到数据加载或数据分发的地方都会起到相当大的作用,因此作为MDG顾问也需要熟练掌握。下一篇章将会是MDG DIF系列的最后一章,我们将深入相关代码的开发,以最大程度满足用户的灵活需求。