Microsoft Dynamics AX: Vererbte Tabellen im AIF über BizTalk

PrintMailRate-it
​​​​​​​​​​​​​​​Vererbte Tabellen im AIF über BizTalkWird in AX ein XML-Dokument über das Application Integration Framework (AIF) verarbeitet, erscheint unten stehende Fehlermeldung beim Create/Update innerhalb einer vererbten Struktur. Bei dieser vererbten Struktur handelt es sich z. B. um DirPartyTable à DirParty_DirPerson in der SysExceptionTable (AIF-Ausnahmen) (z. B. CustomerService, VendorService, etc.). Üblicherweise ist dies der Fall, wenn die XML generierende Applikation mit Namespace Präfixen arbeitet. 

Die Fehlermeldung lautet: Invalid document schema. The following error was returned: This is an invalid xsi:type 'AxdEntity_DirParty_DirPerson'

Hintergrund: 

Bei der Verwendung von BizTalk-Server-Applikationen für die Integration von Anwendungen oder Business Partner mit Dynamics AX kommt es zu diesem Problem. BizTalk Server verwenden beim Erstellen von neuen Nachrichten im XML-Format die Namespace Präfix Definition. Hierdurch ist es möglich, verschiedene Namespaces in einem Dokument mehrfach zu verwenden, ohne diese jeweils neu deklarieren zu müssen. Hierbei handelt es sich um wellformed Standard XML Code nach XML Technol​ogy​.

Die Übergabe der Nachricht kann in Dynamics AX entweder über Webservices (WCF) oder Datei-Import jeweils über das AIF erfolgen. In der anschließenden Weiterverarbeitung in Dynamics AX wird die Nachricht geparsed. 

BizTalk verwendet Namespace-Präfixe für die Definition von Namespace innerhalb der XML-Struktur. Die Implementierung des XML-Parsers in Dynamics AX (4.0 – 2012 R3) hat einen Bug im Parsen von Attribut Namespace. Im Service-Request SR 113083010706143 wurde durch Microsoft bestätigt, dass es sich hierbei um einen Bug in AX handelt. Da es den u. g. Workaround gibt, wird der Bug durch Microsoft nicht weiter gefixt. 

<ns6:DirParty xsi:type="ns6:AxdEntity_DirParty_DirPerson" class="entity">

Die rot unterlegten Namespace Präfixe erzeugen das Problem in AX. 

Lösung: 

Verwenden der folgenden Pipeline-Komponenten-Klasse in einer BizTalk SendPipeline. 
public class XmlNamespaceRemoverStream : XmlTranslatorStream 
{     
protected override void TranslateStartElement( 
string prefix, string localName, string nsURI) 
base.TranslateStartElement(null, localName, nsURI); 
}     
protected override void TranslateStartAttribute(string prefix, string localName, string nsURI) 
base.TranslateStartAttribute(prefix, localName, nsURI); 
protected override void TranslateAttribute() 
if (this.m_reader.Prefix != "xmlns") 
base.TranslateAttribute(); 
}     
protected override void TranslateXmlDeclaration(string target, string value) 
{     
this.m_writer.WriteProcessingInstruction(this.m_reader.Name, this.m_reader.Value); 
   }     
protected override void TranslateAttributeValue(string prefix, string localName, string nsURI, string val) 
{     
string newValue = val.Remove(0, val.IndexOf(':') + 1); 
   base.TranslateAttributeValue(null, localName, nsURI, newValue); 
   } 
   public XmlNamespaceRemoverStream(Stream input) 
: base(new XmlTextReader(input), Encoding.UTF8) 
{ } 
}

Ergebnis: 

Das XML-Dokument, welches von BizTalk an AX versendet wird, sieht nun folgendermaßen aus: 

<DirParty xsi:type="AxdEntity_DirParty_DirOrganization" class="entity" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

So kann AX das Dokument ordnungsgemäß verarbeiten. 

Links: 


Dieser Artikel wurde von Stefan Franken erstellt. Weitere Coding-Tipps für Microsoft Dynamics AX finden Sie im Digital-Dialog​ von Rödl & Partner.

Sie haben Fragen zu der Dynamics-AX-Beratung von Rödl & Partner? Alexander Schünemann (Tel. +49 [621] 595 708 – 48) ist als Leiter Entwicklung gerne für Sie da.​

zuletzt aktualisiert am 25.01.2016

Kontakt

Contact Person Picture

Alexander Schünemann

Dipl.-Ingenieur, Leiter Anwendungsentwicklung

+49 621 5957 0848

Anfrage senden

Contact Person Picture

Uwe Heinz

Leiter Application Integration und CRM

Associate Partner

+49 731 725573 36

Anfrage senden

Wir beraten Sie gern!

Was macht uns so einzigartig?

Befehle des Menübands überspringen
Zum Hauptinhalt wechseln
Deutschland Weltweit Search Menu