マルチインスタンスタスク(続き)

まずはじめに、前回の内容に誤りがあったので訂正します。
マルチインスタンスタスクにおいて、「いくつのインスタンスが生成されるか」という指定は、"loopCardinality" 属性または "loopDataInput" 属性で指定されます。

  • "loopCardinality"属性が使われる場合は、この属性で指定されている値(計算式の結果)に基づいて、インスタンスが生成されます。5の場合は、5つインスタンスが生成されます。
  • "loopDataInput"属性が使われる場合は、この属性で指定された入力データ(コレクションデータであることが前提)の要素の数だけ、インスタンスが生成されます。

いずれの場合においても、評価が行われるのは最初の1度だけで、その時に生成されるインスタンス数が決定されます。


続いて「いつインスタンスが終了するか」に言及します。どこかのタイミングでマルチインスタンスタスク全体を終了させて、トークンを次のノードに向けて動かす必要があります。それはどのタイミングでしょうか。
これは "completionCondition" 属性によって決定されます。マルチインスタンスタスク内のインスタンス1つ1つが終了する度ごとに、この属性の値が評価されます。
評価された結果、true になるとマルチインスタンスタスクは終了します。この時点で終了していないマルチインスタンスタスク内のインスタンスについては、キャンセルされます。
これによって「最初の1つが終了したら、他はすべてキャンセルする」「全部が終了するまで、全体も終了しない」といった終了条件や、もっと複雑な終了条件を表現することができるようになっています。


実は Questetra BPM Suite の「チームタスク」は、この「マルチインスタンスタスク」の特殊な形といえます。
内部実装としてインスタンスは1つしか生成されていないのですが、

  • loopCardinality は 担当者の数
  • completionCondition は 1つインスタンスが終了したら、全体も終了

という形になっているといえます。