ループ Functoid
Looping Functoid は、ソース スキーマ内の複数のレコードまたはフィールドを変換先スキーマの 1 つのレコードに結合します。
次の図は、2 つの異なるアンケートから収集された住所を 1 つのマスター アドレス一覧に結合するためにマップで使用される ループfunctoid を示しています。
注意
ループ Functoid と値のマッピング (フラット化) Functoid は一緒に使用しないでください。 両方を同時に使用した場合、コンパイル済みのマップにおいてループ Functoid の下位にある対象ノードには送信元のループ依存関係がないと見なされます。
ソース スキーマ の FoodSurvey および FlowerSurvey ループ レコードは、宛先スキーマのループ アドレス レコードにマップされます。 入力インスタンス メッセージに 3 つの FoodSurvey レコードと 2 つの FlowerSurvey レコードがある場合、 ループfunctoid はこれらを組み合わせて、出力インスタンス メッセージに 5 つの Address レコードを作成します。
次のコードは、入力インスタンス メッセージのサンプルです。
<ns0:Surveys xmlns:ns0="http://LoopingFunctoid.Surveys">
<FoodSurvey Name="Karin Zimprich" Address="345 N 63rd St" City="Boston" State="MA" PostalCode="07485" />
<FoodSurvey Name="Wendy Wheeler" Address="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" />
<FoodSurvey Name="Florian Voss" Address="1234 Main St" City="Denver" State="CO" PostalCode="97402" />
<FlowerSurvey Name="Kelly Focht" Address="456 1st Ave" City="Miami" State="FL" PostalCode="81406" />
<FlowerSurvey Name="Jim Kim" Address="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" />
</ns0:Surveys>
この入力インスタンス メッセージを上の図に示したマップで処理すると、次の出力インスタンス メッセージが生成されます。
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>
<Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>
<Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>
</ns0:MasterAddresses>
FoodSurvey メッセージ アドレスと FlowerSurvey メッセージ アドレスが組み合わされました。 まとめられたメッセージでは、各アドレスの送信元は示されません。 ソースを追跡する場合は、MasterAddress スキーマの Address レコードに Source 属性を追加し、定数値をマップします。 この値を設定するには、[ FoodSurvey ] フィールドを新しい [ソース ] フィールドに接続します。 コネクタ行で、[リンク プロパティ] [コンパイラ | ソース リンク] | プロパティを [コピー名] に変更します。 [FlowerSurvey] フィールドに対してこのプロセスを繰り返します。 ここから入力メッセージを再処理すると、次の出力が得られます。
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Name="Karin Zimprich" Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458" Source="FoodSurvey"/>
<Address Name="Wendy Wheeler" Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290" Source="FoodSurvey"/>
<Address Name="Florian Voss" Street="1234 Main St" City="Denver" State="CO" PostalCode="97402" Source="FoodSurvey"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406" Source="FlowerSurvey"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103" Source="FlowerSurvey"/>
</ns0:MasterAddresses>
ノード間のリレーションシップは、ループ Functoid の動作 に影響します 。 たとえば、ソース スキーマ内の子ノードとその親の両方 を Looping Functoid にリンクすると、ターゲット ノードが作成されなくなります。
Functoid は、送信元ノード間のリレーションシップにも影響を受けます。 Functoid をループ Functoid のソース ノードの非兄弟子フィールドに接続すると、予期しない結果が発生する可能性があります。 たとえば、 String Concatenate Functoid を使用して FoodSurvey Name フィールドと FlowerSurvey Address フィールドを MasterAddress の [アドレス名] フィールドに結合すると、次の出力インスタンス メッセージが生成されます。
<ns0:MasterAddresses xmlns:ns0="http://LoopingFunctoid.MasterAddresses">
<Address Street="345 N 63rd St" City="Boston" State="MA" PostalCode="07458"/>
<Address Street="7890 Broadway" City="Columbus" State="OH" PostalCode="46290"/>
<Address Street="1234 Main St" City="Denver" State="CO" PostalCode="97402"/>
<Address Name="Kelly Focht" Street="456 1st Ave" City="Miami" State="FL" PostalCode="81406"/>
<Address Name="Jim Kim" Street="567 2nd Ave" City="Seattle" State="WA" PostalCode="98103"/>
</ns0:MasterAddresses>
FoodSurvey ソース メッセージには [名前] フィールドは表示されませんが、FlowerSurvey ソース メッセージには表示されます。
重要
Functoid をループ Functoid のソース ノードの子フィールドに接続すると、ソース ノードが兄弟でない場合、予期しない結果が生成される可能性があります。
ループ functoid は、条件付きループを作成したり、スキーマをカタログにマップしたりするために使用できる強力なコンストラクトです。 また、考慮する必要がある ループ Functoid パスが重複する効果もあります。
UI ガイダンスと開発者 API 名前空間リファレンスの Table Looping Functoid リファレンス