@Test public void testIntermediateCatchEventMessageCorrelation() { //given BpmnModelInstance model = Bpmn.createExecutableProcess("Process_1") .startEvent() .subProcess("SubProcess_1").embeddedSubProcess() .startEvent() .intermediateCatchEvent("MessageReceiver_1").message(TEST_MESSAGE_NAME) .camundaInputParameter("localVar", "${loopVar}") .userTask("UserTask_1") .endEvent() .subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done(); testHelper.deploy(model); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("vars", Arrays.asList(1, 2, 3)); ProcessInstance processInstance = engineRule.getRuntimeService().startProcessInstanceByKey("Process_1", variables); //when correlated by local variables String messageName = TEST_MESSAGE_NAME; int correlationKey = 1; MessageCorrelationResult messageCorrelationResult = engineRule.getRuntimeService().createMessageCorrelation(messageName) .localVariableEquals("localVar", correlationKey).setVariables(Variables.createVariables().putValue("newVar", "newValue")).correlateWithResult(); //then one message is correlated, two others continue waiting checkExecutionMessageCorrelationResult(messageCorrelationResult, processInstance, "MessageReceiver_1"); //uncorrelated executions List<Execution> uncorrelatedExecutions = engineRule.getRuntimeService().createExecutionQuery().activityId("MessageReceiver_1").list(); assertEquals(2, uncorrelatedExecutions.size()); }
@Test public void testIntermediateCatchEventMessageCorrelation() { //given BpmnModelInstance model = Bpmn.createExecutableProcess("Process_1") .startEvent() .subProcess("SubProcess_1").embeddedSubProcess() .startEvent() .intermediateCatchEvent("MessageReceiver_1").message(TEST_MESSAGE_NAME) .camundaInputParameter("localVar", "${loopVar}") .userTask("UserTask_1") .endEvent() .subProcessDone() .multiInstance().camundaCollection("${vars}").camundaElementVariable("loopVar").multiInstanceDone() .endEvent().done(); testHelper.deploy(model); Map<String, Object> variables = new HashMap<String, Object>(); variables.put("vars", Arrays.asList(1, 2, 3)); ProcessInstance processInstance = engineRule.getRuntimeService().startProcessInstanceByKey("Process_1", variables); //when correlated by local variables String messageName = TEST_MESSAGE_NAME; int correlationKey = 1; MessageCorrelationResult messageCorrelationResult = engineRule.getRuntimeService().createMessageCorrelation(messageName) .localVariableEquals("localVar", correlationKey).setVariables(Variables.createVariables().putValue("newVar", "newValue")).correlateWithResult(); //then one message is correlated, two others continue waiting checkExecutionMessageCorrelationResult(messageCorrelationResult, processInstance, "MessageReceiver_1"); //uncorrelated executions List<Execution> uncorrelatedExecutions = engineRule.getRuntimeService().createExecutionQuery().activityId("MessageReceiver_1").list(); assertEquals(2, uncorrelatedExecutions.size()); }