作者:sunking
在下面的例子里,我們將向您展示如何能給用戶分配任務。因為在jBPM工作流
引擎和組織機構(gòu)模型之間是分離的,對計算參與者的表達語言將總是被限制的。
因此,你必須指定一個任務處理的實現(xiàn),包括計算任務參與者。
public void testTaskAssignment() {
/*
這個下面展示的業(yè)務是基于hello world業(yè)務之上。
這個狀態(tài)節(jié)點將被任務節(jié)點取代。這個任務節(jié)點是一個在JPDL中的節(jié)點,它表現(xiàn)為一個等待狀態(tài)和在業(yè)務能繼續(xù)被執(zhí)行之前,生成的任務被完成。
*/
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition name='the baby process'>" +
" <start-state>" +
" <transition name='baby cries' to='t' />" +
" </start-state>" +
" <task-node name='t'>" +
" <task name='change nappy'>" +
" <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />" +
" </task>" +
" <transition to='end' />" +
" </task-node>" +
" <end-state name='end' />" +
"</process-definition>"
);
//創(chuàng)建一個業(yè)務定義的執(zhí)行。
ProcessInstance processInstance =
new ProcessInstance(processDefinition);
Token token = processInstance.getRootToken();
/*
我們啟動業(yè)務執(zhí)行,離開在它缺省轉(zhuǎn)換的啟動狀態(tài)上。
*/
token.signal();
/*
這個signal方法將阻止它繼續(xù),直到業(yè)務執(zhí)行進入一個等待狀態(tài)。在這個情況下,這是個任務節(jié)點。
*/
assertSame(processDefinition.getNode("t"), token.getNode());
/*
當執(zhí)行到達任務節(jié)點,一個任務 ‘change nappy’被創(chuàng)建和
NappyAssignmentHandler被調(diào)用確定任務被分配給誰。
NappyAssignmentHandler將返回’papa’.
*/
/*
在真實的環(huán)境里,這個任務被在org.jbpm.db.TaskMgmtSession
里面的方法從數(shù)據(jù)庫中取出。當我們不想包括例子里的持久化復雜性時,我
們將取得第一個業(yè)務實例的任務例子。(在測試情節(jié)中我們只有一個實例)
*/
TaskInstance taskInstance = (TaskInstance)
processInstance
.getTaskMgmtInstance()
.getTaskInstances()
.iterator().next();
//現(xiàn)在我們檢查是否taskInstance確實被分配給’papa’.
assertEquals("papa", taskInstance.getActorId() );
//現(xiàn)在我們猜想’papa’已經(jīng)完成了職責,標記這個任務完成了。
taskInstance.end();
//當這些是最后要作的任務時,完成的任務觸發(fā)器將延續(xù)這個業(yè)務實例的執(zhí)行。
assertSame(processDefinition.getNode("end"), token.getNode());
}