XLデータムーバのデーモンまたはサービスには、転送データをフィルタリングするための利用者作成プログラム、「フィルターコマンド」 を呼び出す機能があります。
本機能は、転送コマンド起動時の環境変数に、フィルターコマンドを指定することで本機能を使用することができます。
ただし、フィルターコマンドは絶対パスで指定する必要があります。
転送コマンド起動時の環境変数等については、転送コマンドリファレンスを参照してください。
また、XLデータムーバのクライアントシステム側で、フィルターコマンドを実行することもできます。
その場合には、シェル機能と転送コマンドのオプションの指定等を組み合わせることで可能となります。
転送コマンドの指定の仕方等については、下で説明しているクライアントシステム側でフィルターコマンドを実行する場合 を参照してください。
フィルターコマンドは、用途に応じて利用者が作成します。
フィルターコマンドは、以下のような用途に利用できます。
コード変換プログラムの呼出し
必要なレコードの選別
サーバシステム側でフィルターコマンドを使用した場合のイメージは以下のとおりです。
クライアントシステム側でフィルターコマンドを使用した場合のイメージは以下のとおりです。
注意
データ転送時にサーバシステム側で区切り文字変換機能とフィルターコマンドの起動を実施する場合、フィルターコマンドに渡されるデータは、SEND時(mftfsendコマンド起動時)は 区切り文字の変換実施後のデータ、RECEIVE時(mftfrecvコマンド起動時)は区切り文字の変換前のデータとなります。
フィルターコマンドの入出力に関しては、以下に従って作成してください。
サーバシステム側でフィルターコマンドを実行する場合
UNIX/IAサーバのサーバシステム側でフィルターコマンドを実行する場合について説明します。
クライアントシステムからサーバシステムへのデータを送信するとき(mftfsendコマンド起動時)、使用するフィルターコマンドとは以下の方法でデータを受け渡します。
データ入力: 標準入力
データ出力: 標準出力、またはファイル出力
XLデータムーバのデーモンまたはサービスは、クライアントシステムがデータ転送用ボリュームを経由して送ってきたデータを、フィルターコマンドの標準入力に渡します。
フィルターコマンドの出力には、上記のように標準出力とファイル出力の2つがあり、データ転送コマンド実行時の指定と、フィルターコマンドの作りと合わせておく必要があります。
デーモンまたはサービスとフィルターコマンドとの、データの流れの関係について以下に示します。
転送コマンド(mftfsendコマンド)起動時に、データ出力を標準出力にするかファイル出力にするかは、環境変数に指定した「フィルターコマンド」の値の内、オプション部分に、転送コマンドに指定した「格納先ファイル名」と同じ文字列があるかないかで決定されます。
同じ文字列があった場合にはファイル出力になり、なかった場合には標準出力になります。
この指定により、デーモンまたはサービスの動作が上記のように変わります。
注意
ファイル出力でフィルターコマンドを使用した場合、転送先ファイルはXLデータムーバのデーモンまたはサービスが作成してから、フィルターコマンドを呼び出します。
よって、フィルターコマンド内で、転送先ファイルの存在を意識している場合には注意が必要です。
クライアントシステムがサーバシステムのデータを受信するとき(mftfrecvコマンド起動時)、使用するフィルターコマンドとは以下の方法でデータを受け渡します。
データ入力: 標準入力、またはファイル入力
データ出力: 標準出力
XLデータムーバのデーモンまたはサービスは、フィルターコマンドにデータを入力させる方法として、上記の標準入力とファイル入力の2つを提供しています。
この入力方法については、データ転送コマンド実行時の指定と、フィルターコマンドの作りと合わせておく必要があります。
また、デーモンまたはサービスは、フィルターコマンドの標準出力よりフィルタリングされたデータを受け取り、そのデータをデータ転送用ボリュームを経由して、クライアントシステムに渡します。
デーモンまたはサービスとフィルターコマンドとの、データの流れの関係について以下に示します。
転送コマンド(mftfrecvコマンド)起動時に、データ入力を標準入力にするかファイル入力にするかは、環境変数に指定した「フィルターコマンド」の値の内、オプション部分に、転送コマンドに指定した「転送元ファイル名」と同じ文字列があるかないかで決定されます。
同じ文字列があった場合にはファイル入力になり、なかった場合には標準入力になります。
この指定により、デーモンまたはサービスの動作が上記のように変わります。
クライアントシステム側でフィルターコマンドを実行する場合
クライアントシステム側でフィルターコマンドを実行するには、転送コマンド実行時に以下のようにシェルのパイプ等を使用して実行することで可能となります。
転送コマンドのオプションの指定については、転送コマンドリファレンスを参照してください。
mftfsendコマンドの場合 (UNIXサーバの場合)
フィルターコマンド | mftfsend サーバシステム側格納ファイル名
mftfrecvコマンドの場合 (IAサーバの場合)
mftfrecv.exe サーバシステム側転送元ファイル名 | フィルターコマンド
以下のように mftfsendコマンド の標準入力に、フィルタリングしたデータを渡すように、フィルターコマンドを作成してください。
以下のように mftfrecvコマンド は標準出力に受信したデータを出力するため、そのデータを入力してフィルタリングするように、フィルターコマンドを作成してください。
注意
mftfrecvコマンドを使用し、クライアントシステム側でフィルターコマンドを起動させる場合、mftfrecvコマンドがデータを標準出力に出力中に、フィルターコマンドが終了してしまうと、mftfrecvコマンドは「内部エラー (システムメッセージ = pipeクローズ)」が発生し異常終了します。
フィルターコマンドの復帰コードを利用者の用途に応じて任意の復帰コードに変換し、クライアントシステム側へ転送コマンドの復帰コードとして変換できる機能があります。この機能を利用するには、フィルターコマンド復帰コード変換ファイルを作成する必要があります。
ファイルの作成方法については、フィルターコマンド復帰コード変換ファイルの作成を参照してください。
XLデータムーバでフィルターコマンドを実行するときの環境 (環境変数等) は、デーモンとサービスで異なります。それぞれについて説明します。
デーモン
フィルターコマンドは、必ず Bシェル 配下で起動されます。
フィルターコマンドを実行するために動作環境の設定が必要な場合は、コマンドを起動するシェルスクリプトを作成し、そのスクリプトの中で必要な定義をしてください。
XLデータムーバからはこのスクリプトを呼び出すようにしてください。
例
/home/mftf/bin 配下のddコマンドを利用したい場合の環境変数PATHの変更例
#!/bin/sh PATH=/home/mftf/bin:$PATH (*1) export PATH (*1) dd conv=ascii exit $?
*1:コマンド実行に必要な環境を設定。
注意
フィルターコマンドをシェルスクリプトにする場合、Bシェルで実施することを推奨します。
シェルスクリプト内で #! /bin/csh のようにシェルを変更する場合、フィルターコマンド実行時に .cshrc(Cシェルの場合) が実行されます。
その場合には、.cshrc(Cシェルの場合) 内に標準出力に出力するようなコマンド等の命令が、入っていないことを確認してください。
入っていた場合、.cshrc(Cシェルの場合) 内で標準出力に出力したものも、すべて転送データとして扱われて転送されてしまいます。
サービス
フィルターコマンドが実行されるときの環境(環境変数等)は、IAサーバ側のXLデータムーバサービスが起動されたときの環境に依存します。
また、フィルターコマンドを実行するために動作環境の設定が必要な場合は、上記のデーモンのときと同様に、コマンドを起動するバッチファイルを作成し、そのバッチファイルの中で必要な定義をしてください。XLデータムーバからはこのバッチファイルを呼び出すようにしてください。