Activiti流程图查看实例
本文实例展示了Activiti流程图查看的实现方法,具体步骤如下所示:
1、测试用例查看图片代码如下:
publicvoidviewImage()throwsException{ //创建仓库服务对对象 RepositoryServicerepositoryService=processEngine.getRepositoryService(); //从仓库中找需要展示的文件 StringdeploymentId="701"; List<String>names=repositoryService.getDeploymentResourceNames(deploymentId); StringimageName=null; for(Stringname:names){ if(name.indexOf(".png")>=0){ imageName=name; } } if(imageName!=null){ //System.out.println(imageName); Filef=newFile("e:/"+imageName); //通过部署ID和文件名称得到文件的输入流 InputStreamin=repositoryService.getResourceAsStream(deploymentId,imageName); FileUtils.copyInputStreamToFile(in,f); }
说明:
1) deploymentId为流程部署ID
2) resourceName为act_ge_bytearray表中NAME_列的值
3) 使用repositoryService的getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称
4) 使用repositoryService的getResourceAsStream方法传入部署ID和文件名称可以获取部署下指定名称文件的输入流
5) 最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝
2、web项目中在流程定义页面查看图片:
publicStringviewImage(){ InputStreamin=repositoryService.getResourceAsStream.getImageStream(deploymentId,imageName);//此处方法实际项目应该放在service里面 HttpServletResponseresp=ServletActionContext.getResponse(); try{ OutputStreamout=resp.getOutputStream(); //把图片的输入流程写入resp的输出流中 byte[]b=newbyte[1024]; for(intlen=-1;(len=in.read(b))!=-1;){ out.write(b,0,len); } //关闭流 out.close(); in.close(); }catch(IOExceptione){ e.printStackTrace(); } returnnull; }
说明:
1) deploymentId为流程部署ID,imageName为图片名称
2) 因为是从流程定义列表页面查看图片,id和imageName可以从流程定义(ProcessDefinition)中获取(StringgetDeploymentId();和StringgetDiagramResourceName();)
3) web页面标签<atarget="_blank"href="viewImage?deploymentId=1&imageName=imageName.png"rel="externalnofollow">查看流程图</a>
3、web项目查看当前流程图
publicStringviewCurrentImage(){ ProcessDefinitionpd=service.getProcessDefinitionByTaskId(taskId); //1.获取流程部署ID putContext("deploymentId",pd.getDeploymentId()); //2.获取流程图片的名称 putContext("imageName",pd.getDiagramResourceName()); //3.获取当前活动的坐标 Map<String,Object>currentActivityCoordinates=service.getCurrentActivityCoordinates(taskId); putContext("acs",currentActivityCoordinates); return"image"; }
其中service.getProcessDefinitionByTaskId(taskId);的代码实现:
publicProcessDefinitiongetProcessDefinitionByTaskId(StringtaskId){ //1.得到task Tasktask=taskService.createTaskQuery().taskId(taskId).singleResult(); //2.通过task对象的pdid获取流程定义对象 ProcessDefinitionpd=repositoryService.getProcessDefinition(task.getProcessDefinitionId()); returnpd; }
其中service.getCurrentActivityCoordinates(taskId);的代码实现:
publicMap<String,Object>getCurrentActivityCoordinates(StringtaskId){ Map<String,Object>coordinates=newHashMap<String,Object>(); //1.获取到当前活动的ID Tasktask=taskService.createTaskQuery().taskId(taskId).singleResult(); ProcessInstancepi=runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); StringcurrentActivitiId=pi.getActivityId(); //2.获取到流程定义 ProcessDefinitionEntitypd=(ProcessDefinitionEntity)repositoryService.getProcessDefinition(task.getProcessDefinitionId()); //3.使用流程定义通过currentActivitiId得到活动对象 ActivityImplactivity=pd.findActivity(currentActivitiId); //4.获取活动的坐标 coordinates.put("x",activity.getX()); coordinates.put("y",activity.getY()); coordinates.put("width",activity.getWidth()); coordinates.put("height",activity.getHeight()); returncoordinates; }
image页面部分:
从个人任务列表页面点击<atarget="_blank"href="/viewCurrentImage?taskId=1"rel="externalnofollow">查看当前流程图</a>跳转到下面页面:
<body> <!--1.获取到规则流程图这里是用的strust2的标签得到上面上面放入值栈的值--> <imgstyle="position:absolute;top:0px;left:0px;"src="viewImage?deploymentId=<s:propertyvalue="#deploymentId"/>&imageName=<s:propertyvalue="#imageName"/>"> <!--2.根据当前活动的坐标,动态绘制DIV--> <divstyle="position:absolute;border:1pxsolidred;top:<s:propertyvalue="#acs.y"/>px;left:<s:propertyvalue="#acs.x"/>px;width:<s:propertyvalue="#acs.width"/>px;height:<s:propertyvalue="#acs.height"/>px;"></div> </body>
相关文章
- Oracle触发器实例代码
- MySQL中on duplicate key update的使用方法实例
- MySQL一劳永逸永久支持输入中文的方法实例
- java代理IP设置实例详解编程语言
- 一个简单的绘制饼图的 Java Bean 实例详解编程语言
- 状态查看Oracle数据库实例DG状态指南(oracle查看dg)
- 状态查看Oracle实例状态:一个明智的方法(如何查看oracle实例)
- Oracle系统表实例深度剖析(系统表oracle)
- 掌握Oracle实例名称:简明查询步骤(查看oracle实例名称)
- Oracle查看当前实例:简单却有效的方法(oracle查看当前实例)
- Oracle查看实例名称的简易操作(oracle查看实例名称)
- 一键查看Redis实例快速了解集群状态(查看所有redis实例)
- 深入探索Redis连接实例(查看redis连接实例)
- 深入了解Redis缓存使用实例查看内存空间(查看redis缓存内存)
- 深入理解查看Redis实例的名称(查看redis实例名)
- jquery异步请求实例代码
- 探讨:如何查看和获取SQLServer实例名
- jquery滚动条事件简单实例
- Java解决约瑟夫问题代码实例
- jQuery瀑布流插件Wookmark使用实例
- jquery中show()、hide()和toggle()用法实例
- asp中使用redim、preserve创建动态数组实例
- NginxDNSresolver配置实例