Microsoft Dynamics CRM 4.0 | Daten einer Entität manuell als XML Datei exportieren (4/4)

 

In Teil I, II und III habe ich Euch gezeigt, wie Ihr mit Hilfe einer simplen .htm-Seite und JavaScript selektierte Daten aus Eurem CRM System in eine XML-Datei überführen könnt. Dies dient als Beispiel, wie man Daten in ein eigenes XML-Schema integrieren kann, um einen Datenaustausch mit anderen Systemen zu ermöglichen.

Wer die XML-Datei aus dem dritten Teil mittlerweile erfolgreich erzeugt hat, dem wir aufgefallen sein, dass ein für XML-Dateien typisches Merkmal fehlt

<?xml version="1.0" encoding="UTF-8" ?>

…die Deklaration in der 1. Zeile. Obwohl unser XML-Dokument eigentlich schon verwendet werden könnte, spielt die Deklarationszeile bei der Formatierung eine besondere Rolle, hilft Sie den XMLParsern doch, die Datei korrekt verarbeiten zu können.

Ich möchte daher im heutigen letzten Teil eine erweiterte XMLWriter-Klasse vorstellen, die auf .NET XMLTextWriter basiert. Sie stammt von Ariel Flesler und wird auf seinem Blog ausführlichst beschrieben. Dennoch ein paar Grundlagen:

Die Initialisierung unterscheidet sich mit

var xw = new XMLWriter( 'UTF-8', '1.0' );

zwei Zusatzargumenten von der Vorherigen. Wir können mit encoding und version unsere Deklarationszeile erzeugen und das XML-Dokument nahezu beliebig im Zeichensatz formatieren.

Natürlich haben wir auch einige Methoden, mit denen wir arbeiten können

  • writeStartDocument([ bool standalone ])
  • writeEndDocument()
  • writeDocType( string declarations )
  • writeStartElement( string name [, string ns ] )
  • writeEndElement()
  • writeAttributeString( string attr, string value )
  • writeString( string text )
  • writeElementString( string name, string txt [, string ns ] )
  • writeCDATA( string text )
  • writeComment( string text )
  • flush(): string
  • close()
  • getDocument()
     

    Wie integriert sich die neue Klasse in unser Projekt (Auch hier gilt wieder: Vor Verwendung mit dem Author Rücksprache halten)?

    Die Einbindung in unsere .htm-Seite erfolgt via

    <script src="XMLWriter-min.js" language="javascript"></script>

    Während wir im III-Teil in der for-Schleife angesetzt haben, initialisieren wir diesmal bereits nach der 2. if-Abfrage mit

    var xw = new XMLWriter('UTF-16', '1.0' );
        xw.formatting = 'indented';//add indentation and newlines
        xw.indentChar = ' ';//indent with spaces
        xw.indentation = 2;//add 2 spaces per level
        xw.writeStartDocument();
        xw.writeDocType('"XMLDaten.dtd"');
        xw.writeStartElement( 'XMLDaten' );

    Wie Ihr seht, verwende ich ‘UTF-16’, dazu später mehr…

    Der weitere Aufbau des XML-Dokuments erfolgt dann innerhalb der for-Schleife

    xw.writeElementString('ID', oIdstr);
    xw.writeElementString('Mein Node', myValue);

    Außerhalb der for-Schleife beende ich dann auch das Start-Element und schließe das Dokument ab.

    xw.writeEndElement();
    xw.writeEndDocument();

    Erinnert Ihr Euch an

     var XMLString = XML.ToString()

    aus dem dritten Teil? Nun, diesmal haben wir keine .ToString()-Methode. Wir gelangen über die .flush()-Methode an unser XML-Dokument.

    Daher müssen wir eine weitere Zeile aus dem dritten Teil korrigieren:

    var XMLString = xw.flush() //anstelle von .ToString()  aus dem dritten Teil

    Und genau hier stoßen wir an die Grenze der verwendeten “WriteToFile(sText,Filename)”-Funktion, denn diese verwendet Scripting.FileSystemObject, welches leider kein UTF-8 unterstützt. Wenn Ihr also keine andere Funktion verwenden wollt, um das XML-Dokument zu speichern, dann könnt Ihr mit ‘UTF-16’ arbeiten. Ansonsten jedoch, müsst Ihr eine andere Funktion wählen, das erzeugte XML-Dokument zu speichern.

    So, nun wünsche ich wie immer: Viel Spass in der Umsetzung…

     

    Mein besonderer Dank gilt beiden Autoren, die mir etwas Zeit in der Programmierung gespart haben.

     

  • Schreibe einen Kommentar

    Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

    WordPress.com-Logo

    Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

    Twitter-Bild

    Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

    Facebook-Foto

    Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

    Google+ Foto

    Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

    Verbinde mit %s