Cambiar tipo de datos de entrada/salida de la asignación de forma programática
Después de generar código Java o C# con MapForce tiene la opción de cambiar el tipo de datos de entrada o salida de la asignación; para ello basta con editar el código generado. Esto quiere decir que puede usar como parámetros de asignación objetos de tipos distintos a los que se generan por defecto. Por ejemplo, en lugar de que la asignación lea los datos de entrada de un archivo guardado en disco puede usar una cadena de texto o un objeto se secuencia como entrada. Esta opción solo está disponible para el código generado en C# o Java.
Puede consultar los tipos de objetos que puede usar como entrada o salida en la primera columna de la tabla siguiente. El resto de columnas indica qué formatos de datos son compatibles con ese tipo en concreto. Para leer una definición más precisa de cada uno de los tipo consulte el punto "Definiciones de tipos" más abajo.
XML | JSON* | Microsoft Excel* | EDI (incl. X12, HL7)* | FlexText* | CSV/Texto | |
---|---|---|---|---|---|---|
Archivos | Sí | Sí | Sí | Sí | Sí | Sí |
Secuencias | Sí | Sí | Sí | Sí | Sí | Sí |
Cadenas | Sí | Sí | – | Sí | Sí | Sí |
Escritor/lector | Sí | Sí | – | Sí | Sí | Sí |
Documentos DOM | Sí | – | – | – | – | – |
* Formatos compatibles con la edición MapForce Enterprise Edition solamente.
Para cambiar el tipo de datos de entrada o de salida de una asignación:
1.Genere código C# o Java desde una asignación.
2.En el código generado encuentre la llamada al método run (en Java) o Run (en C#):
a.Si está usando C#, abra el archivo MappingConsole.cs.
b.Si está usando Java, abra el archivo MappingConsole.java (consola) o el archivo MappingFrame.java (IGU).
Nota: | el nombre del archivo puede ser distinto si cambió el nombre de la aplicación en la configuración de la asignación. Por ejemplo, si cambió el nombre a "MyApp", el nombre del archivo generado será, respectivamente, MyAppConsole.js, MyAppConsole.java y MyAppFrame.java. |
3.Cree una instancia del tipo que requiera (consulte el punto "Definiciones de tipos").
4.Indique los objetos declarados como parámetros al método run (en Java) o Run (en C#), como se puede ver en el ejemplo siguiente.
El método run es el método más importante de las clases de asignación que se generan. Tiene un parámetro por cada componente de origen o destino estático de la asignación y un parámetro final para el componente de salida. Si una asignación contiene componentes que procesan varios archivos de forma dinámica, los parámetros correspondientes no aparecen en el código generado porque en este caso los nombres de los archivos se procesan de forma dinámica dentro de la asignación.
Definiciones de tipos
En C#, los tipos que puede usar como parámetros del método Run son clases que se definen en el espacio de nombres Altova.IO. Las clases base son Altova.IO.Input y Altova.IO.Output respectivamente.
Tipos C#
Archivos | Altova.IO.FileInput(string nombreArchivo) Altova.IO.FileOutput(string nombreArchivo) |
Secuencias | Altova.IO.StreamInput(System.IO.Stream secuencia) Altova.IO.StreamOutput(System.IO.Stream secuencia) |
Cadenas | Altova.IO.StringInput(string contenido) Altova.IO.StringOutput(System.Text.StringBuilder generadorCadenas) |
Escritor/lector | Altova.IO.ReaderInput(System.IO.TextReader lector) Altova.IO.WriterOutput(System.IO.TextWriter escritor) |
Documentos DOM | Altova.IO.DocumentInput(System.Xml.XmlDocument documento) Altova.IO.DocumentOutput(System.Xml.XmlDocument documento) |
En Java, los tipos que puede usar como parámetros del método run son clases que se definen en el paquete com.altova.io. Las clases base son com.altova.io.Input y com.altova.io.Output respectivamente.
Tipos Java
Archivos | com.altova.io.FileInput(String nombreArchivo) |
Secuencias | com.altova.io.StreamInput(java.io.InputStream secuencia) com.altova.io.FileOutput(String nombreArchivo) |
Cadenas | Altova.IO.StringInput(string contenido) com.altova.io.StringOutput() |
Escritor/lector | com.altova.io.ReaderInput(java.io.Reader lector) com.altova.io.WriterOutput(java.io.Writer escritor) |
Documentos DOM | com.altova.io.DocumentOutput(org.w3c.dom.Document documento) com.altova.io.DocumentOutput(org.w3c.dom.Document documento) |
Ejemplo
En este ejemplo usaremos la asignación ConvertProducts.mfd para ilustrar cómo cambiar el tipo de datos de entrada y salida de forma programática. Después de instalar MapForce y ejecutarlo al menos una vez puede encontrar esta asignación en el directorio: C:\Usuarios\<usuario>\Documentos\Altova\MapForce2023\MapForceExamples\Tutorials.
ConvertProducts.mfd
Como se ve más arriba, la asignación convierte los datos de origen de un document XML en otro documento XML. En este caso los objetivos son dos:
1.Generar código de programa Java y C# desde esta asignación.
2.Cambiar el tipo de datos del componente de entrada a cadena de texto.
3.Cambiar el tipo de datos del componente de destino a un escritor de cadenas.
Para generar el código de programa, abra la asignación ConvertProducts.mfd y ejecute el comando Archivo | Generar código en | C# (o Java) En este ejemplo asumimos que la asignación mantiene la configuración predeterminada (ConvertProducts.mfd).
En este ejemplo el código generado se escribe en los directorios de destino siguientes (puede cambiar las rutas si quiere):
•C:\codegen\cs\ConvertProducts, para C#
•C:\codegen\java\ConvertProducts, para Java
Una vez haya generado el código, abra MappingConsole.cs (en C#) o MappingConsole.java (en Java) y busque estas líneas:
C#
Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); |
Java
com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
Convierta las líneas anteriores en comentario y cambie el código como sigue:
C#
//Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); } |
Java
//com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
En los fragmentos de código C# y Java anteriores ocurre lo siguiente:
•Las dos líneas originales que indican la entrada y la salida del método run ahora son comentarios. Esto quiere decir que la asignación ya no lee datos de Products.xml. De hecho, ni siquiera necesitamos copiar este archivo en el directorio de trabajo del programa.
•El tipo Products2Source se declara como un StringInput que indica el contenido del archivo XML que se quiere procesar.
•El tipo ProductValuePairs2Target se declara como un tipo WriterOutput que toma un escritor de cadenas como argumento.
•Cuando la asignación ha terminado de ejecutarse, el contenido del escritor de cadenas se envía a la consola.
Normas de uso para secuencias y objetos escritor/lector
Al usar secuencias binarias u objetos lector/escritor como entrada o salida de la asignación debe tener en cuenta que:
•Se supone que los objetos de secuencia binaria y los objetos lector/escritor se abren y están listos antes de llamar al método run.
•Por defecto el método run cierra la secuencia cuando se termina. Para evitar este comportamiento basta con insertar (o convertir de comentario en código) esta línea antes de llamar al método run:
C#
MappingMapToSomething.CloseObjectsAfterRun = false; |
Java
MappingMapToSomething.setCloseObjectsAfterRun(false); |
Nota: | asegúrese de que cambia el nombre MappingMapToSomething por el del objeto de asignación según el código generado. |
Normas de uso para cadenas de texto
En Java el constructor de StringOutput no toma ningún argumento. Para acceder al contenido de cadena que produce la asignación puede usar el método getString(), por ejemplo:
Java
com.altova.io.Input Products2Source = com.altova.io.StreamInput.createInput("Products.xml"); |
En C#, el constructor de StringOutput toma un parámetro de tipo StringBuilder que debe declarar de antemano. Si el argumento StringBuilder ya contiene datos, el resultado de la asignación se le anexa.
C#
Altova.IO.Input Products2Source = Altova.IO.StreamInput.createInput("Products.xml"); |
Para ejecutar estos fragmentos de código puede usar el mismo proyecto generado que en el ejemplo anterior. Sin embargo, debe asegurarse de que copia el archivo de Products.xml de C:\Users\<username>\Documents\Altova\MapForce2023\MapForceExamples\Tutorials\ en el directorio de trabajo de su programa, ya que el código de la asignación lee datos de ese archivo.
Normas de uso para documentos DOM
Cuando use documentos DOM como entrada o salida de una asignación debe tener en cuenta que:
•La instancia del documento dada como parámetro al constructor DocumentOutput debe estar vacía.
•Después de llamar a run el documento DOM que genera el constructor de DocumentOutput ya contiene el resultado de la asignación y puede manipular el documento como quiera.