FMEリファレンス > カスタムトランスフォーマーの作成
最終更新: 2022-6-20 | FME 2022.0.1.0
カスタムトランスフォーマーを作成する方法には次の2通りがあります。
- 既存のデータフローの一部をカスタムトランスフォーマーに変換する
- 既存のデータフローを使わずに新しいカスタムトランスフォーマーを作成する
既存のデータフローの一部のカスタムトランスフォーマーへの変換
複数のトランスフォーマーを含むデータフローの一部 (ただし、リーダ/ライターフィーチャータイプを含めることはできません) をカスタムトランスフォーマーに変換することができます。
ここでは、次の3つのトランスフォーマーを含む部分をカスタムトランスフォーマーに変換することを例として手順を説明します。このデータフローは、フィーチャーのジオメトリ (面) の円形度を求めるものです。
円形度 = 4 * PI * S / L2 (PI: 円周率, S: 面積, L: 周長)
円形度は標準の CircularityCalculator トランスフォーマーで求められます。この例はあくまでもカスタムトランスフォーマー作成手順の説明用です。
- カスタムトランスフォーマーに変換したい範囲を選択し、右クリック > Create Custom Transformer または Workbench メニュー: Transformers > Create Custom Transoformer を選択します。
ブックマークで囲んだ範囲であれば、ブックマークの右クリック > Create Custom Transformer から始めることもできます。
- Create Custom Transformer 画面が開くので、各フィールドを設定して OK で閉じます。
名前、カテゴリ、説明等はカスタムトランスフォーマー編集時の Navigator ウィンドウ Transformer Properties セクションでも編集できます。
Attribute References (属性参照) オプションについては後述します。
- 入出力ポートを備えたカスタムトランスフォーマーが作成され、キャンバスにはトランスフォーマー名と同じ名前のタブが追加されます。
このタブでカスタムトランスフォーマーの内容を編集することができます。
元のデータフローで選択した範囲は、自動的に作成したカスタムトランスフォーマーのインターフェースに置き換えられます。
既存のデータフローを使用しない新規カスタムトランスフォーマーの作成
既存のデータフローの範囲を選択せずに、キャンバス空白部分の右クリック > Create Custom Transformer (または Workbench メニュー: Transformers > Create
Custom Transformer) によって Create Custom Transformer 画面を開き、各フィールドを設定して OK で閉じると、新しいカスタムトランスフォーマー編集用のタブがキャンバスに追加されます。
初期状態では入力ポート (Input) と出力ポート (Output) がひとつずつ配置されており、これらのポート間にトランスフォーマーを追加、接続してデータフローを作成することによって、このカスタムトランスフォーマーの処理内容を定義することができます。
キャンバスの元のタブには、このカスタムトランスフォーマーのインターフェースが他のオブジェクトと接続されていない状態で追加されます。
上記のように作成したカスタムトランスフォーマーは編集中のワークスペースに組み込まれており、ワークスペースファイル (*.fmw) を保存したときにその一部として一緒に保存されます。
カスタムトランスフォーマーが組み込まれているワークスペースを開いている Workbench では Transformer Gallery の Embedded Transformers セクションにそれらが表示され、そのワークスペース内では標準のトランスフォーマーと同じ方法でいくつでも追加することができます。
カスタムトランスフォーマーは、それを作成したワークスペースから独立したファイル (*.fmx) に保存 (エクスポート) することもでき、それによって他のワークスペースでの再利用や他のユーザーへの提供が容易になります。
エクスポートしない場合でも、2つの Workbench を同時に起動して2つのワークスペースを開き、カスタムトランスフォーマーを含む方のキャンバスから他方のキャンバスにカスタムトランスフォーマーをコピー&ペーストすることはできます。
Attribute References (属性参照) オプションについて
標準のトランスフォーマーと同様にカスタムトランスフォーマーのインターフェースにもパラメーター設定画面があり、カスタムトランスフォーマーで公開 (Published) パラメーターを定義すると、パラメーター設定画面にそのパラメーター設定用のフィールドが追加され、それを介して、カスタムトランスフォーマー内部で使用する値を外部から受け取れるようになります。
カスタムトランスフォーマー内部で入力フィーチャーの属性を使用して何らかの処理を行う場合には、それらの属性値をカスタムトランスフォーマーの公開 (Published) パラメーター (パラメーター設定画面) を介して受け取る必要があります。
例えば、次のデータフローの StringConcatenator はフィーチャー属性 a, b を使用した処理を行っているので、それ以降の選択範囲をカスタムトランスフォーマーに変換する場合には、それらの値を受け取るため公開 (Published) パラメーターが必要になります。
Create Custom Transformer 画面の Attribute References オプションでは、既存のデータフローの一部を選択してカスタムトランスフォーマーに変換する場合に、その範囲で使用している属性値を受け取るための公開 (Published) パラメーターの作成方法として、次のいずれかひとつを選択します。
Handle With Published Parameters
カスタムトランスフォーマーに変換する範囲にフィーチャー属性を使用するトランスフォーマーが含まれる場合には、それらの値を受け取るための公開 (Published) パラメーターが自動的に作成されます。
Advanced – Fix Manually
カスタムトランスフォーマーに変換する範囲にフィーチャー属性を使用するトランスフォーマーが含まれる場合でも、それらの値を受け取るための公開 (Published) パラメータの自動作成は行われません。
どちらの場合でも、後で公開 (Published) パラメーターの追加や削除は手動で行うことができます。
前出の例について Handle With Published Parameters を選択してカスタムトランスフォーマーを作成した場合には、フィーチャー属性 a, b の値を受け取るための公開 (Published) パラメーター A, B が自動的に作成され、それらを介して受け取った値は入力ポートで属性 a, b に格納されて後続のトランスフォーマーで使用することができます。
入力ポートで定義される属性名はカスタムトランスフォーマーの作成時点で使用されているフィーチャー属性名と同じになりますが、内部で使われる属性は公開 (Published) パラメーターを介して受け取った値を格納したものであることに留意してください。別の名前の属性がこれらのパラメーターに設定された場合でも、カスタムトランスフォーマー内部では属性 a, b にそれらの値が格納されます。
このカスタムトランスフォーマーのパラメーター設定画面には、公開 (Published) パラメーターに値を設定するためのフィールドが表示されます。
一方、Advanced – Fix Manually を選択してカスタムトランスフォーマーを作成した場合には、属性 a, b の値を受け取るための公開 (Published) パラメーターは作成されません。入力ポートでは属性 a, b が定義されていないため、それらを使用している StringConcatenator は Incomplete (パラメーターの設定が不完全) の状態になっています。
しかし、この場合でも入力ポートの編集画面で入力フィーチャーの属性名を選択することにより、Handle With Published Parameters で作成した場合と同様に、それらの値を受け取るための公開 (Published) パラメーターを作成することができます。