Altova MapForce Server 2024 Advanced Edition

L'exemple suivant illustre comment exécuter un fichier d'exécution de mappage (.mfx) depuis le code C++. Sous Windows, les fichiers d'exemple sont disponibles sous le chemin suivant : C:\Program Files\Altova\MapForceServer2024\etc\Examples.

 

Conditions préalables

Avant d'exécuter le code ci-dessous, assurez-vous que les conditions préalables suivantes sont correctes :

 

MapForce Server est installé et mis sous licence

MapForce Server est disponible en tant qu'objet de serveur COM (normalement, ce processus a lieu automatiquement pendant l'installation MapForce Server ; pour vérifier si l'enregistrement a bien réussi, voir Interface COM).

 

Exécuter le fichier .mfx

Le code ci-dessous exécute trois fichiers d'exécution de serveur (.mfx). La table ci-dessous recense les fichiers d'entrée attendus par chaque fichier .mfx, et la sortie qui sera créée après l'exécution.

 

Fichier d'exécution (.mfx)

Entrée

Sortie

TokenizeString.mfx

AltovaTools.xml

AltovaToolsFeatures.csv

SimpleTotal.mfx

ipo.xml

String

ClassifyTemperatures.mfx

Temperatures.xml

Temperatures_out.xml

 

Si vous disposez de Altova MapForce, vous pouvez également consulter les mappages originaux à partir desquels les fichiers .mfx ont été compilés pour mieux les comprendre. Ils sont appelés TokenizeString1.mfd, SimpleTotal.mfd et ClassifyTemperatures.mfd, respectivement. Vous trouverez les mappages dans les répertoires suivants : C:\users\<user>\Altova\MapForce2024\MapForceExamples.

 

L'exemple ci-dessous procède comme suit :

 

Il crée une nouvelle instance de Altova.MapForceServer.Server. Il s'agit de l'objet avec lequel vous travaillerez par la suite.

Il définit un répertoire de travail dans lequel l'exécution aura lieu. Les fichiers d'entrée sont censés exister dans ce répertoire si vous vous y référez comme utilisant un chemin relatif. Des fichiers de sortie seront aussi créés dans ce répertoire.

Il exécute le fichier TokenizeString.mfx. Le chemin vers ce fichier est fourni en tant qu'un argument pour la méthode Run (veuillez noter que le chemin est relatif au répertoire de travail qui a été défini précédemment). En cas d'exécution réussie, un fichier .csv représentant la sortie de mappage sera créé dans le répertoire de travail.

Il exécute SimpleTotal.mfx. Le chemin de fichier est également relatif au répertoire de travail. Ce mappage produit une sortie de string, nous appelons donc la méthode GetOutputParameter pour obtenir la sortie de string.

Il exécute ClassifyTemperatures.mfx. Ce mappage attend un paramètre en tant qu'entrée, qui a été fourni avec l'aide de la méthode 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\\MapForceServer2024\\bin\\MapForceServer.exe";
    // pMFS.ServerPath = "C:\\Program Files\\Altova\\MapForceServer2024\\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 << "\Executing 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 << "\Executing 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 << "\Executing 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;
}

© 2018-2024 Altova GmbH