Altova MapForce 2023 Enterprise Edition

Ejemplo: crear jerarquías a partir de archivos CSV y de texto de longitud fija

Inicio Anterior Inicio Siguiente

Este ejemplo es la asignación <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\Tut-headerDetail.mfd y utiliza un archivo CSV llamado Orders.csv que tiene este formato:

 

Campo 1: H define un registro de encabezado y D un registro detallado.

Campo 2: una clave común tanto para los registros de encabezado como para los registros detallados.

Cada registro de encabezado o detallado está en una línea distinta.

 

A continuación puede ver el contenido del archivo Orders.csv.

Head-detail-01

 

Nuestro diseño de asignación tiene varios objetivos:

 

Asignar el archivo CSV plano a un archivo XML jerárquico.

Filtrar los registros de encabezado (señalados con una H).

Asociar los correspondientes registros detallados (señalados con una D) a cada uno de los registros de encabezado.

Tut-headerDetail-ENT

tut-headerDetail.mfd

Para conseguir nuestros objetivos primero debemos asegurarnos de que los registros de encabezado y los registros detallados tengan un campo común. En este caso, el campo común (también denominado clave) es el segundo campo del archivo CSV (es decir, OrderNo). En el archivo CSV, tanto el primer registro de encabezado como los dos registros detallados que le siguen contienen el valor común 111.

 

El archivo Orders.csv se insertó dos veces a fin de hacer el proceso de asignación más intuitivo.

 

El archivo de esquema Tut-headerDetail.xsd tiene una estructura jerárquica: Order es el elemento raíz, Header es su elemento secundario y Detail es un elemento secundario de Header.

 

El primer archivo Orders.csv aporta los registros de encabezado Header (y todos los campos asignados) al elemento Header del archivo de esquema de destino. El componente de filtrado se usa para filtrar solamente los registros que empiecen por H. El elemento Rows aporta estos registros filtrados al elemento Header del esquema de destino.

 

El segundo archivo Orders.csv aporta los registros detallados Detail (y todos los campos asignados) filtrando los registros Detail que coinciden con la clave OrderNo del registro Header. Este filtrado se hace así:

 

Se compara el campo OrderNo del registro Header con el mismo campo de los registros Detail por medio de la función equal (el contexto prioritario se estableció en el parámetro a para un mayor rendimiento).

Se usa la función Logical-and para aportar solamente los registros Detail que contengan el mismo campo OrderNo que el registro Header.

 

A través del parámetro on-true del componente de filtrado, el elemento Rows aporta estos registros filtrados a los elementos Header y Detail del esquema de destino.

 

En el panel Resultados se puede ver el archivo XML de salida. Cada registro de encabezado contiene sus propios datos más los registros detallados asociados que tengan el mismo número de pedido.

Head-detail-2

 

Veamos ahora otro ejemplo que usa un archivo CSV algo diferente: la asignación <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\Head-detail-inline.mfd. Estas son las características de este nuevo archivo CSV:

 

No incluye ningún designador de registro (H o D).

Incluye un campo de clave común (el primer campo del archivo CSV) tanto para los registros de encabezado (Head-key) como para los detallados (Detail-key). Este campo está asignado al elemento OrderNo del esquema de destino.

El encabezado y sus correspondientes campos detallados están en la misma línea.

csv-hier-1

 

Teniendo en cuenta lo anterior, la asignación se diseñó así:

 

Los campos clave se asignaron a los correspondientes elementos OrderNo del esquema de destino.

El elemento Detail del esquema de destino se duplicó y aparece como Detail (2). Esto permite asignar el segundo conjunto de registros detallados al elemento correcto.

El resultado de la asignación es el mismo archivo XML que se generó en el primer ejemplo de este apartado.

Head-detail-inline-ENT

Head-detail-inline.mfd

© 2017-2023 Altova GmbH