Ändern des Datentyps des Input/Output
In MapForce generierter Code kann in Ihre jeweilige Applikation integriert oder dafür adaptiert werden. Bei der Codegenerierung wird eine komplette und voll funktionsfähige Applikation generiert. Nachdem Sie mit MapForce Java- oder C#-Code generiert haben, können Sie optional den Datentyp des Mapping-Input oder -Output durch Bearbeitung des generierten Codes ändern. Dabei können Sie andere Objekttypen als die standardmäßig generierten als Mapping-Parameter verwenden. So können Sie etwa einen String oder ein Stream-Objekt als Input bereitstellen, statt den Input aus einer Datei auf dem Datenträger auszulesen. Beachten Sie, dass diese Funktionalität nur für in C# oder Java generierten Code verfügbar ist.
In der ersten Spalte der nachstehenden Tabelle sind die als Input oder Output unterstützten Objekttypen aufgelistet. In den nachfolgenden Spalten sind die Datenformate, in denen der jeweilige Typ unterstützt wird, angegeben. Eine genauere Definition der einzelnen Typen finden Sie im Abschnitt "Typdefinitionen" weiter unten.
XML | JSON* | Microsoft Excel* | EDI (einschließlich X12, HL7)* | FlexText* | CSV/Text | |
---|---|---|---|---|---|---|
Dateien | Ja | Ja | Ja | Ja | Ja | Ja |
Streams | Ja | Ja | Ja | Ja | Ja | Ja |
Strings | Ja | Ja | – | Ja | Ja | Ja |
Reader/Writer | Ja | Ja | – | Ja | Ja | Ja |
DOM-Dokumente | Ja | – | – | – | – | – |
* Nur in der MapForce Enterprise Edition unterstützte Formate
So ändern Sie den Datentyps des Mapping-Input oder -Output:
1.Generieren Sie anhand eines Mappings C#- oder Java-Code.
2.So finden Sie im generierten Code den Aufruf der run-Methode (in Java) bzw. der Run-Methode (in C#):
a.Wenn Sie C# verwenden, öffnen Sie die Datei MappingConsole.cs.
b.Wenn Sie Java verwenden, öffnen Sie die Datei MappingConsole.java (das Konsolenprogramm) oder die Datei MappingFrame.java (das GUI-Programm).
Anmerkung: | Wenn Sie den Applikationsnamen in den Mapping-Einstellungen geändert haben, hat die Datei eventuell einen anderen Namen. Wenn Sie den Namen z.B. in "MyApp" geändert haben, so lautet der Name der generierten Datei MyAppConsole.js bzw. MyAppConsole.java bzw. MyAppFrame.java. |
3.Erstellen Sie eine Instanz des gewünschten Typs (siehe Abschnitt "Typdefinitionen").
4.Stellen Sie die deklarierten Objekte, wie in den Beispielen unten gezeigt, als Parameter für die run-Methode (in Java) bzw. die Run-Methode (in C#) bereit.
Die run-Methode ist die wichtigste Methode generierter Mapping-Klassen. Sie hat einen Parameter für jede statische Quelle oder Input-Komponente im Mapping und einen Endparameter für die Output-Komponente. Wenn Ihr Mapping Komponenten enthält, die mehrere Dateien dynamisch verarbeiten, scheinen die entsprechenden Parameter im generierten Code nicht auf, da die Dateinamen in diesem Fall dynamisch innerhalb des Mappings verarbeitet werden.
Typdefinitionen
In C# handelt es sich bei den Typen, die Sie als Parameter für die Run-Methode bereitstellen können, um im Altova.IO-Namespace definierte Klassen. Die Basisklassen sind Altova.IO.Input bzw. Altova.IO.Output.
C#-Typen
Dateien | Altova.IO.FileInput(string filename) Altova.IO.FileOutput(string filename) |
Streams | Altova.IO.StreamInput(System.IO.Stream stream) Altova.IO.StreamOutput(System.IO.Stream stream) |
Strings | Altova.IO.StringInput(string content) Altova.IO.StringOutput(System.Text.StringBuilder sbuilder) |
Reader/Writer | Altova.IO.ReaderInput(System.IO.TextReader reader) Altova.IO.WriterOutput(System.IO.TextWriter writer) |
DOM-Dokumente | Altova.IO.DocumentInput(System.Xml.XmlDocument document) Altova.IO.DocumentOutput(System.Xml.XmlDocument document) |
In Java handelt es sich bei den Typen, die Sie als Parameter für die run-Methode bereitstellen können, um im com.altova.io-Paket definierte Klassen. Die Basisklassen sind com.altova.io.Input bzw. com.altova.io.Output.
Java-Typen
Dateien | com.altova.io.FileInput(String filename) |
Streams | com.altova.io.StreamInput(java.io.InputStream stream) com.altova.io.StreamOutput(String filename) |
Strings | com.altova.io.StringInput(String content) com.altova.io.StringOutput() |
Reader/Writer | com.altova.io.ReaderInput(java.io.Reader reader) com.altova.io.WriterOutput(java.io.Writer writer) |
DOM-Dokumente | com.altova.io.DocumentInput(org.w3c.dom.Document document) com.altova.io.DocumentOutput(org.w3c.dom.Document document) |
Beispiel
Um zu zeigen, wie Sie den Input und Output programmatisch ändern, verwenden wir das Mapping ConvertProducts.mfd als Beispiel. Nachdem Sie MapForce installiert haben und mindestens einmal gestartet haben, finden Sie das Mapping im folgenden Verzeichnis: C:\Benutzer\<Benutzer\<Benutzername>\Dokumente\Altova\MapForce2025\MapForceExamples\Tutorials.
ConvertProducts.mfd
Wie oben gezeigt, konvertiert das Mapping Daten aus einem XML-Quelldokument in ein anderes XML-Dokument. Wir möchten Folgendes erreichen:
1.Generierung von Java- und C#-Programmcode anhand dieses Mappings.
2.Ändern des Datentyps der Quellkomponente in einen String-Typ.
3.Ändern des Datentyps der Zielkomponente in einen String-Writer-Typ.
Um den Programmcode zu generieren, öffnen Sie das Mapping ConvertProducts.mfd und wählen Sie den Befehl Datei | Code generieren in | C# (bzw. Java). Für dieses Beispiel nehmen wir an, dass als Mapping-Einstellungen von ConvertProducs.mfd die Standardeinstellungen verwendet werden.
In diesem Beispiel wird der Code in den folgenden Zielverzeichnissen generiert (Sie können den Pfad gegebenenfalls ändern):
•C:\codegen\cs\ConvertProducts für C#
•C:\codegen\java\ConvertProducts für Java
Nachdem Sie den Programmcode generiert haben, öffnen Sie die Datei MappingConsole.cs (in C#) bzw. MappingConsole.java (in Java) und gehen Sie zu den folgenden Zeilen:
C#
Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); |
Java
com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
Kommentieren Sie die obigen Zeilen aus und ändern Sie den Code folgendermaßen:
C#
//Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); } |
Java
//com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
Im obigen C#- und Java-Codefragment geschieht Folgendes:
•Die beiden Originalzeilen, in denen der Input und Output für die run-Methode angegeben wurde, wurden auskommentiert. Die Mapping-Applikation liest die Daten folglich nicht mehr aus Products.xml. Diese Datei musste auch nicht in das Arbeitsverzeichnis des Programms kopiert werden.
•Der Typ Products2Source wurde als StringInput deklariert, der den Inhalt der zu verarbeitenden XML-Datei bereitstellt.
•Der Typ ProductValuePairs2Target wurde als WriterOutput-Typ deklariert, der als Argument einen String Writer erhält.
•Nach Ausführung des Mappings wird der Inhalt des String Writer in die Konsole ausgedruckt.
Verwendungsrichtlinien für Streams und Reader/Writer-Objekte
Beachten Sie bei Verwendung von Binärdaten-Streams oder Reader/Writer-Objekten als Input oder Output des Mappings folgende Dinge:
•Binärdaten-Stream-Objekte und Reader/Writer müssen zuerst geöffnet werden und einsatzbereit sein, bevor die run Methode aufgerufen wird.
•Standardmäßig schließt die run-Methode den Stream nach dem Beenden. Um dies zu verhindern, fügen Sie vor Aufruf der run-Methode die folgende Zeile ein (bzw. heben Sie die Auskommentierung auf):
C#
MappingMapToSomething.CloseObjectsAfterRun = false; // C# |
Java
MappingMapToSomething.setCloseObjectsAfterRun(false); |
Anmerkung: | Stellen Sie sicher, dass Sie den Namen MappingMapToSomething in den Namen des entsprechenden Mapping-Objekts für Ihren generierten Code ändern. |
Verwendungsrichtlinien für Strings
In Java erhält der Konstruktor von StringOutput kein Argument. Der vom Mapping erzeugte String-Inhalt kann mit der getString()-Methode aufgerufen werden, z.B:
Java
com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
In C# erhält der Konstruktor von StringOutput einen Parameter vom Typ StringBuilder, welchen Sie vorher deklarieren müssen. Wenn das StringBuilder-Objekt bereits Daten enthält, wird die Mapping-Ausgabe daran angehängt.
C#
Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); |
Um diese Codefragmente auszuführen, können Sie dasselbe generierte Projekt wie im vorherigen Beispiel verwenden. Stellen Sie jedoch sicher, dass Sie die Datei Products.xml aus C:\Benutzer\<Benutzer\<Benutzername>\Dokumente\Altova\MapForce2025\MapForceExamples\Tutorials\ in das Arbeitsverzeichnis Ihres Programms kopieren, da im Mapping-Code Daten aus dieser Datei ausgelesen werden.
Verwendungsrichtlinien für DOM-Dokumente
Wenn Sie DOM-Dokumente als Mapping-Input oder -Output verwenden, beachten Sie Folgendes:
•Die als Parameter an den DocumentOutput-Konstruktor übergebene Dokumentinstanz muss leer sein.
•Nach Aufruf von run enthält das vom Konstruktor von DocumentOutput generierte DOM-Dokument bereits die Mapping-Ausgabe und Sie können das Dokument nach Bedarf bearbeiten.