歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

JBPM流程實例(PI)Process Instance

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved