所谓实例流程图的显示,就是显示流程图的同时,高亮显示正在执行的节点。有两种方法
直接生成带老亮节点的图片:
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相同的任务记录。
鉴于第一种方法形成的流程图太丑,采用第二种方法最好!
*********************格叽格叽*******************************
孔雀东南飞…有情人还是共饮一江水的吧!
分享到:
相关推荐
在该控制器中,我们可能有方法来获取当前用户的任务,并根据任务状态来更新流程图的颜色。 3. CFProcessDiagramCanvasExt.java:这是另一个关键扩展,它可能用于定制流程图的画布,比如设置线条颜色、任务形状和...
在本篇文章中,我们将深入探讨Activiti的核心概念、流程图的查看方法以及如何利用diagram-viewer工具来实现这一功能。 首先,我们需要了解什么是业务流程模型。在 Activiti 中,流程模型是用BPMN 2.0(Business ...
标题 "activiti5.22 流程设计器绘画的流程图条件线上的字不显示" 指出的问题是,在使用Activiti 5.22版本的流程设计器绘制流程图时,条件线上(通常用于表示流程分支依据的条件)的文字没有正确显示。这可能对流程图...
在使用Activiti时,为了更好地理解流程状态和追踪执行过程,开发者往往需要实现流程图的高亮显示功能,突出已执行的节点和路径。本篇文章将深入探讨如何实现这一功能。 首先,我们要了解Activiti的基本概念。...
总结来说,配置Activiti流程图的高亮显示需要理解流程引擎的工作原理,结合前端和后端的技术,实现流程实例状态与流程图的同步。通过定制和扩展,可以打造出符合业务需求的可视化流程管理工具。这个“activiti工作流...
为了生成这两种高亮显示的流程图,通常需要结合Activiti的API与图像处理库,比如Java的Batik库,它可以解析BPMN流程图的XML描述,并将其转换为SVG或PNG图片。在代码中,我们需要先将流程定义加载到Activiti引擎,...
Activiti流程跟踪任务节点和线高亮显示 Activiti是Activiti BPMN 2.0流程引擎的Java实现,提供了强大的流程管理和自动化功能。在Activiti中,我们可以通过流程跟踪功能来追踪和监控流程的执行情况。流程跟踪任务...
在Activiti 6.0版本中,开发者可以实现对流程图的自定义,以满足特定的视觉需求和业务逻辑展示。本压缩包提供了相关的代码示例和图片,帮助理解如何实现流程图的颜色定制,包括当前任务和已执行任务的状态显示。 `...
总结来说,“Activiti学习文档(二)之画流程图并部署流程”会带你走过从设计到实施一个完整流程的整个过程,包括理解BPMN符号、使用工具绘制流程图、编写部署脚本,以及如何在实际环境中运行和管理流程实例。...
在这个主题中,我们主要关注如何在Activiti中进行流程图的部署以及如何操作流程图。 流程图的部署是Activiti中至关重要的一步,因为它使得业务流程能够在系统中执行。在Activiti中,流程图通常是以BPMN 2.0标准的...
这个压缩包包含的“activiti请假流程文件bpmn.xml”和“流程图”是理解Activiti如何实现请假流程的关键资料。 BPMN(Business Process Model and Notation)是一种标准化的语言,用于图形化地表示业务流程。在这个...
"activity6.0-流程图高亮"是关于Activiti 6版本的一个特定功能,它强调了在流程执行过程中对图元(节点和流程线)的突出显示。 Activiti是一个开源的工作流和业务自动化引擎,广泛应用于企业级应用中,如 BPMN...
本实例将深入讲解如何在 Activiti 中查看流程图。 首先,查看流程图的实例通常涉及到以下几个关键步骤: 1. **获取流程部署ID(deploymentId)**:在 Activiti 中,每个流程定义都会被部署到仓库(Repository),...
在Activiti中,我们可以在流程图中通过`activiti:conditionExpression`属性来定义这个条件表达式,通常使用的是Java表达式语言(JEXL)。 要在流程图中为带条件的顺序流添加提示信息,我们可以在流程定义的XML文件...
这个“简单的activiti请假流程”项目是针对初学者或希望了解Activiti基本操作的一个实例,旨在展示如何在实际场景中部署、启动、执行和结束一个流程。 1. Activiti 概述: Activiti 是基于模型驱动的,采用BPMN ...
在Activiti 6.0版本中,为了更好地理解和跟踪流程执行状态,通常需要对流程图进行高亮显示,突出已执行的节点和路径。这个压缩包"activiti6.0深度封装流程图像显示源码.rar"正是提供了这样的功能,通过源代码实现了...
在Activiti中,流程图是业务流程的可视化表示,通常以BPMN(Business Process Modeling Notation)2.0标准格式创建。BPMN是一种图形化语言,用于描述业务流程的结构、交互和规则。流程图对于理解、设计和实施业务...
在"activiti6.0 自定义流程路径颜色和任务颜色"这个主题中,我们主要关注如何根据业务需求定制流程图的显示效果,特别是流程路径和任务节点的颜色。 首先,流程图的颜色定制对于理解和跟踪流程状态至关重要。默认...
用springboot2来集成的activiti6,里面包括了activiti的在线web设计器,高亮显示当前流程实例的正在执行的任务,对activiti任务的测试 上面的功能都是在一个项目中,且项目中有详细的注释,也有一个项目说明.txt用于...