Este ejemplo muestra cómo ejecutar un archivo de ejecución de MapForce (.mfx) desde código C++. En Windows, los archivos de ejemplo están en: C:\Program Files\Altova\MapForceServer2025\etc\Examples.
Requisitos
Antes de ejecutar el siguiente código, compruebe que cumple con estos requisitos:
•MapForce Server está instalado y tiene asignada una licencia válida.
•MapForce Server está disponible como objeto de servidor COM (este proceso suele tener lugar automáticamente durante la instalación de MapForce Server. Consulte el apartado Información sobre la interfaz COM para obtener más información).
Ejecutar el código de la asignación
El código siguiente ejecuta tres archivos de ejecución de servidor (.mfx). La tabla siguiente enumera los archivos de entrada que espera cada archivo .mfx, así como la salida que se genera tras la ejecución.
Si tiene Altova MapForce puede examinar las asignaciones originales a partir de las cuales se crearon los archivos .mfx para entenderlas mejor. Se trata, respectivamente, de TokenizeString1.mfd, SimpleTotal.mfd y ClassifyTemperatures.mfd. Puede encontrar estas asignaciones en el directorio: C:\users\<user>\Altova\MapForce2025\MapForceExamples.
El ejemplo siguiente:
•Crea una instancia nueva de Altova.MapForceServer.Server, que es el objeto con el que trabajará de ahora en adelante.
•Define el directorio de trabajo en el que se lleva a cabo la ejecución. Se espera que los archivos de entrada estén en este directorio si hace referencia a ellos con una ruta relativa. Los archivos de salida también se crean en este directorio (véase la tabla anterior).
•Ejecuta TokenizeString.mfx. La ruta de acceso al archivo se da como argumento para el método Run (tenga en cuenta que la ruta es relativa al directorio de trabajo que se definió antes). Si el archivo se ejecuta correctamente, en el directorio de trabajo se crea un archivo .csv que representa el resultado de la asignación.
•Ejecuta SimpleTotal.mfx. En este caso la ruta también es relativa al directorio de trabajo. Esta asignación produce una cadena de salida; para obtenerla debe llamar al método GetOutputParameter.
•Ejecuta ClassifyTemperatures.mfx. Esta asignación espera un parámetro como entrada; puede indicarlo con el método AddParameter.
// MapForceServerAPI_sample.cpp : Defines the entry point for the console application. // #include <iostream> #include "atlbase.h" #ifndef _WIN64 // 32-bit MapForce Server #import "progid:MapForce.Server" #else // 64-bit MapForce Server #import "progid:MapForce_x64.Server" #endif 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 (you may need to adapt the path to the installation folder) pMFS->WorkingDirectory = ".."; // this is relative to this applications' working directory (the project folder) // Default path to the MapForce Server executable is the installation path (same dir with the MapForceServer.dll) // In case you moved the binaries on the disk, you need to explicitly set the path to the .exe file // pMFS.ServerPath = "C:\\Program Files (x86)\\Altova\\MapForceServer2025\\bin\\MapForceServer.exe"; // pMFS.ServerPath = "C:\\Program Files\\Altova\\MapForceServer2025\\bin\\MapForceServer.exe"; //Set global resource file and configuration, if your mapping uses global resources //pMFS->SetOption( "globalresourcefile", "GlobalResources.xml" ); // "gr" can be used as short name for "globalresourcefile" //pMFS->SetOption( "globalresourceconfig", "Default" ); // "gc" can be used as short name for "globalresourceconfig" // ---------------------------------------------------------------------------------- // An example with input and output paths stored inside the MFX file std::cout << "\nExecuting TokenizeString.mfx..." << std::endl; if ( pMFS->Run( "TokenizeString.mfx" ) == VARIANT_TRUE ) std::cout << "Successfully generated file 'AltovaToolFeatures.csv'." << std::endl; else { // execution failed. maybe no write permissions in working directory? Run this program as administrator. std::cout << pMFS->LastExecutionMessage << std::endl; } // ---------------------------------------------------------------------------------- // An example creating a simple output so that we can retrieve the result explicitly std::cout << "\nExecuting SimpleTotal.mfx..." << std::endl; if ( pMFS->Run( "SimpleTotal.mfx" ) ) std::cout << "Mapping result is: " + pMFS->GetOutputParameter( "total" ) << std::endl; else { // execution failed (e.g. somebody deleted file ipo.xml) std::cout << pMFS->LastExecutionMessage << std::endl; } // ---------------------------------------------------------------------------------- // an example with parameterized input // the default of 'lower = 5' gets changed to the value '10' // mfx reads file Temperatures.xml and writes its output to Temperatures_out.xml. std::cout << "\nExecuting ClassifyTemperatures.mfx with parameter 'lower' set to '10' ..." << std::endl; pMFS->AddParameter("lower", "10"); if ( pMFS->Run( "ClassifyTemperatures.mfx" ) ) std::cout << "File Temperatures_out.xml has been written successfully." << std::endl; else { // execution failed. maybe no write permissions in working directory? Run this program as administrator. 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; } |