activiti学习总结6

Activiti生成流程监控图片的方式总共有两种

1.利用自身所带的API进行生成,这种方式的核心类为ProcessDiagramGenerator.generateDiagram(pde, "png",
activityIds);
这种方式的主要目的是生成图片,然后在返回网页端显示,如果不改源码的话,只能显示正在执行的任务,历史任务无法显示.

生成的主要代码如下所示:

ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("process1");
taskService.complete(taskService.createTaskQuery().singleResult()
.getId());
// 得到流程定义实体类
ProcessDefinitionEntity pde = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(processInstance
.getProcessDefinitionId());
//得到流程执行对象
List<Execution> executions = runtimeService.createExecutionQuery()
.processInstanceId(processInstance.getId()).list();
//得到正在执行的Activity的Id
List<String> activityIds = new ArrayList<String>();
for (Execution exe : executions) {
List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
activityIds.addAll(ids);
}
InputStream in = ProcessDiagramGenerator.generateDiagram(pde, "png",
activityIds);
FileOutputStream out = new FileOutputStream("f:\\watch.png");
FileCopyUtils.copy(in, out);



2.还有一种方式是先把流程图在页面显示,然后返回页面时通过定义各个Activiti实体的坐标自主画边框显示流程进行到哪一个节点,这种方式的好处是可以自行控制显示历史节点以及正在执行的节点.
后台代码:

repositoryService.createProcessDefinitionQuery().singleResult();
InputStream in = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getDiagramResourceName());
OutputStream out = response.getOutputStream();
FileCopyUtils.copy(in, out);


// 得到流程定义实体类
ProcessDefinitionEntity pde = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(processInstance
.getProcessDefinitionId());
// 得到流程执行对象
List<Execution> executions = runtimeService.createExecutionQuery()
.processInstanceId(processInstance.getId()).list();
// 得到正在执行的Activity的Id
List<String> activityIds = new ArrayList<String>();
for (Execution exe : executions) {
List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
activityIds.addAll(ids);
}
List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
for (String id : activityIds) {
ActivityImpl activity = pde.findActivity(id);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("x", activity.getX());
map.put("y", activity.getY());
map.put("width", activity.getWidth());
map.put("height", activity.getHeight());
list.add(map);
}
request.setAttribute("list", list);

// 历史环节
List<HistoricActivityInstance> historicActivityInstances = historyService
.createHistoricActivityInstanceQuery().list();
List<String> historyIds = new ArrayList<String>();
for (HistoricActivityInstance h : historicActivityInstances) {
if (h.getEndTime() != null && "userTask".equals(h.getActivityType())) {
historyIds.add(h.getActivityId());
}
}
List<Map<String, Integer>> list2 = new ArrayList<Map<String, Integer>>();
for (String id : historyIds) {
ActivityImpl activity = pde.findActivity(id);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("x", activity.getX());
map.put("y", activity.getY());
map.put("width", activity.getWidth());
map.put("height", activity.getHeight());
list2.add(map);
}
request.setAttribute("list2", list2);


int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
List<ActivityImpl> activities = pde.getActivities();
for (ActivityImpl activity : activities) {
if (activity.getX() < minX) {
minX = activity.getX();
}
if (activity.getY() < minY) {
minY = activity.getY();
}
}
request.setAttribute("minX", minX - 4);
request.setAttribute("minY", minY - 4);


request.getRequestDispatcher("watch.jsp").forward(request, response);
}


前台页面代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<c:forEach items="${list }" var="m">
<div style="height: ${m.height }px; width: ${m.width }px; top: ${m.y }px; left: ${m.x }px; z-index: 10;position: absolute;border: 2px solid red;">
</div>
</c:forEach>
<c:forEach items="${list2 }" var="m">
<div style="height: ${m.height }px; width: ${m.width }px; top: ${m.y}px; left: ${m.x }px; z-index: 10;position: absolute;border: 2px solid blue;">
</div>
</c:forEach>
<div style="position: absolute; top: ${minY }px; left: ${minX}px; z-index: 1;">
<img alt="..." src="ProcessPng">
</div>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值