作者:sunking
在下面的例子里,我們將向您展示如何能給用戶分配任務。因為在jBPM工作流
引擎和組織機構模型之間是分離的,對計算參與者的表達語言將總是被限制的。
因此,你必須指定一個任務處理的實現,包括計算任務參與者。
public void testTaskAssignment() {
/*
這個下面展示的業務是基于hello world業務之上。
這個狀態節點將被任務節點取代。這個任務節點是一個在JPDL中的節點,它表現為一個等待狀態和在業務能繼續被執行之前,生成的任務被完成。
*/
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>"
);
//創建一個業務定義的執行。
ProcessInstance processInstance =
new ProcessInstance(processDefinition);
Token token = processInstance.getRootToken();
/*
我們啟動業務執行,離開在它缺省轉換的啟動狀態上。
*/
token.signal();
/*
這個signal方法將阻止它繼續,直到業務執行進入一個等待狀態。在這個情況下,這是個任務節點。
*/
assertSame(processDefinition.getNode("t"), token.getNode());
/*
當執行到達任務節點,一個任務 ‘change nappy’被創建和
NappyAssignmentHandler被調用確定任務被分配給誰。
NappyAssignmentHandler將返回’papa’.
*/
/*
在真實的環境里,這個任務被在org.jbpm.db.TaskMgmtSession
里面的方法從數據庫中取出。當我們不想包括例子里的持久化復雜性時,我
們將取得第一個業務實例的任務例子。(在測試情節中我們只有一個實例)
*/
TaskInstance taskInstance = (TaskInstance)
processInstance
.getTaskMgmtInstance()
.getTaskInstances()
.iterator().next();
//現在我們檢查是否taskInstance確實被分配給’papa’.
assertEquals("papa", taskInstance.getActorId() );
//現在我們猜想’papa’已經完成了職責,標記這個任務完成了。
taskInstance.end();
//當這些是最后要作的任務時,完成的任務觸發器將延續這個業務實例的執行。
assertSame(processDefinition.getNode("end"), token.getNode());
}
posted on 2007-09-23 16:29
jbpm 閱讀(1178)
評論(0) 編輯 收藏 所屬分類:
jbpm實例