1 package com.kite.pi; 2 3 import java.util.List; 4 5 import org.jbpm.api.Configuration; 6 import org.jbpm.api.ProcessInstance; 7 import org.jbpm.api.history.HistoryTask; 8 import org.jbpm.api.task.Task; 9 import org.junit.Test; 10 /** 11 * 流程實例 12 * * 啓動流程實例 13 * * 完成任務 14 * * 查詢 15 * * 查詢流程實例 16 * * 查詢任務 17 * * 查詢正在執行的任務 18 * * 查詢全部政治啊執行的任務 19 * * 根據任務的執行人查詢正在執行的任務 20 * * 根據executionid查詢正在執行的任務 21 * * 根據piid查詢正在執行的任務 22 * * 根據pdid查詢正在執行的任務 23 * * 根據taskid查詢任務 taskService.getTask(string taskid) 和其餘的查詢不同 24 * * 查詢已經完成的任務 25 * * 查詢全部的 26 * * 根據任務的執行人 27 * * 根據executionid 28 * * .... 29 * * 結束流程實例 30 * @author admin 31 * 32 */ 33 public class PITest { 34 35 /** 36 * 涉及到的表 37 * JBPM4_EXECUTION 38 * * 表示當前正在執行的流程實例 39 * * 字段 40 * DBID_:主鍵 41 * ID_:流程實例ID 42 * ACTIVITYNAME_:當前流程實例活躍的節點 43 * PROCDEFID_:流程定義ID 44 * JBPM4_HIST_PROCINST 45 * * 表示歷史的流程實例,可是當前正在運行的流程實例也在這裏 46 * * 字段 47 * DBID_:主鍵 48 * ID_:流程實例ID 49 * START_:整個流程實例的開始時間 50 * END_:流程實例的結束時間,若是該流程實例爲當前正在運行的流程則,該值爲空 51 * STATE:表示流程實例的狀態 若是是正在運行,爲active 若是流程實例結束 爲ended 52 * JBPM4_TASK 53 * * 表示當前正在執行的任務 54 * 說明:任務是jbpm流程圖的一個節點 55 * * 字段 56 * DBID_:主鍵、任務ID 57 * NAME_:任務名稱 58 * ASSIGNEE_:任務的執行人 59 * JBPM4_HIST_TASK 60 * * 表示歷史的任務,可是當前正在執行的任務也在這裏 61 * * 字段 62 * STATE_:若是一個任務被完成之後,值爲completed 63 * end_:任務的結束時間有值了 64 * JBPM4_HIST_ACTINST 65 * * 表示歷史的節點 66 * * 字段 67 * TYPE_:節點類型 68 * ------------------------------------------------------------------------------ 69 * 說明: 70 * * 當啓動流程實例的時候,會自動的離開開始節點,流向下一個節點 71 * * jbpm4_task爲臨時表,噹噹前的任務完成之後,該數據就被刪除了 72 */ 73 74 /** 75 * 根據pdid啓動流程實例 76 */ 77 @Test 78 public void testStartPIByPDID(){ 79 ProcessInstance processInstance = Configuration.getProcessEngine().getExecutionService() 80 .startProcessInstanceById("qingjia1-1"); 81 System.out.println(processInstance.getId()); 82 System.out.println(processInstance.getState()); 83 } 84 85 /** 86 * 根據pdkey啓動流程實例,是該key下,最高版本 87 */ 88 @Test 89 public void testStartPIByPDKEY(){ 90 ProcessInstance processInstance = Configuration.getProcessEngine().getExecutionService() 91 .startProcessInstanceByKey("qingjia1"); 92 System.out.println(processInstance.getId()); 93 System.out.println(processInstance.getState()); 94 } 95 96 /** 97 * 完成任務 當完成任務執行完成之後會走向下一個任務流程 98 */ 99 @Test 100 public void testFinishTask(){ 101 Configuration.getProcessEngine().getTaskService() 102 .completeTask("60001"); 103 } 104 105 106 /** 107 * 查詢全部的流程實例 108 */ 109 @Test 110 public void testQueryAllPI(){ 111 List<ProcessInstance> pIList = Configuration.getProcessEngine().getExecutionService() 112 .createProcessInstanceQuery().list(); 113 114 for(ProcessInstance processInstance : pIList){ 115 System.out.print(processInstance.getId() + ","); 116 System.out.println(processInstance.getState() ); 117 } 118 } 119 120 /** 121 * 查詢正在執行的任務 122 */ 123 @Test 124 public void testQueryAllTask(){ 125 List<Task> taskList = Configuration.getProcessEngine().getTaskService() 126 .createTaskQuery() 127 .list(); 128 for(Task task : taskList){ 129 System.out.println("執行人:" + task.getAssignee()); 130 System.out.println("當前執行任務的名稱:" + task.getName()); 131 System.out.println("任務建立時間:" + task.getCreateTime()); 132 } 133 } 134 135 /** 136 * 能夠根據任務的執行人查詢當前正在執行的任務 137 * 能夠根據pdid查詢當前正在執行的任務 138 */ 139 @Test 140 public void testQueryTaskPDID(){ 141 /*Task task = Configuration.getProcessEngine().getTaskService() 142 .createTaskQuery() 143 .assignee("李四").uniqueResult(); 144 */ 145 List<Task> taskList = Configuration.getProcessEngine().getTaskService() 146 .createTaskQuery().processDefinitionId("qingjia-1").list(); 147 148 149 for(Task task : taskList){ 150 System.out.println("執行人:" + task.getAssignee()); 151 System.out.println("當前執行任務的名稱:" + task.getName()); 152 System.out.println("任務建立時間:" + task.getCreateTime()); 153 154 } 155 } 156 /** 157 * excution 158 * *若是存在併發的狀況,那麼execution和process instance 是同樣的 159 * *若是存在併發的狀況,execution表明分支,processinstance表明主線 160 * *根據executionid查詢任務,有惟一的一個 161 */ 162 /** 163 * 根據taskid查詢任務 164 */ 165 @Test 166 public void testQueryTaskByID(){ 167 Task task = Configuration.getProcessEngine() 168 .getTaskService() 169 .getTask("60002"); 170 171 System.out.println(task.getId()); 172 System.out.println("執行人:" + task.getAssignee()); 173 System.out.println("當前執行任務的名稱:" + task.getName()); 174 System.out.println("任務建立時間:" + task.getCreateTime()); 175 176 } 177 178 /** 179 * 查詢已經完成的全部任務 180 */ 181 @Test 182 public void testQueryAllHistTask(){ 183 List<HistoryTask> historyTaskLisTasks = Configuration.getProcessEngine() 184 .getHistoryService() 185 .createHistoryTaskQuery() 186 //.executionId("") 能夠根據 executionid查詢已經完成的任務 187 //.assignee("") 能夠根據執行人進行查詢 188 .state("completed") //根據狀態進行查詢 189 .list(); 190 191 for(HistoryTask historyTask : historyTaskLisTasks){ 192 System.out.println(historyTask.getId()); 193 System.out.println(historyTask.getEndTime()); 194 } 195 } 196 197 /** 198 * 直接結束實例 199 */ 200 @Test 201 public void testEndPI(){ 202 Configuration.getProcessEngine().getExecutionService() 203 .endProcessInstance("qingjia.30001", "error"); 204 } 205 }