activiti当前流程高亮显示

来源:互联网 发布:歼31黑烟知乎 编辑:程序博客网 时间:2024/06/08 20:06

啦啦啦。。。忙碌的时间过得快,最近系统提测,有个朋友问到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>
根据节点信息设置一个框,红色,标识当前节点为进行中节点。

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

4 0
原创粉丝点击