activiti流程图的部署、删除以及流程启动
文章目录
前言`
上一章节展示了spring boot集成activiti以及activiti-modeler及项目基础配置信息,接下来介绍activiti-modeler流程图的一些基本操作
一、activiti-modeler画流程图注意事项
可以直接拖拉左侧所需用到的事件来画流程图
人工任务可以输入用户组或者用户唯一值用来分发任务给用户、也可以直接输入assignee直接分发任务给某一角色或某人。因为activiti查询任务时只有assignee为空时才会去表ACT_RU_IDENTITYLINK中查询这里填入的Candidate users和Candidate groups
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、流程部署
1.部署流程
因为activiti-modeler画图数据会转换成bytes形式存在act_GE_BYTEARRAY这个表中
代码如下(示例):
public String deploy(String processName, String modelId) throws IOException {
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取模型
Model modelData = repositoryService.getModel(modelId);
byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());
if (bytes == null) {
return "模型数据为空,请先设计流程并成功保存,再进行发布。";
}
JsonNode modelNode = new ObjectMapper().readTree(bytes);
BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
if (model.getProcesses().size() == 0) {
return "数据模型不符要求,请至少设计一条主线流程。";
}
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
if (StringUtils.isNotEmpty(modelData.getDeploymentId())) {
deployModeler.deployModelDao.updatemodel(modelData.getDeploymentId(),new String(bpmnBytes, "UTF-8"));
//由于楼主项目与activiti-modeler分开的所以采用接口来清除activiti缓存,这样不用重启就可以生效
String url =******
JSONObject jsonParam = new JSONObject();
String json = doPostJson(url, jsonParam);
return "success";
} else {
//发布流程
processName = modelData.getName() + ".bpmn20.xml";
Deployment deployment = repositoryService.createDeployment()
.name(modelData.getName())
.addString(processName, new String(bpmnBytes, "UTF-8"))
.deploy();
modelData.setDeploymentId(deployment.getId());
repositoryService.saveModel(modelData);
return "success";
}
}
2.启动流程
businessKey是唯一值这样能跟流程所对应的外部表单建立关联关系。
启动流程后调用审批方法因为,流程启动后只会到第一节点但是实际业务常常是第一节点人员发起,所以得走过第一节点。
代码如下(示例):
//根据流程key和businessKey启动项目
//设置流程发起人 Authentication.setAuthenticatedUserId(userCode);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(flowKey, businessKey);
if (ObjectUtils.isNotEmpty(processInstance) && StringUtils.isNotEmpty(processInstance.getProcessInstanceId())) {
//根据实例查询下一步任务
Task list = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
taskService.setAssignee(list.getId(), userCode);
//taskService.addCandidateUser(list.getId(), userCode);
//流程开始后需要默认审批第一节点
ActApproveInfo actApproveInfo1 = approveByBusinesskeyUserId(businessKey, userCode, "", lczt,true);
2.删除activiti-modeler定义的一个流程
删除一个model
@Autowired
RepositoryService rep;
rep.deleteDeployment(deployid, true);
删除正发生或历史流程
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
if (ObjectUtils.isNotEmpty(processInstance)) {
//结束流程
runtimeService.deleteProcessInstance(processInstance.getProcessInstanceId(), "");
processEngine.getHistoryService().deleteHistoricProcessInstance(processInstance.getProcessInstanceId());
result.setStatus(ActivitiConstants.DELETE_SUCCESS);
return result;
} else {
HistoricProcessInstance historicProcessInstance = processEngine.getHistoryService().createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
processEngine.getHistoryService().deleteHistoricProcessInstance(((HistoricProcessInstanceEntityImpl) historicProcessInstance).getProcessInstanceId());
result.setStatus(ActivitiConstants.DELETE_SUCCESS);
return result;
}
查询所有已部署流程
List<ProcessDefinition> list = rep.createProcessDefinitionQuery().listPage(firstrow, rowCount);
总结
抱歉、语言功底不行,有问题可以私信我