zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Activiti流程图查看实例

实例 查看 流程图 activiti
2023-06-13 09:15:40 时间

本文实例展示了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>