流程实例
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 }