assignアクティビティに関する必知事項
assignアクティビティについては、次の点に注意してください。
-
assignアクティビティは、
<copy>
要素がメディエータのmplanに記述されている順序で実行されます。 -
割当ての順序は、「値の割当て」ダイアログの下部ペインで割当てを選択し、「上」または「下」矢印をクリックして割当てリスト内でその割当てを移動することで変更できます。
-
新しい割当てを作成する場合は、割当てリストの任意の位置に割当てを挿入できます。「値の割当て」ダイアログの下部ペインで既存の割当てを選択し、ダイアログの左上にあるリストから「新規ルールを後に挿入」または「新規ルールを前に挿入」を選択します。
-
「ネイティブからの変換」アクティビティからの出力変数および「ネイティブへの変換」アクティビティへの入力変数も、「値の割当て」ダイアログの割当てに対して使用できます。
-
「値の割当て」ダイアログの下部ペインに表示されるすべての割当ては、「OK」をクリックした後にのみメディエータのmplanに適用されます。
-
ソースがターゲットのプロパティに割り当てられている場合でも、そのソースのXPath式は常にリーフ・ノードを参照する必要があります。そうでない場合、ソースの子ノードの値はすべて連結されて、ターゲットのプロパティに割り当てられます。次の例に詳細を示します。
<copy target="$out.property.jca.file.FileName" expression="$in.body/imp1:request/ProductReq/Make" xmlns:imp1="http://xmlns.oracle.com/psft"/>
ノート:
リーフ・ノードとは、子ノードのないノードです。
-
定数またはプロパティがターゲットのXPath式に割り当てられる場合でも、そのターゲットのXPath式は常にリーフ・ノードを指し示す必要があります。そうでない場合、リーフ以外のノードには文字列値のみが含まれ、
.xsd
ファイルに従って無効なXMLが生成される可能性があります。次の例に詳細を示します。<copy target="$out.request/inp1:request/ProductReq/Make" value="NewMakeValue" xmlns:inp1="http://xmlns.oracle.com/psft"/>
この例では、
$out.request/inp1:request/ProductReq/Make
がリーフ・ノードを参照しています。 -
トランスフォーメーションが使用可能な場合は、ソース・パートをターゲット・パートに割り当てても、そのターゲットは上書きされます。これは、トランスフォーメーションの最初にassignアクティビティが発生するためです。トランスフォーメーションが使用不可の場合は、assignアクティビティによってターゲットが作成されます。次の例に詳細を示します。
<copy target="$out.request" expression="$in.body"/> <copy target="$out.header.inp1_header" expression="$in.header.inp1_header" xmlns:inp1="http://xmlns.oracle.com/psft"/>
-
ターゲット・ペイロードのいずれかの子ノードを変更する必要がある場合は、次のような2つのユースケースがあります。
-
トランスフォーメーションが使用可能な場合は、ターゲットの子ノードを指し示しているターゲットのXPath式にソース式を直接割り当てます。次の例に詳細を示します。
<copy value="ConstantModel" target="$out.request/inp1:request/ProductReq/Model" xmlns:inp1="http://xmlns.oracle.com/psft"/>
-
トランスフォーメーションが使用不可の場合は、次の2つのステップを実行します。最初に、ソース・パートをターゲット・パートに割り当て、次にターゲットの子ノードを指し示しているターゲットのXPath式にソース式を直接割り当てます。次の例に詳細を示します。
<copy target="$out.request" expression="$in.body"/> and <copy value="ConstantModel" target="$out.request/inp1:request/ProductReq/Model" xmlns:inp1="http://xmlns.oracle.com/psft"/>
-
-
ソースの子ノードの1つのみをターゲットに伝播する必要がある場合は、最初にトランスフォーメーションが起動されていないことを確認します。次に、必要な子ノードを指し示すソースのXPath式を割り当てます。次の例に詳細を示します。
<copy target="$out.request/imp1:ProductReq" expression="$in.body/imp1:request/ProductReq" xmlns:imp1="http://xmlns.oracle.com/psft"/>
このケースで、
$in.body/imp1:request/ProductReq
から評価されるソース要素には、子ノードのみが含まれ、ルート要素から始まる完全なツリー構造は含まれていません。次の例に詳細を示します。<ProductReq> <Make>MAKE</Make> <Model>MODEL</Model> </ProductReq>
-
メディエータに複数のassignアクティビティがあり、各ソースのXPath式が別々の子ノードを指し示している場合は、次のような2つのユースケースがあります。
-
トランスフォーメーションが使用可能な場合は、ターゲットの対応する子ノードが更新されます。
-
トランスフォーメーションが使用不可の場合、ターゲットは複数パートのターゲットであり、各パートがソースの子ノードを参照している必要があります。
-
-
ヘッダーの場合、
passThroughHeader
プロパティが設定されている場合は、次のようになります。-
トランスフォーメーションのヘッダー操作は、ターゲットのヘッダーで更新されます。
-
パート・レベルのassignアクティビティによって、ターゲットのヘッダー・パートが上書きされます。
-
パート・レベルより下のノードのassignアクティビティによって、ターゲットの対応するノードが更新されます。
-
-
(パート・レベルより下の)複数のソース・ノードが(パート・レベルより下の)同じターゲット・ノードに割り当てられている場合、そのターゲット・ノードには、assignアクティビティの最後の
copy
要素の値が含まれます。次の例に詳細を示します。<copy target="$out.request/imp1:request/ProductReq/Make" expression="$in.body/imp1:request/ProductReq/Model" xmlns:imp1="http://xmlns.oracle.com/psft"/> <copy target="$out.request/imp1:request/ProductReq/Make" expression="$in.body/imp1:request/Description" xmlns:imp1="http://xmlns.oracle.com/psft"/>
前の例で、最初の
copy
要素は、2番目のcopy
要素によって上書きされるため何も効果がありません。 -
XPath式の結果がリスト(複数発生)になる場合は、次の2つのユースケースがあります。
-
リストに単一の要素が含まれる場合は、XPath式が伝播されます。
-
リストに複数の要素が含まれる場合、XPath式はサポートされません。
-
-
ソースの子ノードをターゲットの子ノードに割り当てると、次のアクティビティが発生します。
-
ソースの子ノードの名前とネームスペースが、ターゲットのノード名とネームスペースによってそれぞれ上書きされます。
-
ターゲットの子ノードは、ターゲット・ノードの親ノードにあるソースの子ノードによって置換されます。
-