アクティビティの実行をバイパスするためのXPath式指定時の処理内容
.bpelファイルのコード・セグメントは、特定の操作に対する設計完了後の定義を示しています。
たとえば、次のコードに示されているXPath式は、trueと評価された場合に(たとえば、inputが20)、assignアクティビティをスキップさせます。
<sequence name="main">
. . .
. . .
<assign name="Assign_1"
bpelx:skipCondition="number(bpws:getVariableData('inputVariable','payload','/client:
process/client:input')) > 10">
<copy>
<from expression="'Assign Block is not Skipped'"/>
<to variable="inputVariable" part="payload"
query="/client:process/client:input"/>
</copy>
</assign>
. . .
. . .
</sequence>
bpelx:skipCondition属性は、スキップ条件とは反対の条件が指定された単一のcase要素が含まれるswitch/case構造化アクティビティに相当します。
次の例は、BPEL 1.1におけるbpelx:skipCondition属性を示しています。myvalueが0の場合、式はtrueと評価され、assignアクティビティがスキップされます。myvalueが10の場合、式はfalseと評価され、assignアクティビティのコピー操作が実行されます。
<assign bpelx:skipCondition="bpws:getVariableData('input',
'payload','/tns:inputMsg/tns:myvalue') <= 0">
<copy>
<from expression="'Value is greater than zero'"/>
<to variable="output" part="payload"
query="/tns:resultMsg/tns:valueResult"/>
</copy>
</assign>
次の例は、switchアクティビティを使用した同等の機能を示しています。
<switch>
<case condition="bpws:getVariableData('input',
'payload','/tns:inputMsg/tns:value') > 0">
<assign>
<copy>
<from expression="'Value is greater than zero'"/>
<to variable="output" part="payload"
query="/tns:resultMsg/tns:valueResult"/>
</copy>
</assign>
</case>
</switch>
BPEL 2.0では、bpelx:skipCondition構文がアクティビティの子要素として表示されます。次のコードは、この規則を使用したassignアクティビティの例を示しています。
<assign name="Assign4">
<bpelx:skipCondition>ora:getNodeValue($inputVariable.payload/client:input) > 5
</bpelx:skipCondition><copy>
<from>"dummy result"</from>
<to>$outputVariable.payload/client:result</to>
</copy></assign>
スキップ条件式には、組込みおよびカスタムのXPath関数も使用できます。次のコードは、いくつかの例を示しています。
<assign bpelx:skipCondition="bpws:getVariableData( 'crOutput', 'payload', '/tns:rating' ) > 0"> <assign bpelx:skipCondition="custom:validateRating()" ... /> <assign xmlns:fn='http://www.w3.org/2005/xpath-functions' bpelx:skipCondition="fn:false()" ... />
XPath式の評価でエラーがスローされると、そのエラーはBPELフォルトにラップされて、アクティビティからスローされます。
イベントは、trueと評価しているスキップ条件式によってバイパスされるアクティビティのBPELインスタンス監査証跡に追加されます。スキップ条件がfalseと評価された(アクティビティが実行されることを意味する)場合も、スキップ条件式が評価されたという事実が、デバッグのために監査証跡に記録されます。
XPathエンジンがブール値の評価に失敗した場合は、bpws:subLanguageFaultがスローされます。これは、switch/case条件がブール値に評価されない場合にスローされるフォルトと同じです。このフォルトも、デバッグのために監査証跡に記録されます。