Ejemplo: leer datos de Protocol Buffers
Este ejemplo muestra cómo leer datos de un archivo binario cifrado en formato Protocol Buffers. El archivo binario de origen se encuentra en la siguiente ruta: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\assets.bin. El archivo .proto que describe al archivo binario se encuentra en ese mismo directorio y tiene este aspecto:
syntax="proto3";
package mapforce.demo;
message CulturalAssets { repeated PaintingType painting = 1; }
message PaintingType { string name = 1; string period = 2; float height = 3; // in cm float width = 4; // in cm string remarks = 5; LocationEnum location = 6;
enum LocationEnum { UNKNOWN = 0; MUSEUM = 1; TEMPLE = 2; PRIVATE = 3; } } |
assets.proto
El archivo binario de origen contiene información sobre varios bienes culturales (en este ejemplo, una colección de cuadros). Como se ve más arriba en el archivo .proto, cada uno de esos cuadros tiene un alto y un ancho expresados en centímetros. Existen otros campos de descripción de los cuadros, incluida una enumeración que indica su ubicación (museo, colección privada o tempo). El requisito empresarial es extraer esta información a un archivo de valores separados por comas (CSV). Además, todas las dimensiones de los cuadros deben convertirse de centímetros a pulgadas y representarse como una única cadena de formato "24 in x 56,8 in."
A continuación verá la asignación que extrae datos de acuerdo con los requisitos de más arriba y produce el resultado deseado. Encontrará esta asignación en el siguiente directorio: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\. Puede abrir la asignación y ejecutarla directamente, o seguir los pasos que se describen más abajo para crearla desde cero.
ReadProtocolBuffers.mfd
Como se aprecia más arriba, la asignación consiste en un componente binario de origen (assets) y un componente CSV de destino (PaintingInfo). También contiene los siguientes componentes intermedios:
•Una tabla de asignación de valores que convierte valores de enumeración como 0, 1, 2, 3 en cadenas de lectura humana directa (por ejemplo, 0 = UNKNOWN, 1 = MUSEUM, etc.).
•La función ConvertCmToInch. Como sugiere su nombre, se trata de una función definida por el usuario que convierte centímetros en pulgadas. En la asignación se llama a esta función dos veces (para ancho y alto).
•La función concat. Esta función devuelve una cadena en formato "# pulg. x # pulg.", donde # representa el ancho y el alto del cuadro en pulgadas.
Los siguientes pasos explican cómo crear la asignación anterior desde cero.
Paso 1: añadir el archivo binario de origen
1.En el menú Insertar, haga clic en Archivo de Protocol Buffers y navegue hasta el siguiente archivo: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\assets.proto.
2.Cuando se lo pida la aplicación, seleccione "Cultural Assets" como mensaje raíz y haga clic en Aceptar.
3.Haga doble clic en la barra del título del componente nuevo para abrir el cuadro de diálogo "Configuración del componente binario".
4.Haga clic en Examinar, junto a Archivo binario de entrada, y seleccione el siguiente archivo: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\assets.bin.
Consulte también el apartado Agregar archivos binarios a la asignación.
Paso 2: agregar el componente CSV de destino
1.En el menú Insertar, haga clic en Archivo de texto.
2.Marque la casilla Utilizar procesamiento básico para archivos CSV... y haga clic en Continuar. Se abrirá el cuadro de diálogo "Configuración del componente CSV".
3.Haga clic varias veces en el botón Anexar campo para crear los cinco campos de destino necesarios para almacenar los datos esperados.
4.También puede hacer doble clic en el encabezado de cada campo para cambiarles el nombre.
Para más información, consulte el apartado Opciones de configuración de componentes CSV.
Paso 3: agregar la asignación de valores
1.En el menú Insertar, haga clic en Asignación de valores.
2.Cree una entrada por cada registro asignado, como se muestra a continuación.
La condición "Si no existe, entonces" permite indicar qué ocurre si el archivo binario no contiene ningún valor para el campo Location. SI esto ocurre, la asignación escribirá el valor "Se desconoce" en el destino, en lugar de "ningún resultado". Para más información, consulte el apartado Usar asignaciones de valores.
Paso 4: crear la función definida por el usuario
1.En el menú Función, haga clic en Crear una función definida por el usuario y llámela "ConvertCmToInch". Deje el resto de opciones como están.
2.Arrastre las funciones integradas divide y round-precision desde la ventana Bibliotecas hasta la ventana de asignación de la función. Consulte también Agregar una función integrada a una asignación de datos.
3.Añada dos constantes y establezca todas las conexiones como se muestra más abajo (consulte también el apartado Agregar una constante a una asignación de datos). La priVolver a la asignación principalmera constante aporta la constante decimal necesaria para convertir centímetros a pulgadas conforme a la fórmula y la segunda aporta la precisión de redondeo.
La función divide el valor de entrada entre 2,54 y después redondea el resultado a un dígito decimal, como se muestra en la imagen siguiente:
Para evitar errores potenciales, defina el tipo de datos de los componentes de entrada y de salida como "decimal". Para ver o cambiar el tipo de datos, haga doble clic en la barra del título del componente o haga clic con el botón derecho en la barra del título y seleccione Propiedades en el menú contextual. |
Una vez que la función definida por el usuario esté lista, haga clic en Volver a la asignación principal y arrastre la función de la ventana Bibliotecas hasta la asignación para llamarla. En este ejemplo se llama dos veces a la función. Para más información, consulte el apartado Funciones definidas por el usuario.
Paso 5: añadir la función de concatenación
Comience a teclear "concat" en la ventana Bibliotecas y arrastre la función concat hasta la asignación. Para añadir los argumentos de entrada necesarios, haga clic varias veces en Agregar parámetro ( ); véase también Agregar o eliminar argumentos en una función. Las constantes "in" y "x" son valores de cadena. Esta función devuelve el alto del cuadro, seguido de la cadena "in" seguida de "x" y del ancho del cuadro, seguido de "in" otra vez.
Ejecutar la asignación
Para obtener una vista previa del archivo generado en MapForce, haga clic en la pestaña Resultados. Observe que la tercera columna CSV contiene las dimensiones del cuadro en el formato requerido.
Resultado de la asignación
Para guardar el resultado de la asignación en disco:
•En el menú Resultados, haga clic en Guardar en el archivo.
Automatización con MapForce Server
Si cuenta con una licencia de MapForce Server puede ejecutar la asignación desde la línea de comandos, tanto en equipos Linux como macOS o Windows, como sigue:
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.Ejecute MapForce Server con el siguiente comando.
mapforceserver run ReadProtocolBuffers.mfx |
Notas:
•mapforceserver es la ruta de acceso al ejecutable de MapForce Server en función de su sistema operativo.
•Cambie la ruta de acceso al archivo .mfx o copie el archivo .mfx en la misma carpeta que el ejecutable.
•El archivo .mfx es independiente; el archivo .proto no es necesario para ejecutar el servidor.
En la ejecución del servidor puede ejecutar asignaciones como una llamada API o como trabajos de FlowForce, ya sea en el momento o de forma recurrente. Para más información consulte el apartado Automatización con MapForce Server.