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 提供了流程图创建类。

  1. Activiti 是基于BPMN流程图的,所以在Activiti中会有一个类: org.activiti.bpmn.model.BpmnModel ,l来描述 BPMN.xml 的信息。
  2. 由BpmnModel可以获取流程定义类: org.activiti.bpmn.model.Process,用于描述流程各个节点与信息
  3. 通过当前任务节点的Key,来获取流程信息流程节点类: org.activiti.bpmn.model.FlowElement,到此就可以获取到流程信息
  4. 通过Activiti 提供到图片渲染类:org.activiti.image.impl.DefaultProcessDiagramGenerator,根据BpmnModel对象,动态生成流程图。

以上是关于Activiti5 获取当前流程实例运行图的主要内容,如果未能解决你的问题,请参考以下文章

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>

activiti5 怎么创建数据表

activiti5 怎么创建数据表

Activiti5 添加/查询审批批注(审批意见)

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>