このサイトをビューするために JavaScript を有効化してください。

Altova MapForce Server 2020 

MapForce Server API

例: パラメーターを持つマッピングの実行

スクロール ホーム トップ その他

MapForce Server 実行ファイル (.mfx) に MapForce マッピングをコンパイルし、 MapForce API から実行する方法を説明しています。サンプルは特にマッピングが入力ファイル名をパラメーターとしてとるシナリオについて説明しています。パラメーターを持たないマッピングの実行を説明するサンプルに関してはC#VB.NETC++VBScript、 または Java サンプルを参照してください。

 

必要条件

このサンプル内では元のマッピングデザインをビューして理解するために MapForce が使用されています。MapForce は MapForce Server 実行ファイルに (.mfx) マッピングをコンパイルし相対的対絶対的パスなどの設定を構成するためにも使用されています。

このサンプルで使用されているサーバープラットフォームは Windows です。MapForce がインストールされている同じマシンまたは異なるマシンで行うことができます。Windows スタイルのパスをプラットフォームに適用できるように調整することにより Linux または Mac マシン (Java) 上でこのサンプルを実行することもできます。

 

サーバー実行のためのマッピングの準備

MapForce をインストールして MapForce を最初に起動する際に以下のパスでいくつかのデモマッピングデザインを使用することができます:

 

C:\Users\<username>\Documents\Altova\MapForce2020\MapForce サンプル

 

異なるバージョンの MapForce を使用する場合上記のパスを必要に応じて変更してください。

 

このサンプル内で使用されているスキーマは FileNamesAsParameters.mfd と呼ばれます。以下で説明されている通り、ターゲット XML ファイルへソースからデータをほぼ変更することなくコピーするこれはわかりやすいマッピングです。ターゲット XML ファイルの PrimaryKeyName フィールドがマッピングからの定数により作成されます。

mfs_example_design

FileNamesAsParameters.mfd

マッピングは2つの入力パラメーターが存在します: InputFileName and OutputFileName, respectively. MapForce 内のマッピングをプレビュー可能にするにはパラメーターの値は2つの定数により提供されます。以下で説明されている通り、マッピングが MapForce Server で実行される場合パラメーターの値を自身の値と置き換えることができます。

 

ソースとターゲットマッピングコンポーネントの両方はマッピングからファイル名を動的に取得するために構成されています。具体的には File: <Dynamic> 入力接続はコンポーネントの一番上で使用することができ、対応するマッピングパラメーター (InputFileName または OutputFileName)からデータを読み取ることができます。 MapForce 内でコンポーネントの右上の 「ファイル/文字列」 ボタンをクリックすることでこのオプションを設定または変更することができます。パラメーターとして提供された入力ファイル名はマッピングに入力データを提供する物理的な XML ファイルへのレファレンスである必要があり (このサンプルではマッピングデザインファイルと同じフォルダーからの Altova_Hierarhical.xml です)。出力ファイル名はすべての有効なファイルであることができます。例えば Output.xml

 

MapForce Server 実行ファイル (.mfx) にマッピングをコンパイルする前に、通常マッピングの設定をレビューすることが奨励されます。マッピングの空白の部分を右クリックし、コンテキストメニューから「マッピングの設定」を選択します。

mfs_example_mapping_settings

この例のスコープのために、上記の通り設定を変更します。特に 「生成されたコード内でパスを絶対パスにする」 チェックボックスをクリアすると、マッピングにより使用されている入力または出力ファイルへの絶対パスはマッピングデザインファイル (.mfd) に相対的に解決されます。マッピングのランタイムでは MapForce Server はプログラムの作業ディレクトリ内でこれらのパスを検索します。デフォルトの作業ディレクトリは MapForce Server API にアクセスするために使用されたプラットフォームにより異なります。 例えば、 C# アプリケーションの場合、実行可能ファイルと同じディレクトリです。 更に以下で説明されているとおりWorkingDirectory (または適用可能な場合は setWorkingDirectory Java メソッド)という名前の API プロパティを使用して作業ディレクトリを変更することができます。

 

メモ:マッピング設定ダイアログボックスで、 .mfx ファイルのコンパイルを直接影響する唯一の設定は 「生成されたコード内でパスを絶対パスにする」「行末」です。

 

この例は、作業ディレクトリとして C:\MappingExample を使用しています。このためマッピングにより参照されている入力ファイル Altova_Hierarchical.xml C:\Users\<username>\Documents\Altova\MapForce2020\MapForceExamples から作業ディレクトリにコピーします。

 

このサンプルでは、ソースとターゲットは XML ファイルで XML スキーマファイルをサーバーにコピーする必要はありません。 これは派生した情報は .mfx ファイルにコンパイル中に埋め込まれるからです。マッピングが他のコンポーネント型を使用すると (例えば、データベース) 追加の必要条件が存在する場合があります。サーバーでの実行のためにマッピングを準備するも参照してください。

 

最後にマッピングをサーバー実行ファイルにコンパイルするには以下を行います:

 

「ファイル」 メニューから、「MapForce Server 実行ファイルにコンパイル」をクリックしターゲットディレクトリを選択します。このサンプルではターゲットディレクトリは作業ディレクトリ C:\MappingExample と同じです。

 

次のコードリスティングは MapForce Server API を使用して異なる環境からマッピングを実行する方法を説明しています。下のコードリスティングでは、両方のパラメーターはマッピングデザイン内の同じ名前により参照されています。またパラメーターの値はマッピング上で定義されている同じデータ型を持ちます (この場合 string)。

 

C++ からマッピングを実行する:

.mfx ファイルを以下に示される C++ コードを使用して実行します。このコードリスティングの実行に成功するには MapForce Server が有効なライセンスを有していることを確認してください。verifylicense CLI コマンドを参照してください。

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;
 
}

 

C# からマッピングを実行する:

.mfx ファイルを以下に示される Java コードを使用して実行します。このコードリスティングの実行に成功するには Visual Studio 内の MapForce Server DLL にレファレンスを.NET インターフェイス で説明されるように追加します。MapForce Server が有効なライセンスを有していることを確認してください。verifylicense CLI コマンドも参照してください。

C#

static void Main(string[] args)
{
  // 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);
}

 

Java からマッピングを実行する:

.mfx ファイルを以下に示される Java コードを使用して実行します。このコードリスティングの実行に成功するには以下を確認してください:

 

Java インターフェイスについて内で説明されているとおりの MapForceServer.jar ライブラリへのレファレンスを含む Java CLASSPATH 環境変数

MapForce Server が有効なライセンスを有していること。 verifylicense CLI コマンドを確認してください。

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("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");
  }

(C) 2020 Altova GmbH