`

activiti 范例流程图的显示方法

 
阅读更多

activiti 实例流程图的显示方法
所谓实例流程图的显示,就是显示流程图的同时,高亮显示正在执行的节点。有两种方法
直接生成带老亮节点的图片:

	        try{
//	            ProcessDefinitionEntity pde = (ProcessDefinitionEntity) RepositoryService
//	            .getDeployedProcessDefinition(procDefId);


	         InputStream imageStream =
	         ProcessDiagramGenerator.generateDiagram(
	         def, "png",
	         runtimeService.getActiveActivityIds(executionId));
	         List<Task> list = taskService.createTaskQuery().processInstanceId(executionId).orderByTaskId().desc().list();
	         int size = list.size();
	         getRequest().setAttribute("inputStream", imageStream);
	        }catch(RasterFormatException e){
	            e.printStackTrace();
	        }


img.jsp

<%@page import="java.io.InputStream"%>
<%@page import="org.activiti.engine.impl.*"%>
<%@page import="org.activiti.engine.impl.pvm.*"%>
<%@page import="org.activiti.engine.impl.pvm.process.*"%>
<%@page import="org.activiti.engine.repository.*"%>
<%@page import="org.activiti.engine.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	
	InputStream is = (InputStream)request.getAttribute("inputStream");
	
	byte[] b = new byte[1024];
	int len = -1;
	while((len = is.read(b, 0, 1024)) != -1) {
		response.getOutputStream().write(b, 0, len);
		// 防止异常:getOutputStream() has already been called for this response
		out.clear();
		out = pageContext.pushBody();
	}	

%>


方法2: 图片和高亮节点圈分别产生

/**
	 * 显示流程图
	 * @return
	 * @throws Exception
	 */
	    public String getProcessPic() throws Exception {
	        // String taskId =
	        // "2901";//getRequest().getParameter("taskId");3016,552,3020
	    	String procDefId = getRequest().getParameter("procDefId");
			ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
	        String diagramResourceName = procDef.getDiagramResourceName();
	        InputStream imageStream = repositoryService.getResourceAsStream(
	        		procDef.getDeploymentId(), diagramResourceName);
	        getRequest().setAttribute("inputStream", imageStream);
	        return SUCCESS;
	    }
	/**
	 * 获取跟踪信息
	 * @return
	 * @throws Exception
	 */
	    public String getProcessMap() throws Exception {
	        String procDefId = getRequest().getParameter("procDefId");
	        String executionId = getRequest().getParameter("executionId");
	        ProcessDefinition processDefinition = repositoryService
	                .createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();

	        ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processDefinition;
	        String processDefinitionId = pdImpl.getId();// 流程标识

	        ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
	                .getDeployedProcessDefinition(processDefinitionId);
	        ActivityImpl actImpl = null;

	        ExecutionEntity execution = (ExecutionEntity) runtimeService
	                .createExecutionQuery().executionId(executionId).singleResult();// 执行实例

	        String activitiId = execution.getActivityId();// 当前实例的执行到哪个节点
//	        List<String>activitiIds = runtimeService.getActiveActivityIds(executionId);
	        

	        List<ActivityImpl> activitiList = def.getActivities();// 获得当前任务的所有节点
//	        for(String activitiId : activitiIds){
	        for (ActivityImpl activityImpl : activitiList) {
	            String id = activityImpl.getId();
	            if (id.equals(activitiId)) {// 获得执行到那个节点
	                actImpl = activityImpl;
	                break;
	            }
	        }
//	        }

	        getRequest().setAttribute("coordinateObj", actImpl);
	        getRequest().setAttribute("procDefId",procDefId );
	        return SUCCESS;
	    }


pic.jsp

<%@page import="java.io.InputStream"%>
<%@page import="org.activiti.engine.impl.*"%>
<%@page import="org.activiti.engine.impl.pvm.*"%>
<%@page import="org.activiti.engine.impl.pvm.process.*"%>
<%@page import="org.activiti.engine.repository.*"%>
<%@page import="org.activiti.engine.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	
	InputStream is = (InputStream)request.getAttribute("inputStream");
	
	byte[] b = new byte[1024];
	int len = -1;
	while((len = is.read(b, 0, 1024)) != -1) {
		response.getOutputStream().write(b, 0, len);
		// 防止异常:getOutputStream() has already been called for this response
		out.clear();
		out = pageContext.pushBody();
	}	

%>


showImg.jsp

<%@page import="java.io.InputStream"%>
<%@page import="org.activiti.engine.impl.*"%>
<%@page import="org.activiti.engine.impl.pvm.*"%>
<%@page import="org.activiti.engine.impl.pvm.process.*"%>
<%@page import="org.activiti.engine.repository.*"%>
<%@page import="org.activiti.engine.*"%>
<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
	<title></title>
</head>
<body>
	<div >
 		<img src="getProcessPic.action?procDefId=${procDefId}" style="position:absolute; left:0px; top:0px;">
 		<!-- 给执行的节点加框 -->
 		<div style="position:absolute; border:2px solid red;left:${coordinateObj.x-1 }px;top:${coordinateObj.y-1 }px;width:${coordinateObj.width }px;height:${coordinateObj.height }px;"></div>
 	</div>

</body>
</html>


struts.xml

<action name="getProcessPic" class="processInstanceAction" method="getProcessPic">
			<result name = "success" >/incident/pic.jsp</result>
		</action>
		<action name="getProcessMap" class="processInstanceAction" method="getProcessMap">
			<result name = "success" >/incident/showImg.jsp</result>
		</action>


需要注意的是,当你的流程图中存在并发节点时需要用到runtimeService.getActiveActivityIds(proInstId)得到多个活动节点。


这 个方法可以在activiti的帮助文档中找到,但它的原文中是getActiveActivityIds(String executionId)(执行ID)这是错的,因为在数据库的_ru_task表(运行任务表)中,执行ID与任务记录一一对应,但可以存在多个流程实 例Id相同的任务记录。


鉴于第一种方法形成的流程图太丑,采用第二种方法最好!

分享到:
评论

相关推荐

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

    5. 显示流程图:最后,将生成的自定义颜色流程图展示给用户,使他们能清楚地看到流程的当前状态。 通过以上步骤,我们可以为用户提供更加直观和易于理解的流程图,提高工作效率。在实际开发中,还需要考虑性能优化...

    activiti流程图查看demo

    在本篇文章中,我们将深入探讨Activiti的核心概念、流程图的查看方法以及如何利用diagram-viewer工具来实现这一功能。 首先,我们需要了解什么是业务流程模型。在 Activiti 中,流程模型是用BPMN 2.0(Business ...

    activiti 5.22流程图连线名称不显示bug修复

    然而,在实际使用过程中,可能会遇到各种问题,其中之一就是在Activiti 5.22版本中出现的“流程图连线名称不显示”的bug。 该问题主要体现在使用Activiti的Modeler设计器时,用户在设计流程图时可以清晰地看到连线...

    activiti5.22 流程设计器绘画的流程图条件线上的字不显示

    标题 "activiti5.22 流程设计器绘画的流程图条件线上的字不显示" 指出的问题是,在使用Activiti 5.22版本的流程设计器绘制流程图时,条件线上(通常用于表示流程分支依据的条件)的文字没有正确显示。这可能对流程图...

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

    在使用Activiti时,为了更好地理解流程状态和追踪执行过程,开发者往往需要实现流程图的高亮显示功能,突出已执行的节点和路径。本篇文章将深入探讨如何实现这一功能。 首先,我们要了解Activiti的基本概念。...

    activiti工作流高亮图配置.zip

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

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

    在高亮显示流程节点和线时,我们可以使用HTML和CSS来实现高亮效果。例如,我们可以使用HTML的span元素来标记流程节点,然后使用CSS来设置高亮颜色和样式。对于流程线,我们可以使用HTML的svg元素来绘制流程线,然后...

    activiti6.0流程图.zip

    在Activiti 6.0版本中,开发者可以实现对流程图的自定义,以满足特定的视觉需求和业务逻辑展示。本压缩包提供了相关的代码示例和图片,帮助理解如何实现流程图的颜色定制,包括当前任务和已执行任务的状态显示。 `...

    Activiti流程图部署及流程图部分操作.pdf

    在这个主题中,我们主要关注如何在Activiti中进行流程图的部署以及如何操作流程图。 流程图的部署是Activiti中至关重要的一步,因为它使得业务流程能够在系统中执行。在Activiti中,流程图通常是以BPMN 2.0标准的...

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

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

    Activiti学习文档(二)之画流程图并部署流程

    在“Activiti学习文档(二)之画流程图并部署流程”中,我们将深入探讨如何设计和部署工作流程。 首先,流程图是Activiti中至关重要的部分,它使用Business Process Model and Notation (BPMN) 2.0标准来表示业务...

    Activiti5学习-activiti流程图中文乱码

    例如,如果 BPMN 文件的编码与 Activiti 的默认编码不匹配,或者在显示流程图时使用的字体不支持中文,就可能出现乱码情况。 解决这个问题的方法通常包括以下几个步骤: 1. **检查BPMN文件编码**:确保你的 BPMN ...

    activiti请假流程文件bpmn.xml和流程图

    这个压缩包包含的“activiti请假流程文件bpmn.xml”和“流程图”是理解Activiti如何实现请假流程的关键资料。 BPMN(Business Process Model and Notation)是一种标准化的语言,用于图形化地表示业务流程。在这个...

    activity6.0-流程图高亮

    3. **流程线高亮**:不仅节点会被高亮,连接这些节点的流程线也会根据状态变化,显示流程的走向。 4. **支持多种操作**:文件名提到了“通过、不通过、驳回、退回”,这意味着系统支持对流程进行多种决策操作,这些...

    activiti7干货-svg流程图展示及通过坐标添加悬浮提示

    不懂可以问我,qq2738671

    Activiti工作流的Web流程图设计器

    Activiti的Web流程图设计器,BPMN-JS也可在官网下载并配置,这里压缩包是配置好的 1、需要提前下载好Node.js(中文官网连接:http://nodejs.cn/),傻瓜式安装。 2、解压后在bpmnjs目录打开dos命令窗口,输入npm ...

    Activiti在线流程设计器

    忙活了一个星期左右,查找各种资料,终于将Activiti的流程设计器分离出来,与SpringMVC,spring整合了起来,先把工程分享出来,等有时间了在慢慢讲解具体的整合步骤。工程下载之后直接可以运行,只需要改一下数据库...

    Activiti5学习-在流程图中为带条件的顺序流添加提示信息

    在Activiti中,我们可以在流程图中通过`activiti:conditionExpression`属性来定义这个条件表达式,通常使用的是Java表达式语言(JEXL)。 要在流程图中为带条件的顺序流添加提示信息,我们可以在流程定义的XML文件...

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

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

Global site tag (gtag.js) - Google Analytics