Altova MapForce Server 2024 

Im folgenden Beispiel wird gezeigt, wie Sie eine Mapping-Ausführungsdatei (.mfx) über C++-Code ausführen. Unter Windows stehen die Beispieldateien unter dem folgenden Pfad zur Verfügung: C:\Programme\Altova\MapForceServer2024\etc\Examples.

 

Voraussetzungen

Bevor Sie den nachstehenden Code ausführen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt werden:

 

MapForce Server ist installiert und lizenziert.

MapForce Server steht als COM-Serverobjekt zur Verfügung (normalerweise geschieht dies automatisch bei der Installation von MapForce Server; Informationen, wie Sie überprüfen, ob die Registrierung erfolgreich war, finden Sie unter Informationen zur COM-Schnittstelle).

 

Ausführen des Mapping-Codes

Mit dem nachstehenden Code werden drei Server-Ausführungsdateien (.mfx) ausgeführt. Die Tabelle unten enthält eine Liste der von den einzelnen .mfx.-Dateien erwarteten Input-Dateien sowie der nach der Ausführung erstellten Ausgabedateien.

 

Ausführungsdatei (.mfx)

Input

Augabe

TokenizeString.mfx

AltovaTools.xml

AltovaToolsFeatures.csv

SimpleTotal.mfx

ipo.xml

String

ClassifyTemperatures.mfx

Temperatures.xml

Temperatures_out.xml

 

Wenn Sie Altova MapForce installiert haben, haben Sie die Möglichkeit, sich zum besseren Verständnis die Original-Mappings, anhand derer die .mfx-Dateien kompiliert wurden, anzusehen. Diese haben die Namen TokenizeString1.mfd, SimpleTotal.mfd bzw. ClassifyTemperatures.mfd. Sie finden die Mapping im folgenden Verzeichnis: C:\Benutzer\<Benutzer>\Altova\MapForce2024\MapForceExamples.

 

In diesem Beispiel geschieht Folgendes:

 

Es wird eine neue Instanz von Altova.MapForceServer.Server erstellt. Dies ist das Objekt, mit dem Sie später arbeiten werden.

Darin wird ein Arbeitsverzeichnis konfiguriert, in dem die Dateien ausgeführt werden. Die Input-Dateien sollten in diesem Verzeichnis vorhanden sein, falls Sie diese über einen relativen Pfad referenziert haben. Auch die Ausgabedateien werden in diesem Verzeichnis erstellt (siehe Tabelle oben).

TokenizeString.mfx wird ausgeführt. Der Dateipfad wird als Argument für die Methode Run bereitgestellt (Beachten Sie, dass der Pfad relativ zum zuvor definierten Arbeitsverzeichnis ist). Nach erfolgreicher Ausführung wird im Arbeitsverzeichnis eine .csv-Datei, die die Mapping-Ausgabe darstellt, erstellt.

SimpleTotal.mfx wird ausgeführt. Auch hier ist der Dateipfad wieder relativ zum Arbeitsverzeichnis. Mit diesem Mapping wird eine String-Ausgabe erzeugt, daher wird die Methode GetOutputParameter aufgerufen, um die String-Ausgabe zu erhalten.

ClassifyTemperatures.mfx wird ausgeführt. In diesem Mapping wird ein Parameter als Input erwartet, der mit Hilfe der Methode AddParameter bereitgestellt wurde.

 

// 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