protected BpmnModelInstance addConditionalEventSubProcess(BpmnModelInstance model, String parentId, String conditionExpr, String userTaskId, boolean isInterrupting) { return modify(model) .addSubProcessTo(parentId) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .condition(conditionExpr) .userTask(userTaskId) .name(TASK_AFTER_CONDITION) .endEvent().done(); }
protected BpmnModelInstance addEventSubProcess(BpmnModelInstance model, String parentId, String userTaskName, boolean isInterrupting) { return modify(model) .addSubProcessTo(parentId) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(userTaskName) .endEvent() .done(); }
@Override public BpmnModelInstance specifyConditionalProcess(BpmnModelInstance modelInstance, boolean isInterrupting) { return modify(modelInstance) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); }
@Override public BpmnModelInstance getProcessWithVarEvents(boolean interrupting, String varEvent) { return modify(TASK_MODEL) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(interrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .camundaVariableEvents(varEvent) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); }
@Override public BpmnModelInstance getProcessWithVarName(boolean interrupting, String condition) { return modify(TASK_MODEL) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(interrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(condition) .camundaVariableName(VARIABLE_NAME) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); }
.embeddedSubProcess() .startEvent() .interrupting(true) .conditionalEventDefinition() .condition("${variable == 1}")
@Override public BpmnModelInstance getProcessWithVarNameAndEvents(boolean interrupting, String varEvent) { return modify(TASK_MODEL) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(interrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .camundaVariableName(VARIABLE_NAME) .camundaVariableEvents(varEvent) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); }
protected void deployConditionalEventSubProcess(BpmnModelInstance model, String parentId, boolean isInterrupting) { final BpmnModelInstance modelInstance = modify(model) .addSubProcessTo(parentId) .id("eventSubProcess") .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask("taskAfterCond") .name(TASK_AFTER_CONDITION) .endEvent().done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); }
.embeddedSubProcess() .startEvent() .interrupting(true) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR)
.embeddedSubProcess() .startEvent() .interrupting(true) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR)
public void testNonInterruptingWithDurationExpressionInEventSubprocess() { // given ProcessBuilder processBuilder = Bpmn.createExecutableProcess("process"); BpmnModelInstance modelInstance = processBuilder .startEvent() .userTask() .endEvent().done(); processBuilder.eventSubProcess() .startEvent().interrupting(false).timerWithDuration("${duration}") .userTask("taskInSubprocess") .endEvent(); deploymentId = repositoryService.createDeployment() .addModelInstance("process.bpmn", modelInstance).deploy() .getId(); // when runtimeService.startProcessInstanceByKey("process", Variables.createVariables() .putValue("duration", "PT60S")); String jobId = managementService.createJobQuery() .singleResult() .getId(); managementService.executeJob(jobId); // then assertEquals(1, taskService.createTaskQuery().taskName("taskInSubprocess").list().size()); }
.embeddedSubProcess() .startEvent() .interrupting(false) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR)
.embeddedSubProcess() .startEvent() .interrupting(true) .conditionalEventDefinition() .condition(TRUE_CONDITION)
@Override public BpmnModelInstance specifyConditionalProcess(BpmnModelInstance modelInstance, boolean isInterrupting) { modelInstance = modify(modelInstance) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITIONAL_START_EVENT) .endEvent() .done(); return modify(modelInstance) .activityBuilder(TASK_WITH_CONDITION_ID) .boundaryEvent() .cancelActivity(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITIONAL_BOUNDARY_EVENT) .endEvent() .done(); }
@Test public void testMigrateNonInterruptingEventSubprocessMessageTrigger() { BpmnModelInstance nonInterruptingModel = modify(EventSubProcessModels.MESSAGE_EVENT_SUBPROCESS_PROCESS) .startEventBuilder(EVENT_SUB_PROCESS_START_ID) .interrupting(false) .done(); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(nonInterruptingModel); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(nonInterruptingModel); ProcessInstance processInstance = rule.getRuntimeService().startProcessInstanceById(sourceProcessDefinition.getId()); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID) .build(); // when testHelper.migrateProcessInstance(migrationPlan, processInstance); // then testHelper.assertEventSubscriptionMigrated(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID, EventSubProcessModels.MESSAGE_NAME); // and it is possible to trigger the event subprocess rule.getRuntimeService().correlateMessage(EventSubProcessModels.MESSAGE_NAME); Assert.assertEquals(2, rule.getTaskService().createTaskQuery().count()); // and complete the process instance testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.completeTask(USER_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
.embeddedSubProcess() .startEvent() .interrupting(false) .conditionalEventDefinition() .condition(TRUE_CONDITION)
protected BpmnModelInstance addConditionalEventSubProcess(BpmnModelInstance model, String parentId, String conditionExpr, String userTaskId, boolean isInterrupting) { return modify(model) .addSubProcessTo(parentId) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .condition(conditionExpr) .userTask(userTaskId) .name(TASK_AFTER_CONDITION) .endEvent().done(); }
@Override public BpmnModelInstance specifyConditionalProcess(BpmnModelInstance modelInstance, boolean isInterrupting) { return modify(modelInstance) .addSubProcessTo(CONDITIONAL_EVENT_PROCESS_KEY) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); }
protected BpmnModelInstance addEventSubProcess(BpmnModelInstance model, String parentId, String userTaskName, boolean isInterrupting) { return modify(model) .addSubProcessTo(parentId) .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(userTaskName) .endEvent() .done(); }
protected void deployConditionalEventSubProcess(BpmnModelInstance model, String parentId, boolean isInterrupting) { final BpmnModelInstance modelInstance = modify(model) .addSubProcessTo(parentId) .id("eventSubProcess") .triggerByEvent() .embeddedSubProcess() .startEvent() .interrupting(isInterrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask("taskAfterCond") .name(TASK_AFTER_CONDITION) .endEvent().done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); }