説明
<branch> 要素の condition 式が真の値の場合、実行フローが即座に変更されます。<branch> の label 属性に値として名前が指定されている <label> 要素に制御が渡されます。
以下の BPL 例では、condition 式が真の場合、condition 値が TraceSkipped である <branch> から、name 値が TraceSkipped である <label> に直接制御が渡されます。この間にある <trace> 要素は無視されます。
<branch condition="myVar='1'" label="TraceSkipped" />
<trace value="Ignore me when myVar is 1..." />
<label name="TraceSkipped" />
<branch> の condition 式が偽の場合は、<branch> の次に記述されている BPL 文に制御が渡されます。つまり、上記の例では <trace> に制御が移ります。
ジャンプ先の <label> は、これを参照する <branch> と同じスコープにあることが条件となります。例えば、以下のようになっているとします。
-
<flow> 内の各 <sequence> 要素には、それぞれ異なる <label> スコープが割り当てられます。BPL 実行エンジンでは、現在の <sequence> コンテナの外部にある <label> への <branch> は阻止されます。
-
実行時に実行フローを制御するその他の BPL コンテナ要素についても、同様の制約が適用されます。各コンテナには、それぞれ異なる <label> スコープが割り当てられます。
これらの制約に加え、各 <label> name 値は、現在のスコープ内だけでなく、BPL ビジネス・プロセス全体で一意にする必要があります。
Caution:
すべてのプログラミング言語に言えることですが、BPL 分岐メカニズムの使用時には注意が必要です。BPL エディタは、無限ループや無効な分岐といった基本的なプログラミング・エラーを防ぐことができません。