啦啦啦。。。忙碌的时间过得快,最近系统提测,有个朋友问到activiti当前流程高亮的问题,于是我来开一篇基础教程。
既然是当前流程节点高亮显示,基础当然是把整个流程图都展示出来。在我整合modeler的文档中提到过,流程部署后就有一个流程图查看的链接。
这里,咱就依葫芦画瓢。先把整个流程图展示出来。
1、获取流程图,输出到页面。
public InputStream findProcessPic(String procDefId) {
ProcessDefinition definition = getProcessDefinition(procDefId);
String source = definition.getDiagramResourceName();
InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(),source);
return inputStream;
}根据当前流程的部署ID,获取到对应流程图的输入流。
InputStream inputStream = bpmProcessService.findProcessPic(procDefId);
byte[] b = new byte[1024];
int len = 0;
while ((len = inputStream.read(b,0,1024))!=-1){
response.getOutputStream().write(b, 0, len);
}将输入流输出到页面。<img src="${application.getContextPath()}/workflow/document/${procDefId!}">页面获取输出的图片信息并展示出来。朋友说用标签实现,其实无非就是数据的传递方式不一样,如果是需要使用其他方式的,自己改改数据传递方式就可以了。
2、获取当前流程所在节点,并高亮显示
ActivityImpl activity = null;
ProcessDefinition definition = getProcessDefinition(procDefId);
ProcessDefinitionImpl definitionImp = (ProcessDefinitionImpl)definition;
String proDefId = definitionImp.getId();
ProcessDefinitionEntity definitionEntity = (ProcessDefinitionEntity)
((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(proDefId);
Task task = bpmTaskService.selectTaskByProcessId(procInstId);
ExecutionEntity executionEntity = (ExecutionEntity)runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
String activitiId = executionEntity.getActivityId();
List<ActivityImpl> activities = definitionEntity.getActivities();
for(ActivityImpl activity1 : activities){
if(activity1.getId().equals(activitiId)){
activity = activity1;
break;
}
}
return activity;
根据流程部署ID获取所有节点信息
根据当前流程实例ID,获取到当前流程所在节点信息。
对比获取需要高亮显示的节点的流程图信息。
<div style="position:absolute; border:2px solid red;left:${activity.x+6 }px;
top:${activity.y+6 }px;width:${activity.width }px;height:${activity.height }px;"></div>
根据节点信息设置一个框,红色,标识当前节点为进行中节点。
备注:教程很简单,没有深入研究,并且只是支持单节点高亮,并行节点、已完成节点都不支持。并行节点返回当前所有节点的集合,然后遍历。已完成节点获取所有历史节点与其关联的线的信息即可,这里暂时不罗列,要是有时间我在研究出来给大家参考。
这篇教程介绍了如何在Activiti中实现当前流程节点的高亮显示。首先,通过流程部署获取流程图并展示。然后,利用流程实例ID获取当前节点信息,对比并突出显示。教程目前仅支持单节点高亮,未涉及并行节点和已完成节点的处理。
4798

被折叠的 条评论
为什么被折叠?



