activiti 查看流程图
/** * 查看当前流程图(查看当前活动节点,并使用红色的框标注) */ public String viewCurrentImage(){ //任务ID String taskId = workflowBean.getTaskId(); /**一:查看流程图*/ //1:获取任务ID,获取任务对象,使用任务对象获取流程定义ID,查询流程定义对象 ProcessDefinition pd = workflowService.findProcessDefinitionByTaskId(taskId); //workflowAction_viewImage?deploymentId=<s:property value='#deploymentId'/>&imageName=<s:property value='#imageName'/> ValueContext.putValueContext("deploymentId", pd.getDeploymentId()); ValueContext.putValueContext("imageName", pd.getDiagramResourceName()); /**二:查看当前活动,获取当期活动对应的坐标x,y,width,height,将4个值存放到Map<String,Object>中*/ Map<String, Object> map = workflowService.findCoordingByTask(taskId); ValueContext.putValueContext("acs", map); return "image"; }
/** * 查看流程图 * @throws Exception */ public String viewImage() throws Exception{ //1:获取页面传递的部署对象ID和资源图片名称 //部署对象ID String deploymentId = workflowBean.getDeploymentId(); //资源图片名称 String imageName = workflowBean.getImageName(); //2:获取资源文件表(act_ge_bytearray)中资源图片输入流InputStream InputStream in = workflowService.findImageInputStream(deploymentId,imageName); //3:从response对象获取输出流 OutputStream out = ServletActionContext.getResponse().getOutputStream(); //4:将输入流中的数据读取出来,写到输出流中 for(int b=-1;(b=in.read())!=-1;){ out.write(b); } out.close(); in.close(); //将图写到页面上,用输出流写 return null; }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>查看当前流程图</title> </head> <body> <!-- 1.获取到规则流程图 --> <img style="position: absolute;top: 0px;left: 0px;" src="workflowAction_viewImage?deploymentId=<s:property value='#deploymentId'/>&imageName=<s:property value='#imageName'/>"> <!-- 2.根据当前活动的坐标,动态绘制DIV --> <div style="position: absolute;border:1px solid red;top:<s:property value="#acs.y"/>px;left: <s:property value="#acs.x"/>px;width: <s:property value="#acs.width"/>px;height:<s:property value="#acs.height"/>px; "></div></body> </html>
/**使用部署对象ID和资源图片名称,获取图片的输入流*/ @Override public InputStream findImageInputStream(String deploymentId, String imageName) { return repositoryService.getResourceAsStream(deploymentId, imageName); }
/**1:获取任务ID,获取任务对象,使用任务对象获取流程定义ID,查询流程定义对象*/ @Override public ProcessDefinition findProcessDefinitionByTaskId(String taskId) { //使用任务ID,查询任务对象 Task task = taskService.createTaskQuery()// .taskId(taskId)//使用任务ID查询 .singleResult(); //获取流程定义ID String processDefinitionId = task.getProcessDefinitionId(); //查询流程定义的对象 ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()//创建流程定义查询对象,对应表act_re_procdef .processDefinitionId(processDefinitionId)//使用流程定义ID查询 .singleResult(); return pd; }
/** * 二:查看当前活动,获取当期活动对应的坐标x,y,width,height,将4个值存放到Map<String,Object>中 map集合的key:表示坐标x,y,width,height map集合的value:表示坐标对应的值 */ @Override public Map<String, Object> findCoordingByTask(String taskId) { //存放坐标 Map<String, Object> map = new HashMap<String,Object>(); //使用任务ID,查询任务对象 Task task = taskService.createTaskQuery()// .taskId(taskId)//使用任务ID查询 .singleResult(); //获取流程定义的ID String processDefinitionId = task.getProcessDefinitionId(); //获取流程定义的实体对象(对应.bpmn文件中的数据) ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId); //流程实例ID String processInstanceId = task.getProcessInstanceId(); //使用流程实例ID,查询正在执行的执行对象表,获取当前活动对应的流程实例对象 ProcessInstance pi = runtimeService.createProcessInstanceQuery()//创建流程实例查询 .processInstanceId(processInstanceId)//使用流程实例ID查询 .singleResult(); //获取当前活动的ID String activityId = pi.getActivityId(); //获取当前活动对象 ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);//活动ID //获取坐标 map.put("x", activityImpl.getX()); map.put("y", activityImpl.getY()); map.put("width", activityImpl.getWidth()); map.put("height", activityImpl.getHeight()); return map; }

浙公网安备 33010602011771号