cancel
Showing results for 
Search instead for 
Did you mean: 

Get process diagram of inactive process

bpmn
Champ in-the-making
Champ in-the-making
Hi. Is there a way to get a diagram of inactive historical process?
For now I can get process diagrams of processes with active task highlited like that

            List<String> activities =
                    runtimeService.getActiveActivityIds(processInstanceId);
            String processDefinitionId =
                    runtimeService.createProcessInstanceQuery()
                    .processInstanceId(processInstanceId)
                    .singleResult()
                    .getProcessDefinitionId();
            imageStream = ProcessDiagramGenerator
            .generateDiagram(repositoryService.getBpmnModel(processDefinitionId), "png", activities);

I can replace RuntimeService with HistoricalService, but if I pass process id of completed process I get  "execution XXXX doesn't exist".
2 REPLIES 2

bpmn
Champ in-the-making
Champ in-the-making
Sorry, my bad. Have found my unrelated mistake. Now I'm doing it like this:
<java>
    public static InputStream drawActiveProcessDiagram(String processInstanceId)
    {
        ActivitiEngineServiceImpl engineInstance = ActivitiEngineServiceImpl.getInstance();
        RuntimeService runtimeService = engineInstance.getRuntimeService();
        RepositoryService repositoryService = engineInstance.getRepositoryService();
        HistoryService historyService = engineInstance.getHistoryService();

        InputStream imageStream = null;
        String processDefinitionId =
                historyService.createHistoricProcessInstanceQuery()
                .processInstanceId(processInstanceId)
                .singleResult()
                .getProcessDefinitionId();

        try
        {
            List<String> activities =
                    runtimeService.getActiveActivityIds(processInstanceId);
            imageStream = ProcessDiagramGenerator
                    .generateDiagram(repositoryService.getBpmnModel(processDefinitionId), "png", activities);
        }
        catch (org.activiti.engine.ActivitiObjectNotFoundException e)
        {
            imageStream = ProcessDiagramGenerator
                    .generatePngDiagram(repositoryService.getBpmnModel(processDefinitionId));
        }
        return imageStream;
    }
</java>
I think I should find a better way to check if the process is active, but now it looks like this.

jbarrez
Star Contributor
Star Contributor
Checking if the process instance is active is done by doing a process instance query for that id and see if null is returned. When is is not active anymore, it is deleted from the runtime table.