Altova MapForce Server 2024 Advanced Edition

Ejemplo: ejecutar asignaciones con parámetros

Inicio Anterior Inicio Siguiente

En este ejemplo aprenderá a compilar una asignación de MapForce en un archivo de ejecución de MapForce Server (.mfx) y a ejecutarlo desde la API de MapForce. Más concretamente, en el ejemplo la asignación toma el nombre del archivo de entrada como parámetro. Consulte también los ejemplos anteriores: C#, C++, VB.NET, VBScript o Java.

 

En este ejemplo usamos MapForce para que pueda ver y entender el diseño original de la asignación. También usamos MapForce para compilar la asignación en un archivo de ejecución de MapForce Server (.mfx) y configurar opciones, como las rutas relativas o absolutas.

 

La plataforma de servidor que se usa en este ejemplo es Windows. Puede usar un servidor que esté en el mismo equipo en el que está instalado MapForce o en uno distinto. También puede ejecutar este ejemplo en un equipo con Linux o con Mac (en Java), siempre que ajuste las rutas según la plataforma que use.

 

Requisitos

Para ejecutar esta asignación los requisitos son los mismos que los que se han descrito en los ejemplos anteriores: C#, C++, VB.NET, VBScript o Java.

 

Preparar la asignación para ejecutarla en servidor

Una vez MapForce esté instalado y lo ejecute por primera vez, verá que tiene disponibles varios archivos de asignación de ejemplo en este directorio:

 

C:\Users\<username>\Documents\Altova\MapForce2024\MapForceExamples

 

Asegúrese de que cambia esta ruta según la versión de MapForce que tenga.

 

El diseño de la asignación que usamos en este ejemplo es FileNamesAsParameters.mfd. Como puede ver a continuación, se trata de una asignación directa ue copia datos de un origen en un archivo XML de destino prácticamente sin cambiarlos. Solamente los campos PrimaryKey y Name del archivo XML de destino se rellenan con constantes de la asignación.

mfs_example_design

FileNamesAsParameters.mfd

La asignación tiene dos parámetros de entrada: InputFileName y OutputFileName. Para que sea posible acceder a una vista previa de la asignación en MapForce los valores de los parámetros los dan dos constantes. Como se describe más abajo, los valores de los parámetros se pueden reemplazar con otros al ejecutar la asignación con MapForce Server.

 

Observe cómo los dos componentes, el de entrada y el de salida, están configurados para que obtengan el nombre del archivo de forma dinámica desde la asignación. Es decir, hay un conector File: <dynamic> disponible en la parte superior de cada uno de los componentes; este conector lee datos de los respectivos parámetros de asignación (InputFileName u OutputFileName). En MapFoce puede definir o cambiar esta opción haciendo clic en el botón Archivo/cadena que hay en la parte superior derecha de los componentes. Tenga en cuenta que el nombre del archivo de entrada dado cmo parámetro debe ser una referencia a un archivo XML físico que proporcione datos de entrada a la asignación (en este ejemplo, Altova_Hierarhical.xml de la misma carpeta que el archivo de diseño de la asignación). El nombre del archivo de salida debe ser válido, por ejemplo Output.xml.

 

Antes de compilar la asignación en un archivo de ejecución de MapForce Server (.mfx) se recomienda que compruebe la configuración de la asignación. Para ello haga clic con el botón derecho en un área vacía de la asignación y seleccione Configurar asignación en el menú contextual.

mfs_example_mapping_settings

En este ejemplo vamos a cambiar la configuración que ve más arriba. En concreto, al desmarcar la casilla Convertir las rutas de acceso en absolutas en el código generado, las rutas absolutas de los archivos de entrada o de salida que se usen en la asignación se resuelven como relativas al archivo de diseño de la asignación (.mfd). Al ejecutar la asignación, MapForce Server busca esas rutas en el directorio de trabajo del programa. El directorio de trabajo predeterminado depende de la plataforma que use para acceder a la API de MapForce Server. Por ejemplo, en el caso de las aplicaciones en C#, es el mismo directorio que el ejecutable. Además, como puede ver a continuación, puede cambiar el directorio de trabajo con la propiedad de la API WorkingDirectory (o con el método Java r setWorkingDirectory, en su caso).

 

Notas:

 

En el cuadro de diálogo Configurar asignación, las únicas opciones que afectan directamente a la compilación del archivo .mfx son Convertir las rutas de acceso en absolutas en el código generado y Extremos de línea.

En esta asignación no hizo falta editar cada uno de los componentes en MapForce para cambiar las rutas de absolutas a relativas porque las rutas ya eran relativas. De lo contrario tendría que cambiarlas primero, véase Preparar asignaciones para ejecución en servidor.

 

En este ejemplo usademos C:\MappingExample como directorio de trabajo. Primero debe copiar el archivo de entrada Altova_Hierarchical.xml al que hace referencia la asignación desde C:\Users\<username>\Documents\Altova\MapForce2024\MapForceExamples al directorio de trabajo.

 

En este ejemplo tanto la entrada como la salida son archivos XML, por lo que no hay necesitad de copiar el archivo de esquema XML, ya que la información que de él se deriva está incrustada en el archivo .mfx durante la compilación. Si su asignación usa otros tipos de componentes (como bases de datos), puede que deba cumplir también otros requisitos, como explicamos en Preparar asignaciones para ejecución en servidor.

 

Por último, para compilar la asignación en un archivo de ejecución de servidor:

 

En el menú Archivo haga clic en Compilar en archivo de ejecución de MapForce y seleccione un directorio de destino. En este ejemplo ese directorio de destino es el mismo que el directorio de trabajo, C:\MappingExample.

 

En el extracto de código siguiente puede ver cómo ejecutar la asignación desde distintos entornos usando la API de MapForce Server. Observe que los dos parámetros son referenciados por el mismo nombre que tienen en el diseño de la asignación. Asimismo, el valor de parámetro tiene el mismo tipo de datos que el definido en la asignación (en este caso, cadena).

 

Ejecutar una asignación desde C++

Puede ejecutar el archivo .mfx usando código C++ como el que ve a continuación. Para ejecutarlo correctamente asegúrese de que cuenta con una licencia válida para MapForce Server, consulte también el comando de la línea de comandos verifylicense.

C++

#include <iostream>
#include "atlbase.h"
 
// 32-bit MapForce Server
#import "progid:MapForce.Server"
 
int _tmain(int argc, _TCHAR* argv[])
{
  CoInitialize( NULL );
 
  try
  {
    //Create a MapForce Server object
    MapForceServerLib::IServerPtr pMFS;
    CoCreateInstance( __uuidof( MapForceServerLib::Server ), NULL, CLSCTX_ALL, __uuidof( MapForceServerLib::IServer ), reinterpret_cast< void** >( &pMFS ) );
 
    //Set a working directory - used as a base for relative paths
    pMFS->WorkingDirectory = "C:\\MappingExample";
 
    //Prepare the parameters
    pMFS->AddParameter("InputFileName", "Altova_Hierarchical.xml");
    pMFS->AddParameter("OutputFileName", "Output.xml");
 
    //Run the mapping
    if (pMFS->Run("FileNamesAsParameters.mfx"))
        std::cout << "Success - finished execution" << std::endl;
    else
        std::cout << pMFS->LastExecutionMessage << std::endl;
 
  }
  catch (_com_error& err )
  {
    BSTR bstrMessage;
    (err).ErrorInfo()->GetDescription( &bstrMessage );
    std::cout << "Exception occurred: " << _com_util::ConvertBSTRToString( bstrMessage ) << std::endl;
 
  }
 
  CoUninitialize();
  return 0;
 
}

 

Ejecutar la asignación desde C#

Puede ejecutar el archivo .mfx usando código C# como el que ve a continuación. Para ejecutarlo correctamente primero debe añadir una referencia al DLL de MapForce Server en Visual Studio, como se explica en Interfaz .NET, y asegurarse de que cuenta con una licencia válida para MapForce Server, consulte también el comando de la línea de comandos verifylicense.

C#

static void Main(string[] args)
{
  try
  {
    // Create a MapForce Server object
    Altova.MapForceServer.Server objMFS = new Altova.MapForceServer.Server();
 
    // Set the working directory - all relative paths will be resolved against it
    objMFS.WorkingDirectory = "C:\\MappingExample";
 
    //Prepare the parameters
    objMFS.AddParameter("InputFileName", "Altova_Hierarchical.xml");
    objMFS.AddParameter("OutputFileName", "Output.xml");
 
    //Run the mapping
    if (objMFS.Run("FileNamesAsParameters.mfx"))
        System.Console.WriteLine("Success - finished execution");
    else
        System.Console.WriteLine(objMFS.LastExecutionMessage);
  }
  catch(System.Runtime.InteropServices.COMException ex)
  {
    System.Console.WriteLine("Internal Error: " + ex.Message);
  }
}

 

Ejecutar la asignación desde Java

Puede ejecutar el archivo .mfx usando código C# como el que ve a continuación. Para ejecutarlo correctamente asegúrese de que:

 

la variable de entorno Java CLASSPATH incluye una referencia a la biblioteca MapForceServer.jar, como se describe en Interfaz Java

usted cuenta con una licencia válida para MapForce Server.

Java

public static void main(String[] args) {
    try {
        // Create a MapForce Server object
        com.altova.mapforceserver.MapForceServer objMFS = new com.altova.mapforceserver.MapForceServer();
       
        // Set the working directory - all relative paths will be resolved against it
        // objMFS.setWorkingDirectory("/home/ubuntu/Downloads/MappingExample");
        objMFS.setWorkingDirectory("C:\\MappingExample");
       
        // Add the mapping parameters
        objMFS.addParameter("InputFileName", "Altova_Hierarchical.xml");
        objMFS.addParameter("OutputFileName", "Output.xml");
       
        // Run the mapping
        if ( objMFS.run( "FileNamesAsParameters.mfx" ) )
              System.out.println( "Success - finished execution" );
        else
              System.out.println( objMFS.getLastExecutionMessage() );
       
       
    } catch (Exception e) {
        e.printStackTrace();
    }
     
    System.out.println("Finished execution");
  }

© 2018-2024 Altova GmbH