@Test public void createSimpleModificationPlan() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> instances = helper.startInstances("process1", 2); runtimeService.createModification(processDefinition.getId()).startBeforeActivity("user2").cancelAllForActivity("user1").processInstanceIds(instances).execute(); for (String instanceId : instances) { List<String> activeActivityIds = runtimeService.getActiveActivityIds(instanceId); assertEquals(1, activeActivityIds.size()); assertEquals(activeActivityIds.iterator().next(), "user2"); } }
public void execute(ProcessEngine engine, String scenarioName) { String processDefinitionId = engine.getRepositoryService().createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcessModification_710") .singleResult() .getId(); List<String> processInstanceIds = new ArrayList<>(); for (int i = 0; i < 10; i++) { String processInstanceId = engine.getRuntimeService() .startProcessInstanceById(processDefinitionId, "ModificationBatchScenario").getId(); processInstanceIds.add(processInstanceId); } engine.getRuntimeService().createModification(processDefinitionId) .startAfterActivity("theStart") .startBeforeActivity("theTask") .startBeforeActivity("userTask4") .startTransition("flow2") .cancelAllForActivity("userTask4", false) .processInstanceIds(processInstanceIds) .skipCustomListeners() .skipIoMappings() .executeAsync(); } };
private ModificationBuilder createModificationBuilder(ModificationDto dto) { ModificationBuilder builder = getProcessEngine().getRuntimeService().createModification(dto.getProcessDefinitionId()); if (dto.getInstructions() != null && !dto.getInstructions().isEmpty()) { dto.applyTo(builder, getProcessEngine(), objectMapper); } List<String> processInstanceIds = dto.getProcessInstanceIds(); builder.processInstanceIds(processInstanceIds); ProcessInstanceQueryDto processInstanceQueryDto = dto.getProcessInstanceQuery(); if (processInstanceQueryDto != null) { ProcessInstanceQuery processInstanceQuery = processInstanceQueryDto.toQuery(getProcessEngine()); builder.processInstanceQuery(processInstanceQuery); } if (dto.isSkipCustomListeners()) { builder.skipCustomListeners(); } if (dto.isSkipIoMappings()) { builder.skipIoMappings(); } return builder; }
public Batch startAfterAsync(String key, int numberOfProcessInstances, String activityId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService .createModification(processDefinitionId) .startAfterActivity(activityId) .processInstanceIds(processInstanceIds) .executeAsync(); }
public Batch startTransitionAsync(String key, int numberOfProcessInstances, String transitionId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService.createModification(processDefinitionId).startTransition(transitionId).processInstanceIds(processInstanceIds).executeAsync(); }
@Test public void executeModificationWithNullProcessDefinitionIdSync() { doThrow(new BadUserRequestException("processDefinitionId must be set")) .when(modificationBuilderMock).execute(); verify(modificationBuilderMock).processInstanceIds(eq(Arrays.asList("100", "20"))); verify(modificationBuilderMock).cancelAllForActivity("activityId"); verify(modificationBuilderMock).startBeforeActivity("activityId"); verify(modificationBuilderMock).startAfterActivity("activityId"); verify(modificationBuilderMock).startTransition("transitionId"); verify(modificationBuilderMock).skipCustomListeners(); verify(modificationBuilderMock).skipIoMappings(); verify(modificationBuilderMock).execute();
@Test public void executeModificationJobsForStartBeforeAndCancelAll() { ProcessDefinition processDefinition = testRule.deployAndGetDefinition(instance); List<String> instances = helper.startInstances("process1", 10); Batch batch = runtimeService .createModification(processDefinition.getId()) .startBeforeActivity("user1") .cancelAllForActivity("user1") .processInstanceIds(instances) .executeAsync(); helper.executeSeedJob(batch); List<Job> modificationJobs = helper.getExecutionJobs(batch); // when for (Job modificationJob : modificationJobs) { helper.executeJob(modificationJob); } // then all process instances where modified for (String processInstanceId : helper.currentProcessInstances) { ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstanceId); assertNull(updatedTree); } // and the no modification jobs exist assertEquals(0, helper.getExecutionJobs(batch).size()); // but a monitor job exists assertNotNull(helper.getMonitorJob(batch)); }
@Test public void shouldCompleteParentProcessWithMultiInstance() { final BpmnModelInstance parentProcessInstance = Bpmn.createExecutableProcess("parentProcess") .startEvent() .callActivity("callActivity").calledElement("subprocess") .multiInstance().cardinality("3").multiInstanceDone() .endEvent() .done(); final BpmnModelInstance subprocessInstance = Bpmn.createExecutableProcess("subprocess") .startEvent() .userTask("userTask") .endEvent("subEnd") .done(); testHelper.deploy(parentProcessInstance, subprocessInstance); final String subprocessPrDefId = repositoryService.createProcessDefinitionQuery().processDefinitionKey("subprocess").singleResult().getId(); // given I start the process, which waits at user task inside multiinstance subprocess runtimeService.startProcessInstanceByKey("parentProcess"); final List<ProcessInstance> subprocesses = runtimeService.createProcessInstanceQuery().processDefinitionKey("subprocess").list(); assertEquals(3, subprocesses.size()); // when I do process instance modification runtimeService.createModification(subprocessPrDefId) .cancelAllForActivity("userTask") .startAfterActivity("userTask") .processInstanceIds(collectIds(subprocesses)) .execute(); // then the process should be finished assertThat(runtimeService.createProcessInstanceQuery().count(), is(0L)); }
@Test public void createModificationWithEmptyProcessInstanceIdsList() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceIds(Collections.<String> emptyList()).execute(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }
public Batch cancelAllAsync(String key, int numberOfProcessInstances, String activityId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService.createModification(processDefinitionId).cancelAllForActivity(activityId).processInstanceIds(processInstanceIds).executeAsync(); }
@Before public void setUpRuntimeData() { runtimeServiceMock = mock(RuntimeService.class); when(processEngine.getRuntimeService()).thenReturn(runtimeServiceMock); modificationBuilderMock = mock(ModificationBuilder.class); when(modificationBuilderMock.cancelAllForActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startAfterActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startBeforeActivity(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.startTransition(anyString())).thenReturn(modificationBuilderMock); when(modificationBuilderMock.processInstanceIds(anyListOf(String.class))).thenReturn(modificationBuilderMock); Batch batchMock = createMockBatch(); when(modificationBuilderMock.executeAsync()).thenReturn(batchMock); when(runtimeServiceMock.createModification(anyString())).thenReturn(modificationBuilderMock); }
@Test public void createModificationWithNullProcessDefinitionId() { try { runtimeService.createModification(null).cancelAllForActivity("activityId").processInstanceIds(Arrays.asList("20", "1--0")).execute(); fail("Should not succed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("processDefinitionId is null")); } }
public void execute(ProcessEngine engine, String scenarioName) { String processDefinitionId = engine.getRepositoryService().createProcessDefinitionQuery() .processDefinitionKey("oneTaskProcessInstanceModification_710") .singleResult() .getId(); String processInstanceId = engine.getRuntimeService() .startProcessInstanceById(processDefinitionId, "ProcessInstanceModificationScenario").getId(); engine.getRuntimeService().createModification(processDefinitionId) .processInstanceIds(processInstanceId) .startBeforeActivity("userTask2") .execute(); ActivityInstance tree = engine.getRuntimeService().getActivityInstance(processInstanceId); engine.getRuntimeService().createProcessInstanceModification(processInstanceId) .cancelActivityInstance(tree.getActivityInstances("userTask1")[0].getId()) .cancelTransitionInstance(tree.getTransitionInstances("userTask2")[0].getId()) .executeAsync(); } };
@Test public void testSkipListenerInvocationF() { // given DelegateEvent.clearEvents(); ProcessDefinition processDefinition = testRule.deployAndGetDefinition(modify(instance) .activityBuilder("user2") .camundaExecutionListenerClass(ExecutionListener.EVENTNAME_START, DelegateExecutionListener.class.getName()) .done()); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId()); Batch batch = runtimeService .createModification(processDefinition.getId()) .cancelAllForActivity("user2") .processInstanceIds(Arrays.asList(processInstance.getId())) .skipCustomListeners() .executeAsync(); helper.executeSeedJob(batch); // when helper.executeJobs(batch); // then assertEquals(0, DelegateEvent.getEvents().size()); }
public Batch startBeforeAsync(String key, int numberOfProcessInstances, String activityId, String processDefinitionId) { RuntimeService runtimeService = engineRule.getRuntimeService(); List<String> processInstanceIds = startInstances(key, numberOfProcessInstances); return runtimeService.createModification(processDefinitionId).startBeforeActivity(activityId).processInstanceIds(processInstanceIds).executeAsync(); }
@Test public void testSkipIoMappingInvocation() { // given ProcessDefinition processDefinition = testRule.deployAndGetDefinition(modify(instance) .activityBuilder("user2") .camundaInputParameter("foo", "bar") .done()); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId()); Batch batch = runtimeService .createModification(processDefinition.getId()) .startBeforeActivity("user2") .processInstanceIds(Arrays.asList(processInstance.getId())) .skipIoMappings() .executeAsync(); helper.executeSeedJob(batch); // when helper.executeJobs(batch); // then assertEquals(0, runtimeService.createVariableInstanceQuery().count()); }
.startTransition("seq") .cancelAllForActivity("user1") .processInstanceIds(instances) .executeAsync();
.startAfterActivity("user1") .cancelAllForActivity("user1") .processInstanceIds(instances) .executeAsync();
@Test public void testBatchCreationWithOverlappingProcessInstanceIdsAndQuery() { int processInstanceCount = 15; DeploymentWithDefinitions deployment = testRule.deploy(instance); ProcessDefinition processDefinition = deployment.getDeployedProcessDefinitions().get(0); List<String> processInstanceIds = helper.startInstances("process1", 15); ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(processDefinition.getId()); assertEquals(processInstanceCount, processInstanceQuery.count()); // when Batch batch = runtimeService .createModification(processDefinition.getId()) .startTransition("seq") .processInstanceIds(processInstanceIds) .processInstanceQuery(processInstanceQuery) .executeAsync(); // then a batch is created assertBatchCreated(batch, processInstanceCount); }
@Test public void testNullProcessInstanceQueryAsync() { try { runtimeService.createModification("processDefinitionId").startAfterActivity("user1").processInstanceQuery(null).executeAsync(); fail("Should not succeed"); } catch (ProcessEngineException e) { assertThat(e.getMessage(), containsString("Process instance ids is empty")); } }