1.开启实例-ById
Date nowTime = new Date();
variables.put("startTime", nowTime);
// 设置流程发起人
identityService.setAuthenticatedUserId("initiator");
ProcessInstance processInstance = runtimeService
.startProcessInstanceById(processDefinitionId, businessKey, variables);
如果通过processDefinitionId
来启动一个流程,那么代表启动流程定义的某一个版本,如果通过processDefinitionKey
来启动流程,那么将会始终启动流程定义的最新版本
2.重启实例
runtimeService.restartProcessInstances(processDefinitionId)
// .startBeforeActivity("activity")
.processInstanceIds(instanceId)
.execute();
3.暂停实例
runtimeService.suspendProcessInstanceById(processInstanceId);
4.实例列表
// 查询流程定义
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
// 遍历查询结果
PageHelper.startPage(currentPage, pageSize);
List<ProcessInstance> list = processInstanceQuery.processDefinitionId(processDefinitionId)
.orderByProcessInstanceId().desc().list();
注意:PageHelper不起作用
5.获取 variable
List<VariableInstance> lists = runtimeService.createVariableInstanceQuery()
.processInstanceIdIn(instanceIds)
.orderByVariableName()
.desc()
.list();
6.获取子实例
List<ProcessInstance> lists = runtimeService.createProcessInstanceQuery()
.superProcessInstanceId(superProcessInstanceId)
.list();
7.从任意节点启动实例
public void createProcessInstanceByKey() {
String processInstanceByKey = "leave";
String activityId = "Activity_1r8r4jn";
ProcessInstantiationBuilder processInstantiationBuilder = runtimeService.createProcessInstanceByKey(processInstanceByKey);
ProcessInstance processInstance = processInstantiationBuilder.businessKey("001")
//某节点之前开始
.startBeforeActivity(activityId)
.execute();
System.out.println(processInstance.getId() + "," + processInstance.getBusinessKey() + "," + processInstance.getProcessDefinitionId());
}
8.如何检索活动的实例树?
ActivityInstance rootActivityInstance = runtimeService.getActivityInstance(pi.getProcessInstanceId());
processInstanceId
和executionId
Execution
和ProcessInstance
都用于获取当前流程实例的相关信息。
当流程中没有分支时,Execution等同于ProcessInstance,甚至连ID也相同;
当流程中存在分支(fork, parallel gateway),则在分支口会形成子Execution,在下一个gateway才会合并(joined)
新启动的流程,观察ACT_RU_EXECUTION表中:
PARENT_ID_字段有值为执行实例,流程实例为NULL;
ACT_ID_字段有值为执行实例,流程实例为NULL;
IS_ACTIVE_字段为0为流程实例,为1为执行实例。
网友评论