时间:2021-05-21
本文中使用的activiti版本是5.22.0
一、绘图原理
activiti中提供了一个可以用来绘制流程图的类DefaultProcessDiagramGenerator,这个类在5.22.0及以上的版本中
是以一个单独jar包的方式提供的,所以还需要引入相应的依赖。
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-image-generator</artifactId> <version>5.22.0</version></dependency>使用时先创建这个类的对象,
//这个类在5.22.0往上的版本中才有DefaultProcessDiagramGenerator diagramGenerator=new DefaultProcessDiagramGenerator();然后调用画图方法
diagramGenerator.generateDiagram(bpmnModel, imageType, highLightedActivities);
其中的几个参数:
bpmnModel:当前流程对应的流程模型,可以通过repositoryService.getBpmnModel(processDefinitionId)获取
imageType:图片类型,jpg,png等
highLightedActivities:需要高亮显示的节点的id
二、根据流程定义id绘图
根据流程定义表act_re_procdef的主键id绘图,这时可以没有流程,只要流程图成功部署了就会产生act_re_procdef表的记录。所以也就不存在节点高亮的问题,因为这个图和流程实例无关。
@Test public void test1() throws Exception { //根据流程定义id来获取BpmnModel对象 String processDefinitionId="process:2:4304"; BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); //这个类在5.22.0往上的版本中才有 DefaultProcessDiagramGenerator diagramGenerator=new DefaultProcessDiagramGenerator(); //绘制bpmnModel代表的流程的流程图 InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", new ArrayList<String>()); FileOutputStream output=new FileOutputStream(new File("d:/test.png")); IOUtils.copy(inputStream, output); System.out.println("输出完成"); }注意这里generateDiagram()方法的第3个参数传了一个空list,这个list表示要高亮显示的节点的id集合。也就是流程图中每一个任务的id
三、根据流程实例id绘图
3.1 基本原理
上面已经实现了根据processDefinitionId画图。根据processInstanceId画图时,其实是先根据processInstanceId查询到对应的流程实例对象ProcessInstance,
然后通过流程实例对象获取到processDefinitionId,使用其中的get方法processInstance.getProcessDefinitionId()
再想办法获取到需要高亮显示的节点的id:当前节点+走过的节点。
3.2 当前节点的获取
使用runtimeService服务组件的方法来获取
String executionId=processInstance.getId();List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);activeActivityIds这个list就是当前节点的id集合,如果是并行流程会有多个,其他情况只有一个。
3.3 走过的节点的获取
走过的节点需要从activiti的历史行为表act_hi_actinst中获取。流程的行为数据记录在该表中,当流程进行到一个节点时,该表中会记录流程节点的信息,包括节点id,名称等。其中有一个ACT_ID_就代表流程图上对应节点的id
也就是需要高亮显示的节点id
所以我们要做的就是从这张表中查询到这个数据。activiti已经提供了查询这张表的api,可以通过historyService这个服务组件来获取
//得到已经走过的节点的id集合 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery(); List<HistoricActivityInstance> historicActivityInstanceList = historicActivityInstanceQuery.processInstanceId(processInstanceId).list(); for(HistoricActivityInstance hi:historicActivityInstanceList) { String taskKey=hi.getActivityId(); activeActivityIds.add(taskKey); }以上代码先查询出ACT_ID_,再把它们添加到需要高亮显示的集合activeActivityIds中
3.4 绘图
DefaultProcessDiagramGenerator defaultProcessDiagramGenerator=new DefaultProcessDiagramGenerator();//获取流程图的输入流InputStream inputStream = defaultProcessDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds);//输出图片到指定路径IOUtils.copy(inputStream, new FileOutputStream(new File("d:/test2.png")));System.out.println("输出成功");这样绘制出的流程图上已经走过的节点就会被高亮显示。
四、总结
绘制流程图的原理是使用DefaultProcessDiagramGenerator类中的方法
这个类在一个单独的jar中提供,需要新添加依赖
要高亮显示某些节点,就给画图方法中传入节点id的集合。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了activiti获取流程图的方法,具体操作步骤如下:1.发布流程代码如下:repositoryService.createDeployment()
本文实例展示了Activiti流程图查看的实现方法,具体步骤如下所示:1、测试用例查看图片代码如下:publicvoidviewImage()throwsExc
迅捷流程图制作软件如何撤销、操作?在使用迅捷流程图制作软件绘制流程图时,我们需要添加一些素材,在绘制的过程中,可能还需要删除这些素材,或者是执行撤销、重做等操作
前言:上篇详解js中构造流程图的核心技术JsPlumb介绍了下JsPlumb在浏览器里面画流程图的效果展示,以及简单的JsPlumb代码示例。这篇还是接着来看看
具体请看下面的流程图及其说明1,流程图2,流程说明:线程1开始请求接口获取1W条数据,当数据成功获取后,接口是闲置的,这时我们开始线程2获取数据,同时线程1继续