文章目录
- 一、流程实例的管理接口常见功能:
- 1.启动一个流程(即创建一个流程实例)
- 2.本人发起的流程实例
- 3.本人参与的流程实例
- 4.挂起/激活流程实例
- 5.提前终止流程实例(或又叫撤销流程)
- 6.彻底删除流程实例
- 7.流程图查看
- 8.判断流程实例的状态(运行中/已结束)
- 二、主要接口:
- 2.1. 启动流程:
- 2.2. 提前终止流程实例:
- 2.3. 本人发起的流程实例:
- 2.4. 挂起与激活流程实例:
- 2.5. 生成流程图
- 2.6. 判断流程实例在运行中是否存在
- 2.7. 查询历史实例中流程实例是否存在
一、流程实例的管理接口常见功能:
1.启动一个流程(即创建一个流程实例)
2.本人发起的流程实例
3.本人参与的流程实例
4.挂起/激活流程实例
5.提前终止流程实例(或又叫撤销流程)
6.彻底删除流程实例
7.流程图查看
8.判断流程实例的状态(运行中/已结束)
二、主要接口:
2.1. 启动流程:
public ProcessInstance strartFlow(String processKey, Map<String, Object> paras){//启动前必须开启,这样才能取得流程发起人String userId=paras.get("AuthenticatedUserId").toString();//设置流程实例的发起人是当前用户Authentication.setAuthenticatedUserId(userId);// 取得业务idString busiKey = paras.get("busiKey").toString();if (StringUtils.isEmpty(processKey)){logger.error("错误:流程定义未找到!");}if (null == paras){paras = new HashMap<>();}Deployment deployment = repositoryService.createDeploymentQuery().processDefinitionKey(processKey).singleResult();if (deployment == null) {logger.error("错误:启动流程实例:" + processKey);}ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey, busiKey, paras); // 同时设置业务的id到流程实例中的BUSINESS_KEY_logger.info("成功:启动流程实例:" + processInstance.getProcessDefinitionName() + ":" + processInstance.getId());Authentication.setAuthenticatedUserId(null); // 这个方法最终使用一个ThreadLocal类型的变量进行存储,也就是与当前的线程绑定,所以流程实例启动完毕之后,需要设置为null,防止多线程的时候出问题。return processInstance;
}
2.2. 提前终止流程实例:
public void deleteProcessInstanceById(String processInstanceId){// ""这个参数本来可以写删除原因runtimeService.deleteProcessInstance(processInstanceId,"");
}
2.3. 本人发起的流程实例:
/*** @Description: 我发起的流程实例列表*** @Date: 2019/5/12 20:31* @Param:userId 用户id* @return: List<Zjm_gflowTask> 流程实例列表**/
public List<HistoricProcessInstance> getMyStartProcint(String userId){List<HistoricProcessInstance> list=processEngine.getHistoryService() // 历史相关Service.createHistoricProcessInstanceQuery().startedBy(userId).orderByProcessInstanceStartTime().asc().list();return list;
}
2.4. 挂起与激活流程实例:
/*** @Description: 挂起流程实例* ** @Date: 2019/5/15 1:19 * @Param: processInstanceId 当前流程实例id* @return: 无**/
public void handUpProcessInstance(String processInstanceId){runtimeService.suspendProcessInstanceById(processInstanceId);
}/*** @Description:恢复(唤醒)被挂起的流程实例* ** @Date: 2019/5/15 1:22 * @Param: processInstanceId 流程实例id* @return: 无**/
public void activateProcessInstance(String processInstanceId){runtimeService.activateProcessInstanceById(processInstanceId);
}
2.5. 生成流程图
// 将生成图片放到文件夹下
String deploymentId = "801";
// 获取图片资源的名称
List<String > list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
// 定义图片资源的名称
String resourceName = "";
if (list !=null && list.size()>0){for (String name:list){if (name.indexOf(".png")>=0){resourceName = name;}}
}// 获取图片的输入流
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId,resourceName);
// 将图片生成到D盘的根目录下
File file = new File ("D:/" + resourceName);
// 将输入流的图片写到d盘下
FileUtils.copyInputStreamToFile(in,file);
2.6. 判断流程实例在运行中是否存在
/*** @Description: 判断流程实例在运行中存不存在* ** @Date: 2019/5/26 19:24 * @Param: procInstanceId 流程实例* @return: true表示存在,false表示不存在**/
public Boolean isExistProcIntRunning(String procInstanceId){ProcessInstance pi= runtimeService.createProcessInstanceQuery().processInstanceId(procInstanceId).singleResult();if (pi==null){return false;}else{return true;}
}
2.7. 查询历史实例中流程实例是否存在
/*** @Description: 查询历史实例中流程实例是否存在* ** @Date: 2019/5/26 19:35 * @Param: procInstanceId 流程实例* @return: true表示存在,false表示不存在**/
public Boolean isExistProcHistory(String procInstanceId){HistoricProcessInstance hpi= historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstanceId).singleResult();if (hpi==null){return false;}else{return true;}
}