在正常的flowable就是显示当前节点,路径需要我们自己获取,特别是来回的驳回会导致节点混乱,这里主要就是如何正确的显示流程图
效果:
已经结束的流程
正在执行的流程
代码:1、生成图片
// 源码 www.1b23.com public byte[] createImage2(String processInstanceId) { //1.获取当前的流程实例 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId = null; List<String> activeActivityIds = null; //2.获取所有的历史轨迹对象 List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).list(); Map<String, HistoricActivityInstance> hisActivityMap = new HashMap<>(); list.forEach(historicActivityInstance -> { if (!hisActivityMap.containsKey(historicActivityInstance.getActivityId())) { hisActivityMap.put(historicActivityInstance.getActivityId(), historicActivityInstance); } }); //3. 获取流程定义id和高亮的节点id if (processInstance != null) { //3.1. 正在运行的流程实例 processDefinitionId = processInstance.getProcessDefinitionId(); activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); } else { //3.2. 已经结束的流程实例 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); processDefinitionId = historicProcessInstance.getProcessDefinitionId(); activeActivityIds = new ArrayList<>(); List<EndEvent> endEvents = bpmnModelService.findEndFlowElement(processDefinitionId); List<String> finalActiveActivityIds = activeActivityIds; endEvents.forEach(endEvent -> { if (hisActivityMap.containsKey(endEvent.getId())) { finalActiveActivityIds.add(endEvent.getId()); } }); } //4. 获取流程定义的所有节点信息 List<FlowNode> flowNodes = bpmnModelService.findFlowNodes(processDefinitionId); Map<String, FlowNode> activityMap = flowNodes.stream().collect(Collectors.toMap(FlowNode::getId, flowNode -> flowNode)); List<String> highLightedFlows = new ArrayList<>(); //5. 递归得到高亮线 activeActivityIds.forEach(activeActivityId -> this.getHighLightedFlows(activityMap, hisActivityMap, activeActivityId, highLightedFlows, activeActivityId)); //6. 获取bpmnModel对象 BpmnModel bpmnModel = bpmnModelService.getBpmnModelByProcessDefId(processDefinitionId); //7. 生成图片流 InputStream inputStream = flowProcessDiagramGenerator.generateDiagram(bpmnModel, activeActivityIds, highLightedFlows); //8. 转化成byte便于网络传输 byte[] datas = IoUtil.readInputStream(inputStream, "image inputStream name"); return datas; }
递归获取高
//from www.fhadmin.cn private void getHighLightedFlows(Map<String, FlowNode> flowNodeMap, Map<String, HistoricActivityInstance> hisActivityMap, String activeActivityId, List<String> highLightedFlows, String oldActivityId) { FlowNode flowNode = flowNodeMap.get(activeActivityId); List<SequenceFlow> incomingFlows = flowNode.getIncomingFlows(); for (SequenceFlow sequenceFlow : incomingFlows) { String sourceRefId = sequenceFlow.getSourceRef(); if (hisActivityMap.containsKey(sourceRefId) && !oldActivityId.equals(sourceRefId)) { highLightedFlows.add(sequenceFlow.getId()); this.getHighLightedFlows(flowNodeMap, hisActivityMap, sourceRefId, highLightedFlows, oldActivityId); } else { if (hisActivityMap.containsKey(sourceRefId)){ highLightedFlows.add(sequenceFlow.getId()); } break; } } }
相关推荐
flowable高亮流程已执行节点及连线,包含6.4.1版本以及6.4.1之前版本的不同处理方法
Flowable深入浅出-13 Flowable-BPMN操作流程之流程进展查看之流程图,欢迎在我的专栏查看该文章(第13篇),专栏地址:https://blog.csdn.net/houyj1986/column/info/31755
总结来说,使用Vue结合`workflow-bpmn-modeler`库绘制Flowable流程图的步骤包括: 1. 创建Vue 2项目,并安装`workflow-bpmn-modeler`库。 2. 在Vue组件中注册并使用`bpmnModeler`组件,传递必要的数据属性。 3. ...
首先,"插入节点"是指在流程图中增加新的步骤或决策点。以前的版本仅允许在流程的末尾添加节点,这限制了流程设计的灵活性。现在,更新后的版本允许用户在已选择的节点前或后插入新节点,这样可以根据实际需求更自由...
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解) 博客地址:https://yangyongli.blog.csdn.net/article/details/132719594
Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成,欢迎进入我的专栏第14节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755
12. **流程可视化**:Flowable提供了强大的流程图可视化工具,可直观查看和编辑流程定义。 13. **工作流引擎的调度**:Flowable Engine包含一个调度器,可以处理定时任务和延迟事件。 14. **多租户支持**:...
在主流程中引用子流程时,只需在主流程图中添加一个子流程节点,并将其与子流程文件关联。通过这种方式,主流程可以在运行时调用子流程实例,执行相应的业务逻辑。在FixFlow中,可以通过设置子流程节点的属性,如...
Flowable支持BPMN 2.0标准,这使得创建的流程图具有广泛的兼容性和可扩展性。 Activiti是另一个知名的工作流引擎,曾经在社区中广受欢迎。Flowable是在Activiti项目停滞不前后由其核心开发者创立的,因此两者之间...
在本项目中,bpmn.io@7.0 版本被用来创建和编辑Flowable的流程图,用户可以通过直观的图形界面设计复杂的业务流程。 4. **Flowable Modeler**: Flowable Modeler是Flowable项目的一部分,它提供了一个可视化的...
这个文件包含了流程的各个活动、任务、决策点等,并且可以包含流程图的布局信息。 2. **加载流程定义**: 将流程定义文件读入内存,然后通过Flowable提供的API进行部署。这通常涉及到`ProcessEngine`的`...
Flowable深入浅出-15 Flowable-BPMN操作流程之排他网关,欢迎进入我的专栏第15节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755
安装完成后,开发者可以在IDEA内部直接创建和编辑Flowable BPMN流程图,而无需切换到专门的流程设计工具。这大大提高了开发效率,减少了在不同工具间切换的时间成本。 Flowable BPMN插件提供了丰富的图形元素,包括...
实现回退业务的方式有两种主要策略:一种是通过在流程定义阶段显式绘制回退线,虽然这可能导致流程图变得复杂,但清晰明了,易于实现;另一种是隐式实现,这种方式可能更加灵活,但可能需要更复杂的逻辑来处理回退。...
在本压缩包中,我们包含了两个知名的流程引擎——Flowable 6.4.2和Activiti 6.0。这两个引擎都是基于Java的企业级工作流引擎,广泛应用于BPM(Business Process Management)系统。 Flowable是一个高度灵活且可扩展...
Flowable 是一个强大的开源工作流和业务自动化引擎,它提供了高度灵活的业务流程管理(BPM)和案例管理(Case Management)解决方案。这个"Flowable 请假流程 demo 示例"是用于展示如何使用 Flowable 实现一个典型的...
Flowable V6.4.2版本是针对企业级工作流管理的一个强大工具,它是一个用Java语言开发的轻量级业务流程引擎。该版本的中文文档对于中国开发者来说尤其重要,因为它提供了详尽的说明,使得理解并使用Flowable变得更加...
通过BPMN 2.0标准,流程图能清晰地表达各个任务、决策点、分支和连接,方便团队理解和协作。 8. **Flowable核心概念**: - **流程定义(Process Definition)**:描述了一个流程的结构,包括任务、事件、网关等。 ...
通过这个在线流程设计器,用户可以拖拽元素创建流程图,定义任务、事件和转移规则。同时,Flowable引擎会自动解析这些模型并执行相应的流程实例。此外,Flowable还支持流程审计、任务管理和监控,有助于企业优化业务...
在本文中,我们将深入探讨如何基于若依开源框架集成钉钉与Flowable,构建一个高效的一体化人事流程系统。若依(RuoYi)是一个流行的企业级Java开源框架,设计用于快速开发轻量级管理系统。钉钉是阿里巴巴集团推出的...