//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testMigrateHistoricIncidentAddScope() public virtual void testMigrateHistoricIncidentAddScope() { // given ProcessDefinition sourceProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS); ProcessDefinition targetProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_USER_TASK_PROCESS); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcess.Id, targetProcess.Id).mapActivities("userTask", "userTask").build(); ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcess.Id); Job job = managementService.createJobQuery().singleResult(); managementService.setJobRetries(job.Id, 0); // when runtimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute(); // then ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id); HistoricIncident historicIncident = historyService.createHistoricIncidentQuery().singleResult(); Assert.assertNotNull(historicIncident); Assert.assertEquals(activityInstance.getTransitionInstances("userTask")[0].ExecutionId, historicIncident.ExecutionId); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testExecuteExclusiveFollowUpJobInDifferentProcessInstance() public virtual void testExecuteExclusiveFollowUpJobInDifferentProcessInstance() { testHelper.deploy(CALL_ACTIVITY_PROCESS, ONE_TASK_PROCESS); // given // a process instance with a single job ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceByKey("callActivityProcess"); jobExecutor.start(); // and first job acquisition that acquires the job acquisitionThread.waitForSync(); acquisitionThread.makeContinueAndWaitForSync(); // and job is executed acquisitionThread.makeContinueAndWaitForSync(); // then // the called instance has been created ProcessInstance calledInstance = engineRule.RuntimeService.createProcessInstanceQuery().superProcessInstanceId(processInstance.Id).singleResult(); Assert.assertNotNull(calledInstance); // and there is a transition instance for the service task ActivityInstance activityInstance = engineRule.RuntimeService.getActivityInstance(calledInstance.Id); Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask").Length); // but the corresponding job is not locked JobEntity followUpJob = (JobEntity)engineRule.ManagementService.createJobQuery().singleResult(); Assert.assertNotNull(followUpJob); Assert.assertNull(followUpJob.LockOwner); Assert.assertNull(followUpJob.LockExpirationTime); }
public virtual void testDefaultCompensationHandlerHistoryActivityInstance() { // given a process instance ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("defaultHandlerProcess"); // when throwing compensation Task beforeCompensationTask = taskService.createTaskQuery().singleResult(); taskService.complete(beforeCompensationTask.Id); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id); string compensationHandlerActivityInstanceId = tree.getActivityInstances("compensationHandler")[0].Id; string subProcessActivityInstanceId = tree.getActivityInstances("subProcess")[0].Id; // .. and completing compensation Task compensationHandler = taskService.createTaskQuery().singleResult(); taskService.complete(compensationHandler.Id); // then there is a historic activity instance for the compensation handler HistoricActivityInstance historicCompensationHandlerInstance = historyService.createHistoricActivityInstanceQuery().activityId("compensationHandler").singleResult(); assertNotNull(historicCompensationHandlerInstance); assertEquals(compensationHandlerActivityInstanceId, historicCompensationHandlerInstance.Id); assertEquals(subProcessActivityInstanceId, historicCompensationHandlerInstance.ParentActivityInstanceId); }
public virtual void testMigrateHistoryUserTaskInstance() { //given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS).changeElementId("Process", "Process2").changeElementId("userTask", "userTask2")); MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask", "userTask2").build(); ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcessDefinition.Id); HistoricTaskInstanceQuery sourceHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(sourceProcessDefinition.Id); HistoricTaskInstanceQuery targetHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(targetProcessDefinition.Id); ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id); //when assertEquals(1, sourceHistoryTaskInstanceQuery.count()); assertEquals(0, targetHistoryTaskInstanceQuery.count()); ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.Id); runtimeService.newMigration(migrationPlan).processInstanceQuery(sourceProcessInstanceQuery).execute(); //then assertEquals(0, sourceHistoryTaskInstanceQuery.count()); assertEquals(1, targetHistoryTaskInstanceQuery.count()); HistoricTaskInstance instance = targetHistoryTaskInstanceQuery.singleResult(); assertEquals(targetProcessDefinition.Key, instance.ProcessDefinitionKey); assertEquals(targetProcessDefinition.Id, instance.ProcessDefinitionId); assertEquals("userTask2", instance.TaskDefinitionKey); assertEquals(activityInstance.getActivityInstances("userTask")[0].Id, instance.ActivityInstanceId); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testCanOnlyTriggerCompensationInParentOfRemovedScope() public virtual void testCanOnlyTriggerCompensationInParentOfRemovedScope() { BpmnModelInstance sourceModel = ProcessModels.newModel().startEvent().subProcess("outerSubProcess").embeddedSubProcess().startEvent().userTask("userTask1").boundaryEvent("compensationBoundary").compensateEventDefinition().compensateEventDefinitionDone().moveToActivity("userTask1").subProcess("innerSubProcess").embeddedSubProcess().startEvent().userTask("userTask2").endEvent().subProcessDone().endEvent().subProcessDone().done(); CompensationModels.addUserTaskCompensationHandler(sourceModel, "compensationBoundary", "compensationHandler"); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceModel); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL).endEventBuilder("subProcessEnd").compensateEventDefinition().waitForCompletion(true).compensateEventDefinitionDone().done()); MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("innerSubProcess", "subProcess").mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build(); ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id); testHelper.completeTask("userTask1"); testHelper.migrateProcessInstance(migrationPlan, processInstance); // when testHelper.completeTask("userTask2"); // then compensation is not triggered from inside the inner sub process // but only on process definition level ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done()); }
public virtual void FAILING_testDefaultCompensationHandlerHistoryVariableInstance() { // given a process instance ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("defaultHandlerProcess"); // when throwing compensation Task beforeCompensationTask = taskService.createTaskQuery().singleResult(); taskService.complete(beforeCompensationTask.Id); ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id); string compensationHandlerActivityInstanceId = tree.getActivityInstances("compensationHandler")[0].Id; // .. setting a variable via task service API Task compensationHandler = taskService.createTaskQuery().singleResult(); runtimeService.setVariableLocal(compensationHandler.ExecutionId, "apiVariable", "someValue"); // .. and completing compensation taskService.complete(compensationHandler.Id); // then there is a historic variable instance for the variable set by API HistoricVariableInstance historicVariableInstance = historyService.createHistoricVariableInstanceQuery().singleResult(); assertNotNull(historicVariableInstance); assertEquals(compensationHandlerActivityInstanceId, historicVariableInstance.ActivityInstanceId); }
public virtual void testInterruptingEscalationEventSubprocessInsideSubprocess() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("escalationProcess"); // an escalation event is thrown from embedded subprocess and caught by interrupting event subprocess inside the subprocess ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id); assertThat(tree).hasStructure(describeActivityInstanceTree(processInstance.ProcessDefinitionId).beginScope("subProcess").beginScope("escalationEventSubprocess").activity("taskAfterCatchedEscalation").done()); }
public virtual void testInitConcurrentTriggerCompensationActivityInstanceTree() { // given active compensation ProcessInstance instance = rule.processInstance(); // then the activity instance tree is meaningful ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("throwCompensate").activity("undoTask1").activity("undoTask2").done()); }
public virtual string getInstanceIdForActivity(ActivityInstance activityInstance, string activityId) { ActivityInstance instance = getChildInstanceForActivity(activityInstance, activityId); if (instance != null) { return(instance.Id); } return(null); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Deployment public void testNonInterruptingEventInCombinationWithReceiveTaskInsideSubProcess() public virtual void testNonInterruptingEventInCombinationWithReceiveTaskInsideSubProcess() { // given ProcessInstance instance = runtimeService.startProcessInstanceByKey("process"); string processInstanceId = instance.Id; // when (1) runtimeService.correlateMessage("firstMessage"); // then (1) ActivityInstance activityInstance = runtimeService.getActivityInstance(instance.Id); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("subProcess").activity("task1").beginScope("innerSubProcess").activity("receiveTask").done()); assertEquals(1, taskService.createTaskQuery().count()); Task task1 = taskService.createTaskQuery().taskDefinitionKey("task1").singleResult(); assertNotNull(task1); Execution task1Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult(); assertFalse(processInstanceId.Equals(((ExecutionEntity)task1Execution).ParentId)); // when (2) runtimeService.correlateMessage("secondMessage"); // then (2) assertEquals(2, taskService.createTaskQuery().count()); task1 = taskService.createTaskQuery().taskDefinitionKey("task1").singleResult(); assertNotNull(task1); task1Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult(); assertFalse(processInstanceId.Equals(((ExecutionEntity)task1Execution).ParentId)); Task task2 = taskService.createTaskQuery().taskDefinitionKey("task2").singleResult(); assertNotNull(task2); Execution task2Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult(); assertFalse(processInstanceId.Equals(((ExecutionEntity)task2Execution).ParentId)); assertTrue(((ExecutionEntity)task1Execution).ParentId.Equals(((ExecutionEntity)task2Execution).ParentId)); assertEquals(0, runtimeService.createEventSubscriptionQuery().count()); taskService.complete(task1.Id); taskService.complete(task2.Id); assertProcessEnded(processInstanceId); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: protected org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity determineSourceInstanceExecution(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext) protected internal override ExecutionEntity determineSourceInstanceExecution(CommandContext commandContext) { ActivityInstance instance = commandContext.runWithoutAuthorization(new CallableAnonymousInnerClass(this, commandContext)); TransitionInstance instanceToCancel = findTransitionInstance(instance, transitionInstanceId); EnsureUtil.ensureNotNull(typeof(NotValidException), describeFailure("Transition instance '" + transitionInstanceId + "' does not exist"), "transitionInstance", instanceToCancel); ExecutionEntity transitionExecution = commandContext.ExecutionManager.findExecutionById(instanceToCancel.ExecutionId); return(transitionExecution); }
public virtual void testInitAsyncBeforeSubprocessActivityInstanceTree() { // given ProcessInstance instance = rule.processInstance(); // when ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); // then Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).transition("miSubProcess").done()); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: @Override public void execute(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception public virtual void execute(DelegateExecution execution) { RuntimeService runtimeService = engine.RuntimeService; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process"); // then the wait state is reached immediately after instantiation ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id); ActivityInstance[] activityInstances = activityInstance.getActivityInstances("waitState"); Assert.assertEquals(1, activityInstances.Length); }
public virtual void testInitNestedActivityInstance() { // given ProcessInstance instance = rule.processInstance(); // when ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); // then Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("subProcess").activity("task1").activity("task2").done()); }
public virtual void testActivityInstanceTree() { // given ProcessInstance instance = rule.processInstance(); // when ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); // then Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("eventSubProcessTask").done()); }
public virtual void testInitNonInterruptingBoundaryEventActivityInstanceTree() { // given ProcessInstance instance = rule.processInstance(); // when ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); // then Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("afterBoundaryTask").beginMiBody("miSubProcess").activity("subProcessTask").done()); }
public void execute(ProcessEngine engine, string scenarioName) { string processDefinitionId = engine.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("oneTaskProcessInstanceModification_710").singleResult().Id; string processInstanceId = engine.RuntimeService.startProcessInstanceById(processDefinitionId, "ProcessInstanceModificationScenario").Id; engine.RuntimeService.createModification(processDefinitionId).processInstanceIds(processInstanceId).startBeforeActivity("userTask2").execute(); ActivityInstance tree = engine.RuntimeService.getActivityInstance(processInstanceId); engine.RuntimeService.createProcessInstanceModification(processInstanceId).cancelActivityInstance(tree.getActivityInstances("userTask1")[0].Id).cancelTransitionInstance(tree.getTransitionInstances("userTask2")[0].Id).executeAsync(); }
public virtual void testInitThrowCompensateActivityInstanceTree() { // given ProcessInstance processInstance = rule.processInstance(); // when ActivityInstance tree = rule.RuntimeService.getActivityInstance(processInstance.Id); // then Assert.assertNotNull(tree); assertThat(tree).hasStructure(describeActivityInstanceTree(processInstance.ProcessDefinitionId).activity("outerTask").beginScope("throwCompensate").activity("undoTask").done()); }
public virtual void testInitActivityInstanceTree() { // given ProcessInstance instance = rule.processInstance(); // when compensation is thrown Task beforeCompensationTask = rule.taskQuery().singleResult(); rule.TaskService.complete(beforeCompensationTask.Id); // then the activity instance tree is meaningful ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("throwCompensate").beginScope("subProcess").activity("undoTask").done()); }
public virtual void testInitThrowErrorActivityInstanceTree() { // given ProcessInstance instance = rule.processInstance(); Task innerEventSubProcessTask = rule.taskQuery().taskDefinitionKey("innerEventSubProcessTask").singleResult(); // when rule.RuntimeService.setVariable(instance.Id, ThrowBpmnErrorDelegate.ERROR_INDICATOR_VARIABLE, true); rule.TaskService.complete(innerEventSubProcessTask.Id); ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id); // then Assert.assertNotNull(activityInstance); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("outerEventSubProcess").activity("outerEventSubProcessTask").done()); }
public static ActivityInstanceDto fromActivityInstance(ActivityInstance instance) { ActivityInstanceDto result = new ActivityInstanceDto(); result.id = instance.Id; result.parentActivityInstanceId = instance.ParentActivityInstanceId; result.activityId = instance.ActivityId; result.activityType = instance.ActivityType; result.processInstanceId = instance.ProcessInstanceId; result.processDefinitionId = instance.ProcessDefinitionId; result.childActivityInstances = fromListOfActivityInstance(instance.ChildActivityInstances); result.childTransitionInstances = TransitionInstanceDto.fromListOfTransitionInstance(instance.ChildTransitionInstances); result.executionIds = instance.ExecutionIds; result.activityName = instance.ActivityName; return(result); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: protected org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity determineSourceInstanceExecution(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext) protected internal override ExecutionEntity determineSourceInstanceExecution(CommandContext commandContext) { ExecutionEntity processInstance = commandContext.ExecutionManager.findExecutionById(processInstanceId); // rebuild the mapping because the execution tree changes with every iteration ActivityExecutionTreeMapping mapping = new ActivityExecutionTreeMapping(commandContext, processInstanceId); ActivityInstance instance = commandContext.runWithoutAuthorization(new CallableAnonymousInnerClass(this, commandContext)); ActivityInstance instanceToCancel = findActivityInstance(instance, activityInstanceId); EnsureUtil.ensureNotNull(typeof(NotValidException), describeFailure("Activity instance '" + activityInstanceId + "' does not exist"), "activityInstance", instanceToCancel); ExecutionEntity scopeExecution = getScopeExecutionForActivityInstance(processInstance, mapping, instanceToCancel); return(scopeExecution); }
public virtual ActivityInstance getChildInstanceForActivity(ActivityInstance activityInstance, string activityId) { if (activityId.Equals(activityInstance.ActivityId)) { return(activityInstance); } foreach (ActivityInstance childInstance in activityInstance.ChildActivityInstances) { ActivityInstance instance = getChildInstanceForActivity(childInstance, activityId); if (instance != null) { return(instance); } } return(null); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void modifyAProcessInstanceWithLocalVariableCreation() public virtual void modifyAProcessInstanceWithLocalVariableCreation() { // given a process that sets a local variable when entering the user task BpmnModelInstance instance = Bpmn.createExecutableProcess("Process").startEvent().userTask("userTask").camundaTaskListenerClass("create", "org.camunda.bpm.engine.test.api.runtime.util.CreateLocalVariableEventListener").endEvent().done(); testHelper.deployAndGetDefinition(instance); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Process"); ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstance.Id); // when I start another activity and delete the old one runtimeService.createProcessInstanceModification(processInstance.Id).startBeforeActivity("userTask").cancelActivityInstance(updatedTree.getActivityInstances("userTask")[0].Id).execute(false, false); // then migration was successful and I can finish the process Task task = taskService.createTaskQuery().singleResult(); taskService.complete(task.Id); testHelper.assertProcessEnded(processInstance.Id); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testExecuteExclusiveFollowUpJobInSameProcessInstance() public virtual void testExecuteExclusiveFollowUpJobInSameProcessInstance() { testHelper.deploy(TWO_TASKS_PROCESS); // given // a process instance with a single job ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceByKey("process"); jobExecutor.start(); // and first job acquisition that acquires the job acquisitionThread.waitForSync(); acquisitionThread.makeContinueAndWaitForSync(); // and first job execution acquisitionThread.makeContinue(); // waiting inside delegate executionThread.waitForSync(); // completing delegate executionThread.makeContinueAndWaitForSync(); // then // the follow-up job should be executed right away // i.e., there is a transition instance for the second service task ActivityInstance activityInstance = engineRule.RuntimeService.getActivityInstance(processInstance.Id); Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask2").Length); // and the corresponding job is locked JobEntity followUpJob = (JobEntity)engineRule.ManagementService.createJobQuery().singleResult(); Assert.assertNotNull(followUpJob); Assert.assertNotNull(followUpJob.LockOwner); Assert.assertNotNull(followUpJob.LockExpirationTime); // and the job can be completed successfully such that the process instance ends executionThread.makeContinue(); acquisitionThread.waitForSync(); // and the process instance has finished testHelper.assertProcessEnded(processInstance.Id); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testCase2AssertActivityInstance() public virtual void testCase2AssertActivityInstance() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL); MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build(); ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id); testHelper.completeTask("userTask1"); testHelper.migrateProcessInstance(migrationPlan, processInstance); // when throwing compensation testHelper.completeTask("userTask2"); // then the activity instance tree is correct ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done()); }
/// <summary> /// The guarantee given by the API is: Compensation can be triggered in the scope that it could be triggered before /// migration. Thus, it should not be possible to trigger compensation from the new sub process instance but only from the /// parent scope, i.e. the process definition instance /// </summary> //JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void testCase1CannotTriggerCompensationInNewScope() public virtual void testCase1CannotTriggerCompensationInNewScope() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL).endEventBuilder("subProcessEnd").compensateEventDefinition().waitForCompletion(true).compensateEventDefinitionDone().done()); MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build(); ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id); testHelper.completeTask("userTask1"); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then compensation is only caught outside of the subProcess testHelper.completeTask("userTask2"); ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id); assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done()); }
public virtual void testInitThrowCompensateCancelEventSubProcess() { // given ProcessInstance processInstance = rule.processInstance(); Task outerTask = rule.taskQuery().taskDefinitionKey("outerTask").singleResult(); Task undoTask = rule.taskQuery().taskDefinitionKey("undoTask").singleResult(); // when compensation is finished rule.TaskService.complete(undoTask.Id); Task afterCompensateTask = rule.taskQuery().taskDefinitionKey("afterCompensate").singleResult(); Assert.assertNotNull(afterCompensateTask); // then the event sub process instance can be cancelled with modification ActivityInstance tree = rule.RuntimeService.getActivityInstance(processInstance.Id); ActivityInstance afterCompensateInstance = tree.getActivityInstances("afterCompensate")[0]; rule.RuntimeService.createProcessInstanceModification(processInstance.Id).cancelActivityInstance(afterCompensateInstance.Id).execute(); // and the remaining outerTask can be completed successfully rule.TaskService.complete(outerTask.Id); rule.assertScenarioEnded(); }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public void execute(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception public virtual void execute(DelegateExecution execution) { activityInstance = execution.ProcessEngineServices.RuntimeService.getActivityInstance(execution.ProcessInstanceId); }