XSD aufräumen - Custom + CustomType entfernen

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Hallo,

      Mir ist gerade folgendes aufgefallen: Mein C# Klasse sieht so aus:

      details.ItemList = new ItemListType[] { itemList };

      Dh. Die ItemList im DetailsType ist ein Array sprich man kann hier mehrmals bis zu 999 Zeilen hineingeben, da der ItemListType die mMn eigentliche Liste der Postionionen enthält und zwar (ItemListType ListLineItemType[]).

      <xs:complexType name="DetailsType">
      <xs:sequence>
      <xs:element ref="HeaderDescription" minOccurs="0"/>
      <!-- [CHANGE] changed unbounded to 999; only up to 999 ListLineItem's are supported! -->
      <xs:element ref="ItemList" maxOccurs="999"/>
      <xs:element ref="FooterDescription" minOccurs="0"/>
      </xs:sequence>
      </xs:complexType>

      ändern auf

      <xs:complexType name="DetailsType">

      <xs:element ref="HeaderDescription" minOccurs="0"/>

      <xs:element ref="ItemList" maxOccurs="999"/>
      <xs:element ref="FooterDescription" minOccurs="0"/>

      </xs:complexType>

      sG
    • Nein, das geht leider nicht. sequence gibt nur an, dass die darin enthaltenen Elemente in der angegebenen Reihenfolge erscheinen müssen - einen anderen Unterschied habe ich im Posting nicht gesehen.

      Das Problem im XSD ist einfach, dass es in ebInterface 2 Hierarchieebenen gibt und die Summe aller Positionen, über alle Hierarchieebenen 999 nicht überschreiten darf, das aber in XSD nicht abbildbar ist.

      vg P. Helger
    • 2.) Macht er mir bei der VAT

      public partial class VATType
      {

      private object[] itemsField;

      /// <remarks/>
      [System.Xml.Serialization.XmlElementAttribute("Item", typeof (ItemType))]
      [System.Xml.Serialization.XmlElementAttribute("TaxExemption", typeof (string))]
      public object[] Items
      {
      get { return this.itemsField; }
      set { this.itemsField = value; }
      }
      }

      Sprich eine Array of objects nicht lineitem

      Vorschlag:
      <xs:complexType name="VATType">
      <xs:choice>
      <xs:element ref="TaxExemption"/>
      <xs:sequence>
      <xs:element ref="Item" maxOccurs="unbounded"/>
      </xs:sequence>
      </xs:choice>
      </xs:complexType>

      ändern auf

      <xs:complexType name="VATType">
      <xs:choice>
      <xs:element ref="TaxExemption"/>
      <xs:sequence>
      <xs:element ref="ItemType" maxOccurs="unbounded"/>
      </xs:sequence>
      </xs:choice>
      </xs:complexType>

      sG
    • phelger wrote:

      Nein, das geht leider nicht. sequence gibt nur an, dass die darin enthaltenen Elemente in der angegebenen Reihenfolge erscheinen müssen - einen anderen Unterschied habe ich im Posting nicht gesehen.

      Das Problem im XSD ist einfach, dass es in ebInterface 2 Hierarchieebenen gibt und die Summe aller Positionen, über alle Hierarchieebenen 999 nicht überschreiten darf, das aber in XSD nicht abbildbar ist.

      vg P. Helger
      Ich verstehe nicht den tieferen Sinn davon die Sequence von ListLineItemType in der Sequnce von DetailsType quasi 2x drinnen zu haben.
      Was wäre hier der betriebswirtschaftliche, rechtliche,... Sinn dahinter?


      <xs:complexType name="DetailsType">

      <xs:sequence>

      <xs:element ref="HeaderDescription" minOccurs="0"/>

      <!-- [CHANGE] changed unbounded to 999; only up to 999 ListLineItem's are supported! -->

      <xs:element ref="ItemList" maxOccurs="999"/>

      <xs:element ref="FooterDescription" minOccurs="0"/>

      </xs:sequence>

      </xs:complexType>
      <xs:complexType name="ListLineItemType">
      <xs:sequence>
      <xs:element ref="PositionNumber" minOccurs="0"/>
      <xs:element ref="Description" maxOccurs="unbounded"/>
      <xs:element ref="ArticleNumber" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="Quantity"/>
      <xs:element ref="UnitPrice"/>
      <xs:element ref="TaxRate"/>
      <xs:element ref="DiscountFlag" minOccurs="0"/>
      <xs:element ref="ReductionAndSurchargeListLineItemDetails" minOccurs="0"/>
      <xs:element ref="Delivery" minOccurs="0"/>
      <xs:element ref="BillersOrderReference" minOccurs="0"/>
      <xs:element ref="InvoiceRecipientsOrderReference" minOccurs="0"/>
      <xs:element ref="AdditionalInformation" minOccurs="0"/>
      <xs:element ref="LineItemAmount"/>
      <xs:element ref="ext:ListLineItemExtension" minOccurs="0"/>
      </xs:sequence>
      </xs:complexType>


      sG

      PS: Kann man das XML formatieren?
    • phelger wrote:

      Ihr XMLSerialization Framework ist nicht ganz optimal - mein JAXB 2.2.7 macht ein schönes Objekt mit 2 Feldern drauß :)

      @XmlElement(name = "TaxExemption")
      private String taxExemption;
      @XmlElement(name = "Item")
      @Size(min = 1)
      private List item;

      vg P. Helger
      Hmm, eigentlich sollten 3 Felder drinnen sein und zwar TaxedAmount, TaxRate, Amount

      oder ?

      public decimal TaxedAmount
      {
      get { return this.taxedAmountField; }
      set { this.taxedAmountField = value; }
      }

      /// <remarks/>
      public TaxRateType TaxRate
      {
      get { return this.taxRateField; }
      set { this.taxRateField = value; }
      }

      /// <remarks/>
      public decimal Amount
    • 1. Formatieren geht leider nicht - hab mich schon ein bisschen damit gespielt, hab aber keinen Zugriff auf den Server.
      2. Betriebswirtschaftlich und XSD - lustige Assoziation.
      3. Details hat maximal 999 ItemLists, und jede ItemList hat maximal 999 Rechnungszeilen - diese Verschachtelung dient rein der Gruppierung!

      hth P. Helger