public static HistoricProcessInstanceDto fromHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) { HistoricProcessInstanceDto dto = new HistoricProcessInstanceDto(); dto.id = historicProcessInstance.getId(); dto.businessKey = historicProcessInstance.getBusinessKey(); dto.processDefinitionId = historicProcessInstance.getProcessDefinitionId(); dto.processDefinitionKey = historicProcessInstance.getProcessDefinitionKey(); dto.processDefinitionName = historicProcessInstance.getProcessDefinitionName(); dto.processDefinitionVersion = historicProcessInstance.getProcessDefinitionVersion(); dto.startTime = historicProcessInstance.getStartTime(); dto.endTime = historicProcessInstance.getEndTime(); dto.removalTime = historicProcessInstance.getRemovalTime(); dto.durationInMillis = historicProcessInstance.getDurationInMillis(); dto.startUserId = historicProcessInstance.getStartUserId(); dto.startActivityId = historicProcessInstance.getStartActivityId(); dto.deleteReason = historicProcessInstance.getDeleteReason(); dto.rootProcessInstanceId = historicProcessInstance.getRootProcessInstanceId(); dto.superProcessInstanceId = historicProcessInstance.getSuperProcessInstanceId(); dto.superCaseInstanceId = historicProcessInstance.getSuperCaseInstanceId(); dto.caseInstanceId = historicProcessInstance.getCaseInstanceId(); dto.tenantId = historicProcessInstance.getTenantId(); dto.state = historicProcessInstance.getState(); return dto; }
public ProcessEngineException processDefinitionOfHistoricInstanceDoesNotMatchTheGivenOne(HistoricProcessInstance historicProcessInstance, String processDefinitionId) { return new ProcessEngineException(exceptionMessage( "039", "Historic process instance '{}' cannot be restarted. Its process definition '{}' does not match given process definition '{}'", historicProcessInstance.getId(), historicProcessInstance.getProcessDefinitionId(), processDefinitionId )); }
@Override public void checkDeleteHistoricProcessInstance(HistoricProcessInstance instance) { if (instance != null && !getTenantManager().isAuthenticatedTenant(instance.getTenantId())) { throw LOG.exceptionCommandWithUnauthorizedTenant("delete the historic process instance '"+ instance.getId() + "'"); } }
private void assertThatInstanceHasAllImportantInformation(HistoricProcessInstance historicProcessInstance) { assertThat(historicProcessInstance, notNullValue()); assertThat(historicProcessInstance.getId(), notNullValue()); assertThat(historicProcessInstance.getProcessDefinitionKey(), is("process")); assertThat(historicProcessInstance.getProcessDefinitionVersion(), notNullValue()); assertThat(historicProcessInstance.getProcessDefinitionId(), notNullValue()); assertThat(historicProcessInstance.getDurationInMillis(), notNullValue()); assertThat(historicProcessInstance.getStartTime(), notNullValue()); assertThat(historicProcessInstance.getEndTime(), notNullValue()); }
@Deployment(resources = EXCLUSIVE_GATEWAY_PROCESS) public void testHistoricProcessInstanceForSynchronousCompletion() { // when the process instance ends immediately ProcessInstance instance = runtimeService .createProcessInstanceByKey("exclusiveGateway") .startAfterActivity("task1") .execute(); // then HistoricProcessInstance historicInstance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertNotNull(historicInstance); assertEquals(instance.getId(), historicInstance.getId()); assertNotNull(historicInstance.getStartTime()); assertNotNull(historicInstance.getEndTime()); assertEquals("join", historicInstance.getStartActivityId()); }
assertEquals(processInstance.getId(), historicProcessInstance.getId()); assertEquals(processInstance.getBusinessKey(), historicProcessInstance.getBusinessKey()); assertEquals(processInstance.getProcessDefinitionId(), historicProcessInstance.getProcessDefinitionId()); assertEquals(noon, historicProcessInstance.getStartTime()); assertNull(historicProcessInstance.getEndTime()); assertNull(historicProcessInstance.getDurationInMillis()); assertNull(historicProcessInstance.getCaseInstanceId()); assertEquals(processInstance.getId(), historicProcessInstance.getId()); assertEquals(processInstance.getProcessDefinitionId(), historicProcessInstance.getProcessDefinitionId()); assertEquals(noon, historicProcessInstance.getStartTime()); assertEquals(twentyFiveSecsAfterNoon, historicProcessInstance.getEndTime()); assertEquals(new Long(25 * 1000), historicProcessInstance.getDurationInMillis()); assertTrue(((HistoricProcessInstanceEventEntity) historicProcessInstance).getDurationRaw() >= 25000); assertNull(historicProcessInstance.getCaseInstanceId());
public static HistoricProcessInstance createMockHistoricProcessInstanceUnfinished() { HistoricProcessInstance mock = mock(HistoricProcessInstance.class); when(mock.getId()).thenReturn(EXAMPLE_PROCESS_INSTANCE_ID); when(mock.getBusinessKey()).thenReturn(EXAMPLE_PROCESS_INSTANCE_BUSINESS_KEY); when(mock.getProcessDefinitionId()).thenReturn(EXAMPLE_PROCESS_DEFINITION_ID); when(mock.getDeleteReason()).thenReturn(EXAMPLE_HISTORIC_PROCESS_INSTANCE_DELETE_REASON); when(mock.getEndTime()).thenReturn(null); when(mock.getStartTime()).thenReturn(DateTimeUtil.parseDate(EXAMPLE_HISTORIC_PROCESS_INSTANCE_START_TIME)); when(mock.getDurationInMillis()).thenReturn(EXAMPLE_HISTORIC_PROCESS_INSTANCE_DURATION_MILLIS); return mock; }
/** * CAM-4067 */ @Deployment(resources = "org/camunda/bpm/engine/test/bpmn/event/end/TerminateEndEventTest.testTerminateInSubProcessConcurrent.bpmn") public void testTerminateInSubProcessConcurrentShouldNotEndProcessInstanceInHistory() throws Exception { // when process instance is started and terminate end event in subprocess executed ProcessInstance pi = runtimeService.startProcessInstanceByKey("terminateEndEventExample"); // then the historic process instance should not appear ended assertProcessNotEnded(pi.getId()); if (processEngineConfiguration.getHistoryLevel().getId() > ProcessEngineConfigurationImpl.HISTORYLEVEL_NONE) { HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().singleResult(); assertNotNull(hpi); assertNull(hpi.getEndTime()); assertNull(hpi.getDurationInMillis()); assertNull(hpi.getDeleteReason()); } }
@Deployment(resources = {"org/camunda/bpm/engine/test/api/oneTaskProcess.bpmn20.xml", "org/camunda/bpm/engine/test/api/history/orderProcess.bpmn20.xml", "org/camunda/bpm/engine/test/api/history/checkCreditProcess.bpmn20.xml"}) public void testHistoricProcessInstanceQueryByProcessDefinitionKey() { String processDefinitionKey = ONE_TASK_PROCESS; runtimeService.startProcessInstanceByKey(processDefinitionKey); runtimeService.startProcessInstanceByKey("orderProcess"); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processDefinitionKey(processDefinitionKey) .singleResult(); assertNotNull(historicProcessInstance); assertTrue(historicProcessInstance.getProcessDefinitionId().startsWith(processDefinitionKey)); assertEquals("theStart", historicProcessInstance.getStartActivityId()); // now complete the task to end the process instance Task task = taskService.createTaskQuery().processDefinitionKey("checkCreditProcess").singleResult(); Map<String, Object> map = new HashMap<String, Object>(); map.put("creditApproved", true); taskService.complete(task.getId(), map); // and make sure the super process instance is set correctly on the // HistoricProcessInstance HistoricProcessInstance historicProcessInstanceSub = historyService.createHistoricProcessInstanceQuery().processDefinitionKey("checkCreditProcess") .singleResult(); HistoricProcessInstance historicProcessInstanceSuper = historyService.createHistoricProcessInstanceQuery().processDefinitionKey("orderProcess") .singleResult(); assertEquals(historicProcessInstanceSuper.getId(), historicProcessInstanceSub.getSuperProcessInstanceId()); }
@Override public String getProperty(HistoricProcessInstance obj) { return obj.getId(); } });
protected HistoricActivityInstance resolveStartActivityInstance(HistoricProcessInstance processInstance) { HistoryService historyService = Context.getProcessEngineConfiguration().getHistoryService(); String processInstanceId = processInstance.getId(); String startActivityId = processInstance.getStartActivityId(); ensureNotNull("startActivityId", startActivityId); List<HistoricActivityInstance> historicActivityInstances = historyService .createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityId(startActivityId) .orderPartiallyByOccurrence() .asc() .list(); ensureNotEmpty("historicActivityInstances", historicActivityInstances); HistoricActivityInstance startActivityInstance = historicActivityInstances.get(0); return startActivityInstance; }
protected void applyProperties(ProcessInstantiationBuilderImpl instantiationBuilder, ProcessDefinition processDefinition, HistoricProcessInstance processInstance) { String tenantId = processInstance.getTenantId(); if (processDefinition.getTenantId() == null && tenantId != null) { instantiationBuilder.tenantId(tenantId); } if (!builder.isWithoutBusinessKey()) { instantiationBuilder.businessKey(processInstance.getBusinessKey()); } }
@Deployment(resources = {"org/camunda/bpm/engine/test/history/oneTaskProcess.bpmn20.xml"}) public void testHistoricProcessInstanceDelete() { ProcessInstance pi = runtimeService.startProcessInstanceByKey("oneTaskProcess"); runtimeService.deleteProcessInstance(pi.getId(), "cancel"); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertNotNull(historicProcessInstance.getDeleteReason()); assertEquals("cancel", historicProcessInstance.getDeleteReason()); assertNotNull(historicProcessInstance.getEndTime()); }
@Deployment(resources = ONE_TASK_PROCESS) public void testCancelTaskShouldCancelProcessInstance() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("oneTaskProcess").getId(); // when runtimeService .createProcessInstanceModification(processInstanceId) .cancelAllForActivity("theTask") .execute(true, false); // then HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertNotNull(instance); assertEquals(processInstanceId, instance.getId()); assertNotNull(instance.getEndTime()); }
@Override public String getProperty(HistoricProcessInstance obj) { return obj.getProcessDefinitionKey(); } });
@Deployment(resources = {"org/camunda/bpm/engine/test/history/oneTaskProcess.bpmn20.xml"}) public void testLongRunningHistoricDataCreatedForProcessExecution() { final long ONE_YEAR = 1000 * 60 * 60 * 24 * 365; Calendar cal = Calendar.getInstance(); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date now = cal.getTime(); ClockUtil.setCurrentTime(now); final ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", "myBusinessKey"); assertEquals(1, historyService.createHistoricProcessInstanceQuery().unfinished().count()); assertEquals(0, historyService.createHistoricProcessInstanceQuery().finished().count()); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult(); assertEquals(now, historicProcessInstance.getStartTime()); List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); assertEquals(1, tasks.size()); // in this test scenario we assume that one year after the process start, the // user completes the task (incredible speedy!) cal.add(Calendar.YEAR, 1); Date oneYearLater = cal.getTime(); ClockUtil.setCurrentTime(oneYearLater); taskService.complete(tasks.get(0).getId()); historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult(); assertEquals(now, historicProcessInstance.getStartTime()); assertEquals(oneYearLater, historicProcessInstance.getEndTime()); assertTrue(historicProcessInstance.getDurationInMillis() >= ONE_YEAR); assertTrue(((HistoricProcessInstanceEventEntity)historicProcessInstance).getDurationRaw() >= ONE_YEAR); assertEquals(0, historyService.createHistoricProcessInstanceQuery().unfinished().count()); assertEquals(1, historyService.createHistoricProcessInstanceQuery().finished().count()); }
@SuppressWarnings("deprecation") // deprecated method is tested here @Deployment(resources = {"org/camunda/bpm/engine/test/api/oneTaskProcess.bpmn20.xml"}) public void testHistoricProcessInstanceUserIdAndActivityId() { identityService.setAuthenticatedUserId("johndoe"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ONE_TASK_PROCESS); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertEquals("johndoe", historicProcessInstance.getStartUserId()); assertEquals("theStart", historicProcessInstance.getStartActivityId()); List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); assertEquals(1, tasks.size()); taskService.complete(tasks.get(0).getId()); historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertEquals("theEnd", historicProcessInstance.getEndActivityId()); }
protected void checkBusinessKeyChanged(String newBusinessKeyValue) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processDefinitionKey(PROCESS_KEY).singleResult(); assertNotNull(processInstance); assertEquals(newBusinessKeyValue, processInstance.getBusinessKey()); HistoricProcessInstance historicInstance = historyService.createHistoricProcessInstanceQuery().singleResult(); assertNotNull(historicInstance); assertEquals(newBusinessKeyValue, historicInstance.getBusinessKey()); }
assertNull(historicProcessInstance.getEndTime()); assertEquals(caseInstanceId, historicProcessInstance.getCaseInstanceId()); assertNotNull(historicProcessInstance.getEndTime()); assertEquals(caseInstanceId, historicProcessInstance.getCaseInstanceId());
@Override public Object execute(CommandContext commandContext) { //when List<String> historicProcessInstanceIdsForCleanup = commandContext.getHistoricProcessInstanceManager().findHistoricProcessInstanceIdsForCleanup( batchSize, 0, 60); //then assertEquals(resultCount, historicProcessInstanceIdsForCleanup.size()); if (resultCount > 0) { List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery() .processInstanceIds(new HashSet<String>(historicProcessInstanceIdsForCleanup)).list(); for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { assertNotNull(historicProcessInstance.getEndTime()); List<ProcessDefinition> processDefinitions = engineRule.getRepositoryService().createProcessDefinitionQuery() .processDefinitionId(historicProcessInstance.getProcessDefinitionId()).list(); assertEquals(1, processDefinitions.size()); ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) processDefinitions.get(0); assertTrue(historicProcessInstance.getEndTime().before(DateUtils.addDays(ClockUtil.getCurrentTime(), processDefinition.getHistoryTimeToLive()))); } } return null; } });