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 executions = runtimeService.createExecutionQuery()
				.processInstanceId(processInstance.getId()).list();
		//得到正在执行的Activity的Id
		List activityIds = new ArrayList();
		for (Execution exe : executions) {
			List 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 executions = runtimeService.createExecutionQuery()
				.processInstanceId(processInstance.getId()).list();
		// 得到正在执行的Activity的Id
		List activityIds = new ArrayList();
		for (Execution exe : executions) {
			List ids = runtimeService.getActiveActivityIds(exe.getId());
			activityIds.addAll(ids);
		}
		List> list = new ArrayList>();
		for (String id : activityIds) {
			ActivityImpl activity = pde.findActivity(id);
			Map map = new HashMap();
			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 historicActivityInstances = historyService
				.createHistoricActivityInstanceQuery().list();
		List historyIds = new ArrayList();
		for (HistoricActivityInstance h : historicActivityInstances) {
			if (h.getEndTime() != null && "userTask".equals(h.getActivityType())) {
				historyIds.add(h.getActivityId());
			}
		}
		List> list2 = new ArrayList>();
		for (String id : historyIds) {
			ActivityImpl activity = pde.findActivity(id);
			Map map = new HashMap();
			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 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" %>    




Insert title here


	
		
...

你可能感兴趣的:(activiti)