Activiti5 获取当前流程实例运行图
Posted 在奋斗的大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti5 获取当前流程实例运行图相关的知识,希望对你有一定的参考价值。
前提条件:
- SpringBoot + Activiti5.22
- 流程定义、流程实例运行
Controller获取流程实例运行图
@GetMapping("png/taskId")
public void currentProcessInstanceImage(@PathVariable("taskId") String taskId, HttpServletResponse response) throws IOException
int index;
InputStream inputStream = this.currentProcessInstanceImage(taskId);
OutputStream out = response.getOutputStream();
response.setContentType("image/png");
byte[] bytes = new byte[1024];
while ((index = inputStream.read(bytes)) != -1)
out.write(bytes, 0, index);
out.flush();
out.close();
inputStream.close();
/**
* 获取当前任务流程图
*
* @param taskId
* @return
*/
public InputStream currentProcessInstanceImage(String taskId)
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(task.getProcessDefinitionId());
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
// ID 为 流程定义Key
org.activiti.bpmn.model.Process process = bpmnModel.getProcessById(processDefinition.getKey());
//Process process = bpmnModel.getProcessById(processDefinition.getKey());
// UserTask userTask = (UserTask) process.getFlowElement(task.getTaskDefinitionKey());
// 流程节点ID
FlowElement flowElement = process.getFlowElement(task.getTaskDefinitionKey());
DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();
List<String> highLightedActivities = new ArrayList<>();
highLightedActivities.add(flowElement.getId());
// 生成流程图
// InputStream inputStream = generator.generateJpgDiagram(bpmnModel);
// InputStream inputStream = generator.generatePngDiagram(bpmnModel);
// InputStream inputStream = generator.generateDiagram(bpmnModel, "jpg", highLightedActivities);
// 生成图片
InputStream inputStream = generator.generateDiagram(bpmnModel, "jpg", highLightedActivities, Collections.emptyList(), "宋体", "宋体", "宋体", null, 2.0);
return inputStream;
获取流程实例运行图总结:
取任务图的时候,需要涉及动态节点,而流程定义图是静态的,所以需要涉及动态流程图创建。其中Activiti 提供了流程图创建类。
- Activiti 是基于BPMN流程图的,所以在Activiti中会有一个类: org.activiti.bpmn.model.BpmnModel ,l来描述 BPMN.xml 的信息。
- 由BpmnModel可以获取流程定义类: org.activiti.bpmn.model.Process,用于描述流程各个节点与信息
- 通过当前任务节点的Key,来获取流程信息流程节点类: org.activiti.bpmn.model.FlowElement,到此就可以获取到流程信息
- 通过Activiti 提供到图片渲染类:org.activiti.image.impl.DefaultProcessDiagramGenerator,根据BpmnModel对象,动态生成流程图。
以上是关于Activiti5 获取当前流程实例运行图的主要内容,如果未能解决你的问题,请参考以下文章
全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>