0

我们目前正计划与通过 Idoc 文件 .xml 运行 SAP 的合作伙伴进行沟通

我们已经通过 .xml 进行通信,但使用我们的模式结构,现在我正在尝试修改我的 .xsd 以从 Idoc WMTORD 获取数据,该 Idoc WMTORD 包含一个标签 EILTORH,其中包含标签出现一次,一个标签 EILTORI 出现多次

我的问题是我应该使用哪种类型,我试图让这两种类型序列化并且都在同一个标​​签上,但它不起作用

<xsd:element name="E1LTORH" type = "E1LTORHType" minOccurs="0"/>
<xsd:complexType name="E1LTORHType">
    <xsd:sequence maxOccurs="unbounded">
        <xsd:element name="LGNUM" type="xsd:string" minOccurs="0" />
        <xsd:element name="TANUM" type="xsd:string" minOccurs="0" />
        <xsd:element name="E1LTORI" type="E1LTORIType" minOccurs="0" />
    </xsd:sequence>

<xsd:complexType name="E1LTORIType">
<xsd:all maxOccurs="1">
        <xsd:element name="Operation" type="OperationType"minOccurs="0"/>
        <xsd:element name="TAPOS" type="xsd:integer" minOccurs="0" />
        <xsd:element name="MATNR" type="xsd:string" minOccurs="0" />
        <xsd:element name="WERKS" type="xsd:string" minOccurs="0" />
        <xsd:element name="CHARG" type="xsd:string" minOccurs="0" />
        <xsd:element name="MEINS" type="xsd:string" minOccurs="0" />
        <xsd:element name="LETYP" type="xsd:string" minOccurs="0" />
</xsd:all>
<xsd:attribute name="SEGMENT" type="xsd:string" />
</xsd:complexType>

下面是文件示例

<E1LTORH SEGMENT="1">
        <LGNUM>B02</LGNUM>
        <TANUM>0100000024</TANUM>
        <BWLVS>999</BWLVS>
        <TRART>X</TRART>
        <BNAME>GUPET</BNAME>
        <PERNR>00000000</PERNR>
        <SOLWM> 0.000</SOLWM>
        <SOLEX> 0.000</SOLEX>
        <ISTWM> 0.000</ISTWM>
        <STDAT>00000000</STDAT>
        <ENDAT>00000000</ENDAT>
        <STUZT>000000</STUZT>
        <ENUZT>000000</ENUZT>
        <SWABW>0000</SWABW>
        <TAPRI>00</TAPRI>
        <E1LTORI SEGMENT="1">
            <TAPOS>0001</TAPOS>
            <MATNR>ISA46290</MATNR>
            <WERKS>BP02</WERKS>
            <CHARG>L01.01</CHARG>
            <MEINS>ST</MEINS>
            <LETYP>BT1</LETYP>
            <KZQUI>X</KZQUI>
            <WDATU>20181212</WDATU>
            <WENUM>4900002737</WENUM>
            <WEPOS>0001</WEPOS>
            <VLTYP>MEC</VLTYP>
            <VLBER>001</VLBER>
            <VLPLA>TRANSTOCK</VLPLA>
            <VSOLM>10.000</VSOLM>
            <NLTYP>PCO</NLTYP>
            <NLBER>001</NLBER>
            <NLPLA>PCO-B-3A</NLPLA>
            <NSOLM>10.000</NSOLM>
            <MAKTX>Bleomycin complex A2/B2 ISA</MAKTX>
            <NLENR>00000000002000000823</NLENR>
            <QPLOS>000000000000</QPLOS>
            <QPLOA>000000000000</QPLOA>
            <LGORT>ETA2</LGORT>
            <SOLPO> 0.000</SOLPO>
            <VOLUM> 0.000</VOLUM>
            <NPLEI>1</NPLEI>
            <NWIRM> 0.000</NWIRM>
        </E1LTORI>
    </E1LTORH>
4

2 回答 2

0

理想情况下,您不会自己创建 XML 模式,而是建立在现有 XML 模式定义的基础上,您的合作伙伴的 SAP 系统提供了该定义。

鉴于您的合作伙伴已经正确维护了他的系统,您应该能够从 transaction 获取 XML Schema 定义WE60

  • 打开WE60
  • 输入要为其导出 XML 模式的 IDoc 基本类型(以及可选的增强功能)
  • 选择菜单项文档> XML Schema

如果您对带有屏幕截图的分步指南感兴趣,我前段时间就如何执行此操作写了更详细的说明:https ://ecosio.com/en/blog/what-is-the-sap -idoc格式/

菲利普

集成工程@ecosio

于 2022-01-03T21:07:32.843 回答
0

您似乎缺少许多字段的定义,下面是我从您的 XML 生成的完整定义(在将 iDOC 根节点包裹在它周围之后,您可以重命名它)。

你说的其中一件事是 EILTORI 发生了很多次,但是你的元素 EILTORI 没有maxOccurs="unbounded"我设置的。

我已将 EILTORI 类型的定义保留为xs:all,不确定您是否意味着这是序列或不是您的问题。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="iDOC">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="E1LTORH">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="LGNUM" type="xs:string" />
              <xs:element minOccurs="0" name="TANUM" type="xs:string" />
              <xs:element minOccurs="0" name="BWLVS" type="xs:string" />
              <xs:element minOccurs="0" name="TRART" type="xs:string" />
              <xs:element minOccurs="0" name="BNAME" type="xs:string" />
              <xs:element minOccurs="0" name="PERNR" type="xs:string" />
              <xs:element minOccurs="0" name="SOLWM" type="xs:decimal" />
              <xs:element minOccurs="0" name="SOLEX" type="xs:decimal" />
              <xs:element minOccurs="0" name="ISTWM" type="xs:decimal" />
              <xs:element minOccurs="0" name="STDAT" type="xs:string" />
              <xs:element minOccurs="0" name="ENDAT" type="xs:string" />
              <xs:element minOccurs="0" name="STUZT" type="xs:string" />
              <xs:element minOccurs="0" name="ENUZT" type="xs:string" />
              <xs:element minOccurs="0" name="SWABW" type="xs:string" />
              <xs:element minOccurs="0" name="TAPRI" type="xs:string" />
              <xs:element maxOccurs="unbounded" name="E1LTORI" type="E1LTORI" />
            </xs:sequence>
            <xs:attribute name="SEGMENT" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="E1LTORI">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="0" name="TAPOS" type="xs:string" />
      <xs:element minOccurs="0" name="MATNR" type="xs:string" />
      <xs:element minOccurs="0" name="WERKS" type="xs:string" />
      <xs:element minOccurs="0" name="CHARG" type="xs:string" />
      <xs:element minOccurs="0" name="MEINS" type="xs:string" />
      <xs:element minOccurs="0" name="LETYP" type="xs:string" />
      <xs:element minOccurs="0" name="KZQUI" type="xs:string" />
      <xs:element minOccurs="0" name="WDATU" type="xs:string" />
      <xs:element minOccurs="0" name="WENUM" type="xs:string" />
      <xs:element minOccurs="0" name="WEPOS" type="xs:string" />
      <xs:element minOccurs="0" name="VLTYP" type="xs:string" />
      <xs:element minOccurs="0" name="VLBER" type="xs:string" />
      <xs:element minOccurs="0" name="VLPLA" type="xs:string" />
      <xs:element minOccurs="0" name="VSOLM" type="xs:decimal" />
      <xs:element minOccurs="0" name="NLTYP" type="xs:string" />
      <xs:element minOccurs="0" name="NLBER" type="xs:string" />
      <xs:element minOccurs="0" name="NLPLA" type="xs:string" />
      <xs:element minOccurs="0" name="NSOLM" type="xs:decimal" />
      <xs:element minOccurs="0" name="MAKTX" type="xs:string" />
      <xs:element minOccurs="0" name="NLENR" type="xs:string" />
      <xs:element minOccurs="0" name="QPLOS" type="xs:string" />
      <xs:element minOccurs="0" name="QPLOA" type="xs:string" />
      <xs:element minOccurs="0" name="LGORT" type="xs:string" />
      <xs:element minOccurs="0" name="SOLPO" type="xs:decimal" />
      <xs:element minOccurs="0" name="VOLUM" type="xs:decimal" />
      <xs:element minOccurs="0" name="NPLEI" type="xs:integer" />
      <xs:element minOccurs="0" name="NWIRM" type="xs:decimal" />
    </xs:all>
    <xs:attribute name="SEGMENT" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>
于 2019-08-05T01:00:35.010 回答