Search code examples
javabusiness-process-managementbpmncamunda

How to query finished instances of a process definition?


Does the camunda engine provides an API to query all finished instances of a process?


Solution

  • You can get all finished instances of a process using the following code:

    package org.camunda.bpm;
    
    import org.camunda.bpm.engine.HistoryService;
    import org.camunda.bpm.engine.ProcessEngine;
    import org.camunda.bpm.engine.RepositoryService;
    import org.camunda.bpm.engine.history.HistoricProcessInstance;
    import org.camunda.bpm.engine.repository.ProcessDefinition;
    import java.util.List;
    
    public class AllFinishedProcessInstances {
    
      public List<HistoricProcessInstance> getAllFinishedProcessInstances(String processDefinitionName) {
        ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine();
        HistoryService historyService = processEngine.getHistoryService();;
        RepositoryService repositoryService = processEngine.getRepositoryService();
    
        ProcessDefinition myProcessDefinition =
            repositoryService.createProcessDefinitionQuery()
                .processDefinitionName(processDefinitionName)
                .latestVersion() // we are only interested in the latest version
                .singleResult();
    
        List<HistoricProcessInstance> processInstances =
            historyService.createHistoricProcessInstanceQuery()
                .processDefinitionId(myProcessDefinition.getId())
                .finished() // we only want the finished process instances
                .list();
    
        return processInstances;
      }
    
    }