When I integrate with the diagram-viewer to tracing the flow going,there is a demand that user want to know how the process finished,especially when the task can cause the end event by "rejected" or "approved" with a Exclusive Gateway(For example).But the diagram-viewer can not deal with the finished process instance,because the ProcessInstanceHighlightsResource
class (ps: in the org.activiti.rest.diagram.services
package.) has that code snippet:
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());
the above code will throw out a NullPointException
because the processInstance = null
.I extended it by add this
if (processInstance == null) {
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService
.getProcessDefinition(historicProcessInstance.getProcessDefinitionId());
responseJSON.put("processDefinitionId", historicProcessInstance.getProcessDefinitionId());
highLightedActivities = Collections.emptyList();
highLightedFlows = getHighLightedFlows(processDefinition, processInstanceId);
} else {//TODO
}
now,we can get the red-wat sequence flow.But there is still a puzzle , whether this extension broken The Design Concept?Is process tracking only occurring at run time?