1.流程定义
流程定义是在部署一个流程之后生成,其中包含流程部署的id、流程定义的id、流程定义的key等内容,其中流程定义的id生成策略为:
(流程定义的key) : (当前版本号) : (随机值)
例如:Business:1:4
流程不支持修改操作,其中所有的修改操作使用更新流程来完成,这样可以保证有旧的流程在运行时不会受到影响,下次启动时会默认启动最新的流程。
(1)查询流程定义:
RepositoryService repositoryService = engine.getRepositoryService();
//查询流程定义,可以排序,查询数量,分页等
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
.orderByDeploymentId().asc().list();
ProcessDefinition processDefinition = null;
if(list!=null && list.size()>0){
processDefinition = list.get(0);
System.out.println("流程组织机构: "+processDefinition.getCategory());
System.out.println("流程部署ID: "+processDefinition.getDeploymentId());
System.out.println("流程描述: "+processDefinition.getDescription());
System.out.println("流程图片文件: "+processDefinition.getDiagramResourceName());
System.out.println("流程定义ID: "+processDefinition.getId());
System.out.println("流程定义key "+processDefinition.getKey());
System.out.println("流程设计名称: "+processDefinition.getName());
System.out.println("流程定义文件: "+processDefinition.getResourceName());
System.out.println("流程所有人ID: "+processDefinition.getTenantId());
System.out.println("流程版本: "+processDefinition.getVersion());
}
(2)查询最新版本:
a) 之前版本查询最新版本时可以使用
RepositoryService repositoryService = engine.getRepositoryService();
//将流程按照版本的升序排列得到一个所有流程的集合
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
//使用map集合存储得到的集合,同时将所有低版本的过滤
Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
if(list!=null && list.size()>0){
for (ProcessDefinition pd : list)
{
//新版本数据将会替代就版本数据
map.put(pd.getKey(), pd);
}
}
//循环遍历输出
for (ProcessDefinition processDefinition : map.values())
{
System.out.println("流程组织机构: "+processDefinition.getCategory());
System.out.println("流程部署ID: "+processDefinition.getDeploymentId());
System.out.println("流程描述: "+processDefinition.getDescription());
System.out.println("流程图片文件: "+processDefinition.getDiagramResourceName());
System.out.println("流程定义ID: "+processDefinition.getId());
System.out.println("流程定义key "+processDefinition.getKey());
System.out.println("流程设计名称: "+processDefinition.getName());
System.out.println("流程定义文件: "+processDefinition.getResourceName());
System.out.println("流程所有人ID: "+processDefinition.getTenantId());
System.out.println("流程版本: "+processDefinition.getVersion());
System.out.println("#############################");
}
b) 当前版本提供了一个便捷的API,可以直接查询最新版本
repositoryService.createProcessDefinitionQuery().latestVersion().singleResult();
(3)删除流程定义:
删除流程定义需要使用流程部署id删除部署的流程,流程定义便会相应删除。
RepositoryService repositoryService = engine.getRepositoryService();
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
.orderByDeploymentId().asc().list();
ProcessDefinition processDefinition = null;
if(list!=null && list.size()>0){
processDefinition = list.get(0);
String id = processDefinition.getDeploymentId();
// 级联删除流程,不论是否启动,都会删除
repositoryService.deleteDeployment(id, true);
}
(4)挂起和激活流程:
当前API提供了一个挂起流程的操作,如果当前流程不使用的话可以将之挂起,使之不能启动。
RepositoryService repositoryService = engine.getRepositoryService();
//挂起流程定义,挂起后不能启动
//repositoryService.suspendProcessDefinitionByKey("SF");
//激活流程定义,激活后可以启动
repositoryService.activateProcessDefinitionByKey("SF");
2.流程实例
在流程启动之后会生成相应的流程实例记录,当前流程实例表示此流程正在运行,如果流程结束,流程实例相应删除,同时历史记录会更新。
(1)启动流程
//流程运行服务
RuntimeService runtimeService = engine.getRuntimeService();
//1.使用流程定义的id启动流程实例,返回值为流程实例对象
//ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
//2.使用流程定义的key启动流程实例,推荐使用
//同一个流程key相同,不同的是版本,使用key启动可以默认启动最新版本的流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(key);
//流程实例中包含的信息
System.out.println("当前活动节点 "+processInstance.getActivityId());
System.out.println("关联业务键: "+processInstance.getBusinessKey());
System.out.println("流程部署id: "+processInstance.getDeploymentId());
System.out.println("流程描述: "+processInstance.getDescription());
System.out.println("流程实例id: "+processInstance.getId());
System.out.println("流程实例名称: "+processInstance.getName());
System.out.println("父流程id: "+processInstance.getParentId());
System.out.println("流程定义id: "+processInstance.getProcessDefinitionId());
System.out.println("流程定义key: "+processInstance.getProcessDefinitionKey());
System.out.println("流程定义名称: "+processInstance.getProcessDefinitionName());
System.out.println("流程实例id: "+processInstance.getProcessInstanceId());
System.out.println("流程所属人id: "+processInstance.getTenantId());
System.out.println("流程定义版本: "+proces