activiti当前流程高亮显示

啦啦啦。。。忙碌的时间过得快,最近系统提测,有个朋友问到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);
			}
将输入流输出到页面。
页面获取输出的图片信息并展示出来。朋友说用标签实现,其实无非就是数据的传递方式不一样,如果是需要使用其他方式的,自己改改数据传递方式就可以了。

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 activities = definitionEntity.getActivities();
        for(ActivityImpl activity1 : activities){
            if(activity1.getId().equals(activitiId)){
                activity = activity1;
                break;
            }
        }
        return activity;
 
  
 
  
 根据流程部署ID获取所有节点信息 
  

根据当前流程实例ID,获取到当前流程所在节点信息。

对比获取需要高亮显示的节点的流程图信息。

 根据节点信息设置一个框,红色,标识当前节点为进行中节点。 
  

备注:教程很简单,没有深入研究,并且只是支持单节点高亮,并行节点、已完成节点都不支持。并行节点返回当前所有节点的集合,然后遍历。已完成节点获取所有历史节点与其关联的线的信息即可,这里暂时不罗列,要是有时间我在研究出来给大家参考。

你可能感兴趣的:(activiti)