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相同的任务记录。
鉴于第一种方法形成的流程图太丑,采用第二种方法最好!
相关推荐
activiti流程图查看demo
activiti5.22 流程设计器绘画的流程图条件线上的字不显示 下载该jar包 替换对应的maven仓库的jar包就可以了
使用modeler设计器,流程图连线名称是有显示的,但是运行结果却没显示。下载本jar包直接替换原来的jar包,重新启动项目即可
activiti6.0实现流程图片自定义颜色 当前任务为红色,走过的任务为绿色,自定义文字颜色连线文字显示
使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法源代码
Activiti流程跟踪监控图路径线和节点高亮显示,本实例提供了两种方式,都可以生成png图片。
activiti6.0实现流程图片自定义颜色,当前任务为红色,走过的任务为绿色,自定义文字颜色连线文字显示
activiti流程图高亮显示配置,为了方便别人快速配置,特此编辑此贴,盼同行们多多支持小编,原创不容易!
Activiti学习文档(二)之画流程图并部署流程的文件资源……
Activiti12流程跟踪任务节点和线高亮显示,能标记流程所走过节点和线为红色,未走过的节点和线不标记,支持驳回和子流程。
Activiti流程图部署及流程图部分操作 流程图部署及流程图部分操作 流程图部署有两种⽅式,⼀种是通过classpath,另⼀种是通过zip⽂件 通过classpath⽅式如下 public void deploymentProcessDefinition_classpath() {...
忙活了一个星期左右,查找各种资料,终于将Activiti的流程设计器分离出来,与SpringMVC,spring整合了起来,先把工程分享出来,等有时间了在慢慢讲解具体的整合步骤。工程下载之后直接可以运行,只需要改一下数据库...
Activiti的Web流程图设计器,BPMN-JS也可在官网下载并配置,这里压缩包是配置好的 1、需要提前下载好Node.js(中文官网连接:http://nodejs.cn/),傻瓜式安装。 2、解压后在bpmnjs目录打开dos命令窗口,输入npm ...
NULL 博文链接:https://cooperay.iteye.com/blog/1457070
activiti工作流程图绘制工具web版,可直接放到tomcat中使用,默认账户/密码为kermit/kermit
不懂可以问我,qq2738671
Activiti 6.0 流程设计器汉化,替换Activiti-App下的activiti-app-logic-6.0.0.jar 文件
activiti在线流程图设计整合,springboot+activiti流程设计
activity6.0流程图高亮