如何通过Kogito REST API获取已完成流程实例的SVG?
如何在Kogito中生成已完成流程实例的执行路径SVG(无需持久化优先)
核心限制说明
官方Process SVG插件仅支持从持久化的流程实例生成SVG,而Kogito默认只持久化未完成的实例,已完成实例会被自动清理,因此直接调用/svg/processes/{processId}/instances/{processInstanceId}接口无法获取已完成实例的SVG。
解决方案
方案1:重放流程实例生成SVG(无需持久化)
利用Kogito流程执行的确定性(相同输入会产生一致的执行路径),通过重放流程来生成目标SVG:
- 仅需保存已完成实例的输入数据和流程ID(无需存储整个实例,大幅降低存储开销)。
- 当需要生成SVG时:
- 调用流程启动接口,传入保存的输入数据,启动一个临时流程实例。
- 流程执行完成后,立即从内存中获取该临时实例的执行轨迹,结合BPMN模型生成SVG(可复用官方插件的SVG生成逻辑,或基于Kogito提供的API自行处理)。
- 临时实例无需持久化,执行完成后会自动被清理,不会占用长期存储资源。
方案2:自定义持久化执行轨迹并生成SVG(适配非确定性流程)
如果流程包含非确定性逻辑(如随机分支、外部依赖导致路径不一致),重放无法还原原执行路径,可以采用轻量化持久化执行轨迹的方式:
- 监听Kogito的
ProcessCompletedEvent事件,在流程完成时提取实例的执行节点序列(通过ProcessInstance.getNodeInstances()获取已执行的节点信息)。 - 将执行轨迹与实例ID、流程ID关联存储(仅存节点ID、执行时间等必要数据,避免大量存储占用)。
- 自定义SVG生成接口:加载对应BPMN模型,根据存储的执行轨迹标记已执行的节点,生成带高亮路径的SVG(无需依赖官方插件的实例查询逻辑)。
适配你的业务场景
- 返回输出数据的REST端点:直接返回预存的流程输出数据即可,无需关联流程实例。
- 返回SVG的端点:优先使用方案1(无额外存储开销);若流程存在非确定性逻辑,切换为方案2实现。
内容的提问来源于stack exchange,提问作者tinman
相关产品推荐
相关产品推荐

