Altova MapForce 2027 Enterprise Edition

Ejemplo: Escribir datos en Protocol Buffers

Inicio Anterior Inicio Siguiente

Este ejemplo muestra cómo escribir datos en archivos binarios cifrados en formato Protocol Buffers. En este ejemplo, los datos de origen provienen de una base de datos SQLite (Nanonull.sqlite); sin embargo, puede usar un método parecido para extraer datos de otros formatos compatibles con MapForce, como XML, EDI, JSON, entre otros.

 

La BD de origen de ejemplo almacena datos sobre personas, sus direcciones y productos que compraron en una tienda. El requisito empresarial es extraer información de los pedidos de la BD y generar varios archivos binarios en formato Protocol Buffers. Se debe generar un archivo binario con extensión .dat por cada pedido. El nombre del archivo generado debe incluir el identificador único del pedido; por ejemplo, Order1.dat, Order2.dat, y así sucesivamente. Asimismo, cada archivo binario debe incluir el número de pedido, el nombre y la dirección de correo electrónico de la persona, la fecha y los datos de la dirección de envío. Más concretamente, el archivo .proto que describe la estructura de un pedido tiene este aspecto:

 

syntax="proto3";

 

package mapforce.demo;

 

message Order {  

 int32 id = 1;  

 string name = 2;

 string email = 3;

 DateType entry_date = 4;

 // An order can have multiple addresses (shipping, billing)

 repeated AddressType address = 5;

}

 

message DateType {

 // Must be from 1 to 9999

 int32 year = 1;

 // Must be from 1 to 12

 int32 month = 2;

 // Must be from 1 to 31, and valid for the year and month

 int32 day = 3;  

}

 

message AddressType {  

 string city = 1;

 string street = 2;

 int32 number = 3;

 bool shipping = 5;

 bool billing = 4;  

}

orders.proto

Tanto la base de datos Nanonull.sqlite como el archivo orders.proto se encuentran en el siguiente directorio: DocExamples. El archivo del diseño de la asignación que lleva a cabo la transformación se llama GenerateOrders.mfd y se encuentra en el mismo directorio. Puede abrir y ejecutar la asignación directamente o seguir los pasos que describimos a continuación para crearla desde cero.

mf_proto_04

GenerateOrders.mfd

Como ilustra la imagen anterior, la asignación consta de un componente de origen (la BD SQLite) y uno de destino (el componente binario). En la BD de origen, la tabla más relevante para esta asignación es la de pedidos (orders).

 

Observe que la tabla users está anidada bajo la tabla orders porque MapForce detectó automáticamente una relación de clave foránea entre esas dos tablas. Asimismo, la tabla addresses está anidada bajo users. Todas las conexiones que se originen en ese tipo de tablas anidadas garantizan que la asignación conserve las relaciones de claves. Para más información consulte el apartado Gestionar relaciones de BD.

 

En el lado de destino, el elemento Archivo<dynamic> ilustra cómo el componente binario está definido para que genere dinámicamente archivos de instancia basándose en la información que recibe de la asignación. Para que un componente de destino genere dinámicamente archivos, haga clic en el botón mf_ic_file_blob y seleccione Usar nombres de archivo dinámicos dados por la asignación del menú contextual. Para más información sobre nombres de archivo dinámicos consulte el apartado Procesar varios archivos de entrada o salida simultáneamente.

 

En esta asignación, por cada id de la tabla de BD orders se genera un archivo nuevo, como se muestra en la conexión al elemento File: <dynamic>. El nombre de cada uno de los archivos generados se crea con ayuda de la función concat. Esta función une la cadena «Order» con el identificador único del pedido procedente de la base de datos y con la extensión «.dat». Por lo tanto, los archivos generados recibirán nombres como Order1.dat, Order2.dat, y así sucesivamente.

 

La asignación llama a la función concat una segunda vez. En esta ocasión, devuelve el nombre de la persona, concatenando el nombre y los apellidos e insertando un espacio entre ambos.

 

Por último, el componente GetDate del medio es una función definida por el usuario que rellena los campos de fecha del archivo binario. Esta función toma como entrada una fecha expresada como una cadena, la analiza y devuelve el año, el mes y el día por separado como valores enteros. Esta conversión es necesaria para que se mantenga el formato de fecha definido por el archivo .proto. Si hace doble clic en la barra del título de la función en la asignación, puede ver o cambiar la definición de la misma.

mf_proto_05

Función definida por el usuario GetDate

Como ilustra la imagen anterior, la función definida por el usuario GetDate analiza el valor de entrada con ayuda de la función integrada parse-dateTime. La máscara [Y]-[M]-[D] [H]:[m]:[s] se ajusta al formato de fecha tal y como está almacenado en la base de datos; por ejemplo, 2017-10-19 08:09:54. Para más información sobre máscaras de formato, consulte la descripción de la función parse-dateTime. A continuación se llama a varias funciones integradas para extraer y devolver las partes importantes de la fecha analizada.

 

Crear la asignación

Para crear la asignación anterior (o una asignación similar) desde cero, siga estos pasos:

 

1.Inserte la base de datos de origen.

2.Inserte el archivo de destino .proto; véase Agregar archivos binarios a la asignación.

3.Configure el componente de destino para que se generen los nombres de los archivos de forma dinámica cuando se ejecute la asignación. Para ello, haga clic en el botón mf_ic_file_blob y seleccione Usar nombres de archivo dinámicos dados por la asignación en el menú contextual. A continuación, conecte el elemento Archivo<dinámico> con una entrada que proporcione el nombre del archivo. En este ejemplo, el nombre del archivo se obtiene con ayuda de la función concat, como explicábamos más arriba. Para más información sobre nombres de archivo dinámicos consulte el apartado Procesar varios archivos de entrada o salida dinámicamente.

4.También puede añadir cualquiera de las funciones integradas de MapForce y conectar sus entradas. En este ejemplo, la función concat se usa en dos ocasiones. Para más información consulte Agregar una función integrada a una asignación de datos. Observe que, cuando llama a funciones integradas, como concat, es posible que algunos de los datos de entrada provengan de constantes de cadena. Para más información sobre constantes consulte el apartado Agregar una constante a una asignación de datos.

5.También puede añadir cualquier función definida por el usuario que necesite. De esta forma puede abstraerse de algunos detalles de la asignación y centrarse en la visión de conjunto. En este ejemplo, la función definida por el usuario "GetDate" convierte una cadena en partes de la fecha, como hemos explicado, y su lógica de implementación está oculta en la asignación principal. Para más información sobre la creación de funciones personalizadas, consulte el apartado Funciones definidas por el usuario.

 

Si acaba de empezar a usar MapForce, consulte Tutoriales, donde encontrará ejemplos simples explicados paso a paso.

 

Ejecutar la asignación

Como explicamos al principio de este apartado, se espera de la asignación que produzca varios archivos .dat. Para obtener una vista previa de los archivos generados, haga clic en el panel Resultados.

mf_proto_06

Como se aprecia en la asignación anterior, el panel Resultados muestra todos los archivos generados, por los que puede navegar haciendo clic en los botones bidireccionales o escogiendo un elemento de la lista desplegable. Puede guardar los resultados generados de dos formas:

 

•En el menú Resultados, haga clic en Guardar todos los archivos de salida ( ic-save-all-out ).

•Haga clic en el botón Guardar todos los resultados generados ( ic-save-all-out ) de la barra de herramientas.

 

Esta vista en JSON sirve para que pueda comprobar la asignación. Ver el resultado en formato JSON le servirá para comprobar la asignación. No obstante, cuando guarde el archivo de salida, este se guardará como un archivo binario.

 

Automatización con MapForce Server

Si tiene una licencia para MapForce Server también puede ejecutar la asignación desde la línea de comandos tanto en Linux como en Windows:

 

1.Compile la asignación en un archivo de ejecución de MapForce Server (.mfx) con el comando de menú Archivo | Compilar en archivo de ejecución de MapForce Server (véase también el apartado Compilar asignaciones en archivos de ejecución de MapForce Server).

2.Copie el archivo .mfx en el equipo servidor.

3.Como esta asignación lee datos de un archivo de BD SQLite, copie el archivo de BD Nanonull.sqlite en el mismo directorio que contiene el archivo .mfx en el servidor. Para otros tipos de BD, consulte el apartado Asignaciones de bases de datos en distintos entornos de ejecución.

4.Ejecute MapForce Server con el siguiente comando.

 

mapforceserver run GenerateOrders.mfx

 

Notas:

 

•mapforceserver es la ruta de acceso al ejecutable de MapForce Server con las modificaciones que requiera su sistema operativo.

•Cambie la ruta de acceso al archivo .mfx o copie el archivo .mfx en la misma carpeta que el ejecutable.

 

Al ejecutar la asignación en el servidor también puede ejecutar asignaciones como una llamada API o como un trabajo de FlowForce, sea puntualmente o de forma recurrente. Para más información consulte el apartado Automatización con MapForce Server.

© 2020-2026 Altova GmbH