0.总结¶
1.Execution 执行对象¶
按流程定义的规则执行一次的过程
对应的表:
act_ru_execution, 正在执行的信息act_hi_procinst, 已经执行完成的历史流程实例信息act_hi_actinst, 存放历史所有完成的活动
2.ProcessInstance 流程实例¶
特指流程开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有一个.
注意:
- 如果是单例流程 , 执行对象id就是流程实例id
- 如果一个流程有分支和聚合 , 那么执行对象id和流程实例id就不同
- 一个流程中只有一个流程实例 , 执行对象会有多个
3.Task 任务¶
执行到某个任务环节时生成的人物信息
对应的表:
act_run_task, 正在执行的任务信息act_hi_taskinst, 已经完成的历史任务信息
4. 相关ID总结¶
- 部署id
act_re_deployment-id- 流程定义id
act_re_procdef-id- 流程实例id
act_ru_execution-id- 执行实例id
act_ru_task-execution_id- 任务id
act_ru_task-id
1.启动流程实例¶
processDefinitionId流程定义IDprocessDefinitionKey流程定义KEYvariables流程变量businesskey业务表单表示
1. 根据流程定义ID启动¶
runtimeService.startProcessInstanceById(processDefinitionId);
runtimeService.startProcessInstanceById(processDefinitionId, variables);
runtimeService.startProcessInstanceById(processDefinitionId, businessKey);
runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);
2. 根据流程定义KEY启动¶
runtimeService.startProcessInstanceByKey(processDefinitionKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables)
3.常用的方法¶
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey);
runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
4.演示¶
String processDefinitionKey ="level";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程启动成功...");
System.out.println("流程执行ID="+processInstance.getId());
System.out.println("流程定义ID="+processInstance.getProcessDefinitionId());
System.out.println("流程实例ID="+processInstance.getProcessInstanceId());
结果
流程启动成功...
流程执行ID=2501
流程定义ID=level:1:4
流程实例ID=2501
- 当流程同时处理两条线路时,流程执行id和流程实例id就会不同
2.查询我的个人任务¶
/**
* 查询我的个人任务
*/
@Test
public void queryMyTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee = "张三";
List<Task> list = taskService.createTaskQuery()
// 条件
.taskAssignee(assignee)
// .deploymentId(deploymentId) //根据部署id
// .deploymentIdIn(deploymentIds) //根据多个部署id (少用)
// .processDefinitionId(processDefinitionId) //根据流程定义id
// .processDefinitionKey(processDefinitionKey) //根据流程定义key
// .processDefinitionName(processDefinitionName) //根据流程name
// .processInstanceId(processInstanceId) //根据流程实例id
// .processInstanceBusinessKey(processInstanceBusinessKey) //根据流程业务key
// .processVariableValueEquals(variableValue) // 根据唯一的vars
// .processVariableValueGreaterThan(name, value) //根据指定的vars
// 排序
.orderByTaskCreateTime().asc()
// 结果集
.list();
// .listPage(firstResult, maxResults);
// .count();
// .singleResult();
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任务id=" + task.getId());
System.out.println("任务办理人=" + task.getAssignee());
System.out.println("任务执行id=" + task.getExecutionId());
System.out.println("任务实例id=" + task.getProcessInstanceId());
System.out.println("任务名称=" + task.getName());
System.out.println("流程定义id=" + task.getProcessDefinitionId());
System.out.println("任务创建时间=" + task.getCreateTime());
}
}
}
结果
任务id=5004
任务办理人=张三
任务执行id=5001
任务实例id=5001
任务名称=提交申请
流程定义id=level:1:4
任务创建时间=Sat May 18 16:29:34 CST 2019
3.办理任务¶
/**
* 办理流程
*/
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId = "5004";
// 根据任务id
taskService.complete(taskId);
// 根据任务id完成并指定流程变量
// taskService.complete(taskId, variables);
System.out.println("任务完成");
}
4.查询流程状态¶
/**
* 判断流程是否结束
*
* 可以更新业务表里的状态
*/
@Test
public void isComplete() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
// 已知流程实例id
String processInstanceId = "5004";
ProcessInstance singleResult = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId)
.singleResult();
if (singleResult == null) {
System.out.println("流程__结束");
} else {
System.out.println("流程__正在执行");
}
// 已知任务id
String taskId = "7502";
TaskService taskService = this.processEngine.getTaskService();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String instanceId = task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId)
.singleResult();
if (processInstance == null) {
System.out.println("流程__结束");
} else {
System.out.println("流程__正在执行");
}
}
5.查询历史任务¶
/**
* 查询历史任务
*/
@Test
public void queryHistoryTask() {
HistoryService historyService = this.processEngine.getHistoryService();
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
if (list!=null&&list.size()>0) {
for (HistoricTaskInstance hi : list) {
System.out.println("任务id="+hi.getId());
}
}
}
6.查询历史流程实例¶
/**
* 查询历史流程实例
*/
@Test
public void queryHistoryProcess() {
HistoryService historyService = this.processEngine.getHistoryService();
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
if (list != null && list.size() > 0) {
for (HistoricProcessInstance hi : list) {
System.out.println("任务id=" + hi.getId());
}
}
}