`
┿┅мīSS
  • 浏览: 96017 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activiti 5.6 流程实例图实现历史节点高亮

 
阅读更多

我们先来看效果图,高亮的红色部分代表正在处理中的任务,已经完成的任务我用高亮的绿色来表示:

 

Activiti提供了画流程图的实现,当我们部署一个流程文件的时候,相应的流程图就会自动部署到数据库里面。我们可以通过Activiti 提供的 API检索出来。

 

翻阅Activiti的source code,我们看到在org.activiti.engine.impl.bpmn.deployer.BpmnDeployer的deploy() 方法有那么一段:

 

 ............
 for (ProcessDefinitionEntity processDefinition: bpmnParse.getProcessDefinitions()) {
          processDefinition.setResourceName(resourceName);
          
          String diagramResourceName = getDiagramResourceForProcess(resourceName, processDefinition.getKey(), resources);
          if (diagramResourceName==null && processDefinition.isGraphicalNotationDefined()) {
            try {
              byte[] diagramBytes = IoUtil.readInputStream(ProcessDiagramGenerator.generatePngDiagram(processDefinition), null);
              diagramResourceName = getProcessImageResourceName(resourceName, processDefinition.getKey(), "png");
              createResource(diagramResourceName, diagramBytes, deployment);
            } catch (Exception e) { // if anything goes wrong, we don't store the image (the process will still be executable).
              LOG.log(Level.WARNING, "Error while generating process diagram, image will not be stored in repository", e);
            }
          } 
.........
 

 

 byte[] diagramBytes = IoUtil.readInputStream(ProcessDiagramGenerator.generatePngDiagram(processDefinition), null); 表明了当流程图的DI信息存在时,就会去调用 ProcessDiagramGenerator.generatePngDiagram() 生成相应的流程图,并部署到数据库中.

 

ProcessDiagramGenerator.generatePngDiagram()生成流程图的流程大概是以下几步:

 

1.根据解析出来的流程DI信息,计算出画布的大小,即如果最靠右的组件x坐标是300,最靠底部的组件y坐标是400,那么就生成一个310*410的画布,保证了画布能够容纳整幅流程图的组件。

 

2.根据流程DI信息各个组件的类型,调用相应的渲染方法,在画布上画图。

 

3.此时,流程图画完了,但是左上部分可能会有很多空白的位置,所以根据流程DI信息,计算出最近左边的组件的x坐标和顶部的组件的y坐标,然后做一个裁剪,使输出的流程图大小刚刚好。

 

了解了Activiti画图的过程,我们在流程图上加工画高亮就容易多了,步骤如下,

 

1.检索出流程图原图。

 

2.解析流程DI信息。

 

3.由于上面画图的第三步做了个裁剪的操作,DI的坐标信息已经不对了,实际的x,y坐标会比DI上的要小了,但我们可以根据DI计算出minX,和minY,从而相减计算出真实的坐标。

 

4.加载流程的历史数据

 

5.根据历史数据和相应的DI坐标信息,利用java 2D画图。

 

在实际应用中,相同的流程,前3步只需要操作一次就够了,第二次就可以直接共享了,没必要浪费系统资源。

所以可以用一个很简单的LRU Map (least recently used Map)来缓存流程图的信息,每次只需要在图上加工就可以了。

 

 

public class LRUMap<K, V> extends LinkedHashMap<K, V> {

	private static final long serialVersionUID = -348656573172586525L;

	private final int maxCapacity;

	private static final float DEFAULT_LOAD_FACTOR = 0.75f;

	private Entry<K, V> eldestEntry;

	public LRUMap(int maxCapacity) {
		super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
		this.maxCapacity = maxCapacity;
	}

	@Override
	protected boolean removeEldestEntry(Entry<K, V> eldest) {
		boolean remove = size() > maxCapacity;
		if (remove) {
			this.eldestEntry = eldest;
		}
		return remove;
	}

	public Entry<K, V> getEldestEntry() {
		return eldestEntry;
	}

}
 
分享到:
评论

相关推荐

    Activiti12流程跟踪任务节点和线高亮显示

    在 Activiti中,我们可以使用自定义的Action来实现流程跟踪任务节点和线高亮显示。在上面的代码中,我们可以看到instanceDiagram方法,它负责生成流程监控图像。该方法首先获取流程实例ID,然后使用...

    Activiti5.6 用户手册

    Activiti5.6 用户手册

    activiti5.6一个小例子

    Activiti 5.6是其历史版本之一,尽管现在有更新的版本,但5.6版本依然具有重要的学习价值,因为它包含了基本的流程引擎实现和丰富的API接口。 二、Activiti 5.6核心概念 1. 流程定义(Process Definition):使用...

    activiti工作流高亮图配置.zip

    总结来说,配置Activiti流程图的高亮显示需要理解流程引擎的工作原理,结合前端和后端的技术,实现流程实例状态与流程图的同步。通过定制和扩展,可以打造出符合业务需求的可视化流程管理工具。这个“activiti工作流...

    使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法源代码

    本文将详细探讨如何在 Activiti 中实现流程图的高亮显示,特别是已执行的节点和已执行路径。 首先,理解 Activiti 工作流引擎的基本概念是必要的。Activiti 提供了一个图形化的流程设计工具,即 Activiti Modeler,...

    Activiti 学习笔记十:开始活动节点(判断流程是否结束及查询历史)

    总结,Activiti 的开始活动节点是流程的起点,而流程是否结束则需要通过查询流程实例和历史流程实例的状态来判断。理解并熟练掌握这些概念和操作,将有助于我们在实际项目中更有效地管理和优化业务流程。通过 ...

    activiti工作流流程跟踪图(图片(两种方式))

    本实例聚焦于如何生成和查看Activiti流程的跟踪监控图,并且通过两种不同的方式来实现图片的生成,分别是路径线和节点的高亮显示。 首先,我们要理解Activiti的工作流模型。流程定义(Process Definition)是用BPMN...

    activiti6.0实现流程图片自定义颜色 当前任务为红色,走过的任务为绿色,自定义文字颜色连线文字显示

    本文将深入探讨如何在Activiti 6.0版本中实现流程图片的自定义颜色功能,以增强流程图的可读性和美观性。 首先,我们要理解流程图在Activiti中的作用。流程图是流程模型的可视化表示,它帮助用户理解并跟踪业务流程...

    activiti 5.6 5.8源代码

    Activiti 是一个开源的工作流和业务流程管理(BPM)引擎,它被广泛用于企业级应用中,以实现流程自动化和提升工作效率。标题提到的是 Activiti 的两个版本,5.6 和 5.8,这表明我们将探讨这两个版本的源代码。 在 ...

    activiti5.6帮助文档

    activiti5.6,想对activiti有所提高,进一步了解的朋友必备,对初学者也是必备文档

    流程跟踪监控图-节点-流程线高亮显示.rar

    在Activiti中,流程图的渲染是通过`ProcessDiagramGenerator`接口实现的,而这个类可能是对这个接口的一个扩展,增加了对节点状态和流程线颜色的处理逻辑,使得完成的节点被高亮,当前执行中的节点显示为红色。...

    activiti 工作流实例-实现请假流程

    这个是Activiti开发的请假流程实例,可以作为用Activiti开发工作流的参考;项目采用spring+hibernate+strus2+activity开发,可以运行;数据库采用oracle,其中 QingJia 和 QingJiaHis 是自己的业务表,分别表示 请假...

    Activiti6-流程跟踪监控图-节点-流程线高亮显示-支持通过、不通过、驳回、退回

    Activiti6-流程跟踪监控图-节点-流程线高亮显示-支持通过、不通过、驳回、退回 支持内容: 已完成节点高亮显示、当前执行中节点红色显示 支持一个节点多条流出线,包括通过、不通过、驳回、退回,按照已执行操作正确...

    工作流Activiti的学习总结Activiti5.6和Spring3.03整合

    总结起来,Activiti 5.6与Spring 3.03的整合提供了一种高效的方式来建模和执行业务流程,如模拟程序员的面试过程。通过XML配置,我们可以定义复杂的流程逻辑,并结合Spring的特性进行灵活的控制和管理。这种整合使得...

    activiti流程图查看demo

    4. **交互功能**:diagram-viewer不仅展示流程图,还可能提供交互功能,如节点高亮、流程路径追踪等,以帮助理解流程执行的过程。 5. **定制与扩展**:根据需求,开发者还可以对diagram-viewer进行定制,比如添加...

    activity6.0-流程图高亮

    1. **流程跟踪监控**:Activiti 6提供了强大的流程跟踪能力,允许用户查看每个任务的状态和历史,以了解流程的执行情况。 2. **节点高亮**:不同状态的节点(如待处理、进行中、已完成等)会有不同的高亮样式,帮助...

    Activiti 学习笔记六:流程执行历史记录

    3. 历史活动实例(HistoricActivityInstance):记录了流程中的每一个活动(节点)的执行情况,如开始和结束时间、持续时长。 4. 历史变量(HistoricVariableInstance):保存了流程变量的变化历史,可以帮助分析...

    Activiti(Flowable) 流程实例克隆解决方案1

    Activiti(Flowable) 流程实例克隆解决方案1

    Activiti工作流之流程实例、任务的执行

    流程实例会根据流程图中的各个活动节点(如用户任务、服务任务等)进行流转,直到达到结束事件为止。流程实例可以通过API进行控制,如暂停、恢复或终止。 **任务(Task)** 任务是流程实例中的基本工作单元,代表了...

Global site tag (gtag.js) - Google Analytics