通过processInstanceId查询bpmn
时间: 2023-06-01 14:03:49 浏览: 46
需要使用BPMN引擎的API来查询,具体方法如下:
1. 获取BPMN引擎对象
BPMN引擎对象可以通过ProcessEngine类的静态方法getDefaultProcessEngine()获取:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
2. 使用ProcessInstanceQuery对象查询
ProcessInstanceQuery对象可以通过ProcessEngine类的processInstanceQuery()方法获取:
ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
3. 设置查询条件
可以使用processInstanceId()方法设置查询条件:
query.processInstanceId(processInstanceId);
4. 执行查询并获取结果
可以使用list()方法执行查询并获取结果:
List<ProcessInstance> instances = query.list();
5. 获取BPMN模型对象
可以使用ProcessDefinition对象的getId()方法获取BPMN模型的ID,然后通过BpmnModel对象的静态方法parseModelFromStream()获取BPMN模型对象:
ProcessDefinition definition = processEngine.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionId(instances.get(0).getProcessDefinitionId())
.singleResult();
BpmnModel model = Bpmn.readModelFromStream(processEngine.getRepositoryService()
.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()));
6. 获取BPMN流程图
可以使用BpmnDiagramGenerator对象的generatePngDiagram()方法生成BPMN流程图:
InputStream inputStream = processEngine.getRepositoryService().getProcessDiagram(
definition.getDeploymentId(), definition.getResourceName());
BufferedImage image = ImageIO.read(inputStream);
完整代码示例:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
query.processInstanceId(processInstanceId);
List<ProcessInstance> instances = query.list();
ProcessDefinition definition = processEngine.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionId(instances.get(0).getProcessDefinitionId())
.singleResult();
BpmnModel model = Bpmn.readModelFromStream(processEngine.getRepositoryService()
.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()));
InputStream inputStream = processEngine.getRepositoryService().getProcessDiagram(
definition.getDeploymentId(), definition.getResourceName());
BufferedImage image = ImageIO.read(inputStream);