Altova MapForce 2024 Enterprise Edition

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)
com.altova.io.FileOutput(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\MapForce2024\MapForceExamples\Tutorials.

cg_input_output_01

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.

cg_input_output_02

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");
Altova.IO.Output ProductValuePairs2Target = new Altova.IO.FileOutput("ProductValuePairs.xml");

Java

com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml");
com.altova.io.Output ProductValuePairs2Target = new com.altova.io.FileOutput("ProductValuePairs.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");
//Altova.IO.Output ProductValuePairs2Target = new Altova.IO.FileOutput("ProductValuePairs.xml");
 
Altova.IO.Input Products2Source = new Altova.IO.StringInput("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\" +
                                      "<products xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"products.xsd\">\" +
                                      "   <product>\" +
                                      "      <id>100</id>\" +
                                      "      <color>blue</color>\" +
                                      "      <size>XXL</size>\" +
                                      "   </product>\" +
                                      "</products>\");
                   
System.IO.StringWriter writer = new System.IO.StringWriter(new System.Text.StringBuilder());
Altova.IO.Output ProductValuePairs2Target = new Altova.IO.WriterOutput(writer);
 
try
{
  MappingMapToProductValuePairsObject.Run(Products2Source, ProductValuePairs2Target);
 
  // Print out the writer object
  Console.Write(writer.ToString());
}
finally
{
  Products2Source.Close();
  ProductValuePairs2Target.Close();

}

Java

//com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml");
//com.altova.io.Output ProductValuePairs2Target = new com.altova.io.FileOutput("ProductValuePairs.xml");
       
com.altova.io.Input Products2Source = new com.altova.io.StringInput("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\" +
              "<products xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"products.xsd\">\" +
              "   <product>\" +
              "      <id>100</id>\" +
              "      <color>blue</color>\" +
              "      <size>XXL</size>\" +
              "   </product>\" +
              "</products>\");
       
java.io.StringWriter writer = new java.io.StringWriter();
com.altova.io.Output ProductValuePairs2Target = new com.altova.io.WriterOutput(writer);
 
try {
  MappingMapToProductValuePairsObject.run(Products2Source, ProductValuePairs2Target);

 
  // Print out the writer object
  System.out.print(writer.toString());
 
  } finally {
    (Products2Source).close();
    ProductValuePairs2Target.close();
}

 

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");
com.altova.io.StringOutput ProductValuePairs2Target = new com.altova.io.StringOutput();
       
try {
  // Run the mapping
  MappingMapToProductValuePairsObject.run(Products2Source, ProductValuePairs2Target);
  // Get the string object
  String str = ProductValuePairs2Target.getString().toString();
}

 

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");
System.Text.StringBuilder sb = new System.Text.StringBuilder();
Altova.IO.Output ProductValuePairs2Target = new Altova.IO.StringOutput(sb);
 
try
{
  // Run the mapping
  MappingMapToProductValuePairsObject.Run(Products2Source, ProductValuePairs2Target);
  // Get the string output
  String str = sb.ToString();
}

 

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\MapForce2024\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.

 

© 2018-2024 Altova GmbH