Altova MapForce 2024 Enterprise Edition

Changer Type de données entrée/sortie

Accueil Préc Haut Suivant

Un code généré par MapForce peut être intégré, ou adapté dans votre application spécifique, bien que le résultat de la génération de code est une application complète et entièrement fonctionnelle. Après avoir généré le code Java ou C# avec MapForce, vous pouvez changer en option le type de données de l’entrée ou la sortie de mappage en éditant le code généré. Plus spécifiquement, vous pouvez utiliser les objets de paramètres de mappage des types autres que ceux générés par défaut. Par exemple, à la place que le mappage lise l’entrée d’un fichier sur le disque, vous pouvez fournir un string ou un objet stream comme entrée. Notez que cette fonction est spécifique au code généré dans C# ou uniquement Java.

 

Les types d’objet pris en charge comme entrée ou sortie sont recensés dans la première colonne de la table ci-dessous. Chaque colonne suivante précise les formats de données où ce type spécifique est pris en charge. Pour une définition plus précise de chaque type, voir la section « définition de types » ci-dessous.

 


XML

JSON*

Microsoft Excel*

EDI (inclut X12, HL7)*

FlexText*

CSV/Text

Fichiers

Oui

Oui

Oui

Oui

Oui

Oui

Flux

Oui

Oui

Oui

Oui

Oui

Oui

Chaînes

Oui

Oui

Oui

Oui

Oui

Reader/Writer

Oui

Oui

Oui

Oui

Oui

Documents DOM

Oui

 

* Formats pris en charge uniquement dans MapForce Enterprise Edition

Pour modifier le type de données d'une d'entrée ou sortie d'une fonction :

1.Générer du code C# ou Java depuis un mappage.

2.Dans le code généré, trouvez l’appel dans la méthode run (dans Java) ou la méthode Run (dans C#), comme suit :

 

a.Si vous utilisez C#, ouvrez le fichier MappingConsole.cs.

b.Si vous utilisez Java, ouvrez MappingConsole.java (le programme de la console) ou le fichier MappingFrame.java (le programme GUI).

 

Note :le nom du fichier peut être différent si vous avez changé le nom de l’application en paramètres de mappage. Par exemple, si vous le changez en « MyApp », le nom du fichier généré devient MyAppConsole.js et MyAppConsole.java, et MyAppFrame.java, respectivement.

 

3.Créez une instance du type requis (voir la section « définitions de type »).

4.Fournissez les objets déclarés comme paramètres dans la méthode run (dans Java) ou la méthode Run (dans C#), comme affiché dans l’exemple ci-dessous.

 

La méthode run est la méthode la plus importante des classes de mappage générées. Elle contient un paramètre pour chaque source statique ou composant d’entrée dans le mappage et un paramètre final pour le composant de sortie. Si votre mappage contient des composants qui traitent les multiples fichiers de manière dynamique, les paramètres respectifs n’apparaissent pas dans le code généré, car dans ce cas, les noms de fichiers sont traités de manière dynamique à l’intérieur du mappage.

 

Définitions de type

Dans C#, les types que vous pouvez fournir en tant que paramètres dans la méthode Run sont des classes définies dans l’espace de noms com.altova.io). Les classes de base sont Altova.IO.Input et Altova.IO.Output, respectivement.

Types C#

Fichiers

Altova.IO.FileInput(nom de fichier String)

Altova.IO.FileOutput(nom de fichier String )

Flux

Altova.IO.StreamInput(System.IO.Stream stream)

Altova.IO.StreamOutput(System.IO.Stream stream)

Chaînes

Altova.IO.StringInput(contenu string)

Altova.IO.StringOutput(System.Text.StringBuilder sbuilder)

Reader/Writer

Altova.IO.ReaderInput(System.IO.TextReader reader)

Altova.IO.WriterOutput(System.IO.TextWriter writer)

Documents DOM

Altova.IO.DocumentInput(System.Xml.XmlDocument document)

Altova.IO.DocumentOutput(System.Xml.XmlDocument document)

 

Dans Java, les types que vous pouvez fournir en tant que paramètres dans la méthode run sont des classes définies dans le package com.altova.io). Les classes de base sont com.altova.io.Input et com.altova.io.Output, respectivement.

Type Java

Fichiers

com.altova.io.FileInput(String filename)
com.altova.io.FileOutput(String filename)

Flux

com.altova.io.StreamInput(java.io.InputStream stream)

com.altova.io.StreamOutput(String filename)

Chaînes

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)

Documents DOM

com.altova.io.DocumentInput(org.w3c.dom.Document document)

com.altova.io.DocumentOutput(org.w3c.dom.Document document)

 

Exemple

Pour illustrer le changement de l’entrée et de la sortie par programmation, nous utiliserons le mappage ConvertProducts.mfd comme modèle. Après avoir installé et exécuté MapForce au moins une fois, vous pouvez trouver ce mappage dans le répertoire suivant : C:\Users\<username>\Documents\Altova\MapForce2024\MapForceExamples\Tutorial.

cg_input_output_01

ConvertProducts.mfd

Tel qu’illustré ci-dessus, le mappage convertit les données depuis un document XML source vers un autre document XML. Nos objectifs sont les suivants :

 

1.Générer Java et le code de programme C# depuis ce mappage.

2.Changer le type de données du composant source en un type string.

3.Changer le type de données du composant cible en un type writer string.

 

Pour générer le code de programme, ouvrez le mappage ConvertProducts.mfd et exécutez la commande Fichier | Générer code dans | C# (ou Java). Pour l’exemple, nous partirons du fait que les paramètres de mappage de ConvertProducts.mfd sont les paramètres par défaut.

cg_input_output_02

Cet exemple utilise les répertoires cible suivants pour le code généré (n’hésitez pas à modifier le chemin, le cas échéant) :

 

C:\codegen\cs\ConvertProducts, for C#

C:\codegen\java\ConvertProducts, for Java

 

Ayant généré le code de programme, ouvrez MappingConsole.cs (dans C#) ou MappingConsole.java (dans Java) et trouvez les lignes suivantes :

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");

 

Commenter les lignes ci-dessus et changez le code comme suit :

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();
}

 

Dans les listes de code C# et Java ci-dessus, les points suivants ont lieu :

 

Les deux lignes originales qui fournissent l’entrée et la sortie à la méthode run sont commentées. En conséquence, l’application de mappage ne lit plus les données de Products.xml. En fait, nous ne devons pas copier ce fichier dans le répertoire de travail du programme.

Le type Products2Source a été déclaré comme StringInput qui fournit le contenu du fichier d’entrée XML à être traité.

Le type ProductValuePairs2Target a été déclaré comme type WriterOutput qui prend un « string writer » comme argument.

Une fois que le mappage termine l’exécution, les contenus du « string writer » sont imprimés vers la console.

 

Lignes directrices d’utilisation pour les streams et objets Reader/Writer

En utilisant les streams binaires ou les objets Reader/Writer comme entrée ou sortie au mappage, notez la chose suivante :

 

Les objets stream binaires devraient être ouverts et prêts à être utilisés avant d’appeler la méthode run.

Par défaut, la méthode run ferme le stream une fois la procédure terminée. Pour éviter ce comportement, insérer (ou décommentez) la ligne suivante avant d’appeler la méthode run :

C#

MappingMapToSomething.CloseObjectsAfterRun = false;

Java

MappingMapToSomething.setCloseObjectsAfterRun(false);

 

Note :Assurez-vous de changer MappingMapToSomething au nom de l’objet de mappage tel qu’applicable pour votre code généré.

 

Lignes directrices d’utilisation pour strings

Dans Java, le constructeur de StringOutput ne prend pas d’argument. Le contenu du string produit par le mappage peut être accédé en appelant la méthode getString(), par exemple :

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();
}

 

Dans C#, le constructeur de StringOutput prend un type de paramètre StringBuilder que vous devez déclarer avant. Si l’objet StringBuilder contient déjà des données, la sortie de mappage y est ajoutée.

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();
}

 

Pour exécuter ces listes de codes, vous pouvez utiliser le même projet généré comme dans l’exemple précédent. Assurez-vous, toutefois, de copier le fichier Products.xml de C:\Users\<username>\Documents\Altova\MapForce2024\MapForceExamples\Tutorials\ dans votre répertoire de travail du programme, puisque le code de mappage lit les données depuis ce fichier.

 

Lignes directrices d’utilisation pour les documents DOM

Lorsque vous utilisez les documents DOM comme entrée ou sortie de mappage, notez les points suivants :

 

L’instance de document fournie comme paramètre au constructeur DocumentOutput doit être vide.

Après avoir appelé run, le document DOM généré par le constructeur de DocumentOutput contient déjà la sortie de mappage, et vous pouvez manipuler le document, le cas échéant.

 

© 2018-2024 Altova GmbH