またまた平田です。
前回はjBPMでタスクを動的に生成しましたが、今回はフロー実行中にタスクを追加する方法です。
例えば、書類を回覧中に回覧者の一人が「この誤植、マジでウケるんですけど。奴にも見せとこ。」と思いたち、回覧者を追加するケースです。
JPDLのプロセス定義は前回と同じです。Javaの実装は次の通りです。
/**
* 開始
* ↓
* 作成 ... 5人に回覧する
* ↓
* 回覧 ... 3人が確認する
* 更に1人に回覧する
* 3人が確認する
* ↓
* 終了
*/
public void test回覧中に_回覧する_タスクを追加できる() {
do開始();
do作成(stakeholders);
{
assertNode("回覧");
// 5件のうち3件のタスクを消化する
endTasks(3);
{// 回覧中に回覧者を追加する
Task confirmTask = ((TaskNode) token.getNode()).getTask("確認する");
TaskInstance confirm = proc.getTaskMgmtInstance().createTaskInstance(confirmTask, token);
confirm.setActorId("もり");
assertEquals("5件のうち3件のタスクを消化し、1件追加したから3件残のはず",
3, unfinishedTasks().size());
}
// 残り3件のタスクを消化する
endTasks(3);
Collection confirms = allTasks("確認する");
for (TaskInstance each : confirms) {
assertTrue("「確認する」タスクは全て完了しているはず", each.hasEnded());
}
}
do終了();
}これにて、もり君も回覧できるようになりました。