JBPM流程實例(PI)Process Instance http://www.linuxidc.com/Linux/2014-06/102858.htm
JBPM流程實例(PV)Process Variables http://www.linuxidc.com/Linux/2014-06/102859.htm
/**
* 流程實例
* * 啟動流程實例
* * 完成任務
* * 查詢
* * 查詢流程實例
* * 查詢任務
* * 查詢正在執行的任務
* * 查詢所有的正在執行的任務
* * 根據任務的執行人查詢正在執行的任務
* * 根據executionId查詢正在執行的任務
* * 根據piid查詢正在執行的任務
* * 根據pdid查詢正在執行的任務
* * 根據taskid查詢任務 taskService.getTask(String taskId);和其他的查詢不一樣
* * 查詢已經完成的任務
* * 查詢所有的
* * 根據任務的執行人
* * 根據executionID
* * .......
* * 結束流程實例
* @author Administrator
*
*/
public class PITest extends BaseJbpm{
/**
* 涉及到的表
* * JBPM4_EXECUTION
* * 表示當前正在執行的流程實例
* * 字段
* DBID_:主鍵
* ID_:流程實例ID
* ACTIVITYNAME_:當前流程實例活躍的節點
* PROCDEFID_:流程定義ID
* * JBPM4_HIST_PROCINST
* * 表示歷史的流程實例,但是當前正在運行的流程實例也在這裡
* * 字段
* DBID_:主鍵
* ID_:流程實例ID
* START_:整個流程實例的開始時間
* END_:流程實例的結束時間,如果該流程實例為當前正在運行的流程則,該值為空
* STATE:表示流程實例的狀態 如果是正在運行,為active 如果流程實例結束 為ended
* * JBPM4_TASK
* * 表示當前正在執行的任務
* 說明:任務是jbpm流程圖的一個節點
* * 字段
* DBID_:主鍵、任務ID
* NAME_:任務名稱
* ASSIGNEE_:任務的執行人
* * JBPM4_HIST_TASK
* * 表示歷史的任務,但是當前正在執行的任務也在這裡
* * 字段
* STATE_:如果一個任務被完成以後,值為completed
* end_:任務的結束時間有值了
* * JBPM4_HIST_ACTINST
* * 表示歷史的節點
* * 字段
* TYPE_:節點類型
* 說明:
* * 當啟動流程實例的時候,會自動的離開開始節點,流向下一個節點
* * jbpm4_task為臨時表,當當前的任務完成以後,該數據就被刪除了
*/
@Test
public void testStartPIByPDID(){
ProcessInstance pi= processEngine.getExecutionService().startProcessInstanceById("qingjia1-1");
System.out.println(pi.getId());
System.out.println(pi.getState());
}
/**
* 根據pdkey啟動流程實例,是該key下,最高版本
*/
@Test
public void testStartPIByPDKEY(){
processEngine.getExecutionService()
.startProcessInstanceByKey("qingjia1");
}
/**
* 完成任務
*/
@Test
public void testFinishTask(){
processEngine.getTaskService()
.completeTask("60002");
}
/**
* 查詢所有的流程實例
*/
@Test
public void testQueryAllPI(){
List<ProcessInstance> piList = processEngine.getExecutionService()
.createProcessInstanceQuery()
// /.processDefinitionId("")//可以根據pdid查詢流程實例,很多個
.list();
for(ProcessInstance pi:piList){
/**
* 可以查詢piid,pdid,state等
*/
System.err.println();
System.err.print("instanceID"+pi.getId());
System.err.print("\t\t\tinstanceKEY"+pi.getKey());
System.err.print("\t\t\tinstanceNAME"+pi.getName());
System.err.println("\t\t\tinstanceSTATE"+pi.getState());
}
}
/**
* 查詢所有的正在執行的任務
*/
@Test
public void testQueryAllTask(){
List<Task> taskList = processEngine.getTaskService()
.createTaskQuery()
// .processDefinitionId("")
.list();
for(Task task:taskList){
System.out.println("assignee:"+task.getAssignee());
System.out.println("name:"+task.getName());
System.out.println("createtime:"+task.getCreateTime());
}
}
/**
* 可以根據任務的執行人查詢當前正在執行的任務
* 可以根據pdid查詢當前正在執行的任務
*/
@Test
public void testQueryTaskByPDID(){
List<Task> taskList = processEngine.getTaskService()
.createTaskQuery()
.processDefinitionId("qingjia1-4")
.list();
System.out.println(taskList.size());
}
/**
* Execution
* * 如果不存在並發的情況,那麼exection和process instance是一樣的
* * 如果存在並發的情況,execution代表分支,process instance代表主線
* * 根據executionID查詢任務,有唯一的一個
*/
@Test
public void testQueryTaskByTaskID(){
Task task = processEngine.getTaskService()
.getTask("60002");
System.out.println(task.getName());
}
/**
* 查詢已經完成的所有的任務
*/
@Test
public void testQueryAllHistTask(){
List<HistoryTask> histTaskList = processEngine.getHistoryService()
.createHistoryTaskQuery()
//.assignee("") 可以根據任務的執行人查詢已經完成的任務
//.executionId("")可以根據executionID查詢已經完成的任務
.state("completed")
.list();
for(HistoryTask histTask:histTaskList){
System.out.println(histTask.getEndTime());
System.out.println(histTask.getAssignee());
}
}
/**
* 直接結束流程實例
*/
@Test
public void testEndPI(){
processEngine.getExecutionService()
.endProcessInstance("qingjia1.20001", "error");
}
/**
* 根據 piid查詢流程實例,如果查詢出來的結果為null,說明該流程實例已經結束了
*/
@Test
public void testIsEndPI(){
ProcessInstance pi = processEngine.getExecutionService()
.createProcessInstanceQuery()
.processInstanceId("qingjia1.60001")
.uniqueResult();
System.out.println(pi);//如果該值為null,說明該流程實例已經結束了
}
}
JBPM4.4部署在Tomcat6以上的版本jar包沖突 http://www.linuxidc.com/Linux/2014-04/99476.htm
JBPM 的詳細介紹:請點這裡
JBPM 的下載地址:請點這裡