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;
    }
viewImage
<%@ 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>
image.jsp
/**使用部署对象ID和资源图片名称,获取图片的输入流*/
    @Override
    public InputStream findImageInputStream(String deploymentId,
            String imageName) {
        return repositoryService.getResourceAsStream(deploymentId, imageName);
    }
findImageInputStream
    /**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;
    }
findProcessDefinitionByTaskId
/**
     * 二:查看当前活动,获取当期活动对应的坐标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;
    }
findCoordingByTask

 

 

posted @ 2016-11-14 18:03  SKYisLimit  阅读(489)  评论(0)    收藏  举报