Activiti流程图,高亮显示流程路径

网上有一些相关文章通常是查询历史表获取已完成的任务,然后通过流程模型判断连接到任务的flow,形成一个flowList,最后使用我前面文章提到的DefaultProcessDiagramGenerator来生成流程图。这种方式有个问题,就是如果一个任务连接了多个节点,流程不一定是从哪个节点过来的,导致的结果就是高亮流程路径并不准确(一个任务完成会把所有连接到该任务的所有路径都高亮显示),我们希望只高亮流程真正经过的路径。

针对上面的问题,下面是我自己的一个解决方案。

使用Listener记录每一步的流程路径

我们可以创建一个Activiti的监听Listener,监听一些Activiti的特殊事件,然后把流程相关信息保存记录到我们自定义的数据库表中。针对记录流程路径我们需要监听SEQUENCEFLOW_TAKEN事件。

创建SequenceFlowTakenEventListener并实现ActivitiEventListener接口,大致代码如下:

@Override
public boolean isFailOnException() {
    return false;
}

@Override
public void onEvent(ActivitiEvent event) {
    if (ActivitiEventType.SEQUENCEFLOW_TAKEN == event.getType()) {
        ActivitiSequenceFlowTakenEvent sequenceFlowTakenEvent = (ActivitiSequenceFlowTakenEvent) event;
        String id = sequenceFlowTakenEvent.getId();//路径id
        String source = sequenceFlowTakenEvent.getSourceActivityId();//源id
        String sourceName = sequenceFlowTakenEvent.getSourceActivityName();
        String target = sequenceFlowTakenEvent.getTargetActivityId();//目标id
        String targetName = sequenceFlowTakenEvent.getTargetActivityName();
        String procInstId = sequenceFlowTakenEvent.getProcessInstanceId();//实例id
        String procDefId = sequenceFlowTakenEvent.getProcessDefinitionId();//定义id
        String exeId = sequenceFlowTakenEvent.getExecutionId();//执行id
        //do some save operation
    }
}

上面代码只写了部分字段,还有一些其他字段可以根据自己需要获取。保存代码就省略了,保存路径后,再次生成高亮流程图时,查询使用保存的路径id即可,这样可以绝对的保证高亮的路径肯定是流程执行过的(可以使用实例id来进行查询)。

实际应用场景你可能需要对上面代码进行封装,以便获得更好的通用性。


Spring Boot 2.x 整合Activiti 6/7 流程引擎
解决Activiti流程图中文乱码问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容