jbpm学習ノート(九)task活動のコースの概念
ミッションコースの概念:実際の業務応用において、よくこのような場面があります.流れの定義における複数のタスクは同じグループのユーザに割り当てられますか?この「同じグループのユーザー」を統一して「一つのコース」と定義することができます.同じ流れの定義の中のどのタスクもコースを適用できます.同じコースに属する任務はこのコースのすべてのユーザーに割り当てられます.
コースの概念は流れの定義である「グローバルユーザグループ」とも理解できます.場合によっては、コースは後の身分認証コンポーネントの中のパーミッションの役割と似ているかもしれませんが、実際には同じものではありません.
まず簡単な例を紹介します.jpdlは以下の通りです.
注意してください.findGroupTaskを使うとtaskが見られます.findPersonalTassでは出られません.
taskService.take Task(tasky);
この任務を受けてafeiを任務の分配者にし、同時にコース「check」も変化します.afeiはこの流れの例で割り当て者に固化されます.
次に、afeiは任務を達成できます.
taskyService.com mpleteTask(tasky)
このタスクを完了すると、フロー例は次のタスク「repeat CheckOrder」に流れます.この任務も前のコースを引用しました.ですから、任務は直接afeiに割り当てられます.下記のコードで検証できます.
次の、タスク変数!
コースの概念は流れの定義である「グローバルユーザグループ」とも理解できます.場合によっては、コースは後の身分認証コンポーネントの中のパーミッションの役割と似ているかもしれませんが、実際には同じものではありません.
まず簡単な例を紹介します.jpdlは以下の通りです.
<?xml version="1.0" encoding="UTF-8"?>
<process name="taskSwimlane" xmlns="http://jbpm.org/4.4/jpdl">
<!-- , -->
<swimlane name="checkManagers" candidate-groups="order_managers" />
<start>
<transition to="checkOrder" />
</start>
<!-- 2 , -->
<task name="checkOrder" swimlane="checkManagers">
<transition to="repeatCheckOrder" />
</task>
<task name="repeatCheckOrder" swimlane="checkManagers">
<transition to="end" />
</task>
<end name="end" />
</process>
上で定義されたコース「check」はユーザーグループのmanagersを引用しています.プロセスが実行される前に、このユーザグループは作成され、アイデンティティ認証サービスIdentityServiceを利用する必要があります.identityService.createGroup("order_managers");
// afei managers
identityService.createUser("afei", "du", "yunfei");
identityService.createMembership("afei", "order_managers");
は、開始フロー例の後、ユーザafeiがタスクcheckOrderの唯一の候補となる.まず、afeiにこの任務を受けさせます.注意してください.findGroupTaskを使うとtaskが見られます.findPersonalTassでは出られません.
taskService.take Task(tasky);
この任務を受けてafeiを任務の分配者にし、同時にコース「check」も変化します.afeiはこの流れの例で割り当て者に固化されます.
次に、afeiは任務を達成できます.
taskyService.com mpleteTask(tasky)
このタスクを完了すると、フロー例は次のタスク「repeat CheckOrder」に流れます.この任務も前のコースを引用しました.ですから、任務は直接afeiに割り当てられます.下記のコードで検証できます.
tasks = taskService.findPersonalTasks("afei"); // afei
System.out.println("tasks.size(): " + tasks.size());
task = tasks.get(0);
//
assertEquals("repeatCheckOrder", task.getName());
assertEquals("afei", task.getAssignee());
// taskService.takeTask(task.getId(), "afei");
taskService.completeTask(task.getId());
注意:もしこの時take Taskも間違っていたら、afeiにtakeされました.次の、タスク変数!