所谓实例流程图的显示,就是显示流程图的同时,高亮显示正在执行的节点。有两种方法
直接生成带老亮节点的图片:
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相同的任务记录。
鉴于第一种方法形成的流程图太丑,采用第二种方法最好!
*********************格叽格叽*******************************
孔雀东南飞…有情人还是共饮一江水的吧!
分享到:
相关推荐
Activiti流程跟踪监控图路径线和节点高亮显示,本实例提供了两种方式,都可以生成png图片。
主要介绍了activiti获取流程图的方法,需要的朋友可以参考下
activity6.0流程图高亮
用springboot2来集成的activiti6,里面包括了activiti的在线web设计器,高亮显示当前流程实例的正在执行的任务,对activiti任务的测试 上面的功能都是在一个项目中,且项目中有详细的注释,也有一个项目说明.txt用于...
activiti请假流程文件和流程图
这个是Activiti开发的请假流程实例,可以作为用Activiti开发工作流的参考;...此项目还包含了拦截器的技术(未登录用户不给访问系统),实测可以启动流程,审批流程及查看流程图,还有历史审批查看等功能。
主要介绍了Activiti流程图查看实例,需要的朋友可以参考下
Activiti流程跟踪监控图路径线和节点高亮显示,本实例提供了网页生成的方式。
在用activiti的时候经常遇到取会签人员的问题,这个文档解决怎么获取会签人员。
Activiti流程图设置 Activiti基础API使用 章节二:Activiti进阶 Activiti流程实例 Activiti个人任务处理 Activiti使用流程变量 Activiti处理任务候选人 Activiti网关的使用 章节三:Activiti整合 Activiti和Spring的...
本案例是activiti整合springboot+mybatis包含流程图绘制,流程图高亮显示,审批角色设置,非常适合新手
03 - Activiti流程实例 1.构建学生请假审批流程 2.执行对象概念 3.判断流程实例状态 4.历史流程实例查询 5.历史活动查询 04 - Activiti流程变量 1.流程变量的概念 2.使用TaskService设置和获取流程变量 3....
7.6:获取流程定义文档的资源(查看流程图附件) 22 7.7:附加功能:查询最新版本的流程定义 23 7.8:附加功能:删除流程定义(删除key相同的所有不同版本的流程定义) 23 7.9:总结 24 8:流程实例、任务的执行 25 ...
Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。 ACT_HI_*: 'HI'表示...
一个是我们将编辑好的bpmn20.xml文件通过我们之前一分钟入门的示例activiti-explorer应用导入进去,查看它的流程图,并完整执行一遍流程。 在编写这个Demo之前,至少要了解Activiti与Spring如何集成、XxxService各自...
工作流 实例 activiti 5 工作流的部署 运行 历史查询 流程图 实例介绍
activiti demo 实例,流程办理、驳回、工作流状态流程图
已完成节点高亮显示、当前执行中节点红色显示 支持一个节点多条流出线,包括通过、不通过、驳回、退回,按照已执行操作正确显示高亮流程线
15.68. 获得流程实例的流程图 - URL参数 15.69. 获得流程实例的流程图 - 响应码 15.70. 获得流程实例的参与者 - URL参数 15.71. 获得流程实例的参与者 - 响应码 15.72. 为流程实例添加一个参与者 - URL参数 ...
业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram) 3.3:数据库(先学后看) Activiti数据库支持: ...