未验证 提交 264eb7c2 编写于 作者: S salaboy 提交者: GitHub

Merge pull request #2449 from Activiti/miguel-2338-variables-conformance-tests

Variables conformance tests
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>activiti-spring-conformance-tests</artifactId>
<groupId>org.activiti</groupId>
<version>7.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>activiti-spring-conformance-variables</artifactId>
<packaging>jar</packaging>
<name>Activiti Spring :: Conformance Variables</name>
<description>Activiti Spring :: Conformance Variables</description>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-conformance-util</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-process-runtime</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-task-runtime</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-runtime-shared</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-task-model</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-process-model</artifactId>
</dependency>
<dependency>
<groupId>org.activiti.api</groupId>
<artifactId>activiti-api-model-shared</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.activiti.spring.conformance.variables;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
package org.activiti.spring.conformance.variables;
import org.activiti.api.model.shared.event.RuntimeEvent;
import org.activiti.api.model.shared.event.VariableEvent;
import org.activiti.api.model.shared.model.VariableInstance;
import org.activiti.api.process.model.ProcessInstance;
import org.activiti.api.process.model.builders.GetVariablesPayloadBuilder;
import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
import org.activiti.api.process.model.builders.SetVariablesPayloadBuilder;
import org.activiti.api.process.model.events.BPMNActivityEvent;
import org.activiti.api.process.model.events.BPMNSequenceFlowTakenEvent;
import org.activiti.api.process.model.events.ProcessRuntimeEvent;
import org.activiti.api.process.runtime.ProcessAdminRuntime;
import org.activiti.api.process.runtime.ProcessRuntime;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.events.TaskRuntimeEvent;
import org.activiti.spring.conformance.util.security.SecurityUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.activiti.spring.conformance.variables.VariablesRuntimeTestConfiguration.collectedEvents;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Java6Assertions.tuple;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class ProcessVariablesTest {
private final String processKey = "usertaskas-b5300a4b-8950-4486-ba20-a8d775a3d75d";
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private SecurityUtil securityUtil;
@Autowired
private ProcessAdminRuntime processAdminRuntime;
private String processInstanceId;
private List<VariableInstance> variableInstanceList;
@Before
public void cleanUp() {
collectedEvents.clear();
}
@Test
public void shouldGetSameNamesAndValues() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldGetProcessIdAndNotTaskId() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
assertThat(variableOneRuntime.getProcessInstanceId()).isEqualTo(processInstanceId);
assertThat(variableOneRuntime.getTaskId()).isNull();
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldNotBeTaskVariable() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
assertThat(variableOneRuntime.isTaskVariable()).isFalse();
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldGetRightVariableType(){
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
VariableInstance variableTwoRuntime = variableInstanceList.get(1);
assertThat(variableOneRuntime.getType()).isEqualTo("string");
assertThat(variableTwoRuntime.getType()).isEqualTo("integer");
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@After
public void cleanup() {
securityUtil.logInAs("admin");
Page<ProcessInstance> processInstancePage = processAdminRuntime.processInstances(Pageable.of(0, 50));
for (ProcessInstance pi : processInstancePage.getContent()) {
processAdminRuntime.delete(ProcessPayloadBuilder.delete(pi.getId()));
}
}
private void startProcess(){
processInstanceId = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey(processKey)
.withBusinessKey("my-business-key")
.withName("my-process-instance-name")
.build()).getId();
assertThat(collectedEvents)
.extracting(RuntimeEvent::getEventType)
.containsExactly(
ProcessRuntimeEvent.ProcessEvents.PROCESS_CREATED,
ProcessRuntimeEvent.ProcessEvents.PROCESS_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
TaskRuntimeEvent.TaskEvents.TASK_CREATED,
TaskRuntimeEvent.TaskEvents.TASK_ASSIGNED
);
collectedEvents.clear();
}
private void setVariables(){
Map<String, Object> variablesMap = new HashMap<>();
variablesMap.put("one", "variableOne");
variablesMap.put("two", 2);
processRuntime.setVariables(new SetVariablesPayloadBuilder().withVariables(variablesMap).withProcessInstanceId(processInstanceId).build());
variableInstanceList = processRuntime.variables(new GetVariablesPayloadBuilder().withProcessInstanceId(processInstanceId).build());
}
}
package org.activiti.spring.conformance.variables;
import org.activiti.api.model.shared.event.RuntimeEvent;
import org.activiti.api.model.shared.event.VariableEvent;
import org.activiti.api.process.model.ProcessInstance;
import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
import org.activiti.api.process.model.events.BPMNActivityEvent;
import org.activiti.api.process.model.events.BPMNSequenceFlowTakenEvent;
import org.activiti.api.process.model.events.ProcessRuntimeEvent;
import org.activiti.api.process.runtime.ProcessAdminRuntime;
import org.activiti.api.process.runtime.ProcessRuntime;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.Task;
import org.activiti.api.task.model.builders.GetTaskVariablesPayloadBuilder;
import org.activiti.api.task.model.builders.SetTaskVariablesPayloadBuilder;
import org.activiti.api.task.model.events.TaskRuntimeEvent;
import org.activiti.api.task.runtime.TaskRuntime;
import org.activiti.api.model.shared.model.VariableInstance;
import org.activiti.spring.conformance.util.security.SecurityUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.activiti.spring.conformance.variables.VariablesRuntimeTestConfiguration.collectedEvents;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Java6Assertions.tuple;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class TaskVariablesTest {
private final String processKey = "usertaskas-b5300a4b-8950-4486-ba20-a8d775a3d75d";
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private TaskRuntime taskRuntime;
@Autowired
private SecurityUtil securityUtil;
@Autowired
private ProcessAdminRuntime processAdminRuntime;
private String taskId;
private String processInstanceId;
private List<VariableInstance> variableInstanceList;
@Before
public void cleanUp() {
collectedEvents.clear();
}
@Test
public void shouldGetSameNamesAndValues() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldGetTaskIdAndProcessInstanceId() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
assertThat(variableOneRuntime.getTaskId()).isEqualTo(taskId);
assertThat(variableOneRuntime.getProcessInstanceId()).isEqualTo(processInstanceId);
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldBeTaskVariable() {
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
assertThat(variableOneRuntime.isTaskVariable()).isTrue();
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@Test
public void shouldGetRightVariableType(){
securityUtil.logInAs("user1");
startProcess();
setVariables();
VariableInstance variableOneRuntime = variableInstanceList.get(0);
VariableInstance variableTwoRuntime = variableInstanceList.get(1);
assertThat(variableOneRuntime.getType()).isEqualTo("string");
assertThat(variableTwoRuntime.getType()).isEqualTo("integer");
assertThat(collectedEvents)
.extracting("eventType","entity.name","entity.value")
.containsExactly(
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(0).getName(),
variableInstanceList.get(0).getValue()),
tuple( VariableEvent.VariableEvents.VARIABLE_CREATED,
variableInstanceList.get(1).getName(),
variableInstanceList.get(1).getValue())
);
}
@After
public void cleanup() {
securityUtil.logInAs("admin");
Page<ProcessInstance> processInstancePage = processAdminRuntime.processInstances(Pageable.of(0, 50));
for (ProcessInstance pi : processInstancePage.getContent()) {
processAdminRuntime.delete(ProcessPayloadBuilder.delete(pi.getId()));
}
}
private void startProcess(){
processInstanceId = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey(processKey)
.withBusinessKey("my-business-key")
.withName("my-process-instance-name")
.build()).getId();
assertThat(collectedEvents)
.extracting(RuntimeEvent::getEventType)
.containsExactly(
ProcessRuntimeEvent.ProcessEvents.PROCESS_CREATED,
ProcessRuntimeEvent.ProcessEvents.PROCESS_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
TaskRuntimeEvent.TaskEvents.TASK_CREATED,
TaskRuntimeEvent.TaskEvents.TASK_ASSIGNED
);
collectedEvents.clear();
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 50));
taskId = tasks.getContent().get(0).getId();
assertThat(tasks.getTotalItems()).isEqualTo(1);
}
private void setVariables(){
Map<String, Object> variablesMap = new HashMap<>();
variablesMap.put("one", "variableOne");
variablesMap.put("two", 2);
taskRuntime.setVariables(new SetTaskVariablesPayloadBuilder().withVariables(variablesMap).withTaskId(taskId).build());
variableInstanceList = taskRuntime.variables(new GetTaskVariablesPayloadBuilder().withTaskId(taskId).build());
}
}
package org.activiti.spring.conformance.variables;
import org.activiti.api.model.shared.event.RuntimeEvent;
import org.activiti.api.model.shared.event.VariableCreatedEvent;
import org.activiti.api.model.shared.event.VariableDeletedEvent;
import org.activiti.api.model.shared.event.VariableUpdatedEvent;
import org.activiti.api.process.model.events.BPMNActivityCancelledEvent;
import org.activiti.api.process.model.events.BPMNActivityCompletedEvent;
import org.activiti.api.process.model.events.BPMNActivityStartedEvent;
import org.activiti.api.process.model.events.BPMNSequenceFlowTakenEvent;
import org.activiti.api.process.runtime.events.*;
import org.activiti.api.process.runtime.events.listener.BPMNElementEventListener;
import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener;
import org.activiti.api.runtime.shared.events.VariableEventListener;
import org.activiti.api.task.runtime.events.*;
import org.activiti.api.task.runtime.events.listener.TaskEventListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class VariablesRuntimeTestConfiguration {
public static List<RuntimeEvent> collectedEvents = new ArrayList<>();
@Bean
public BPMNElementEventListener<BPMNActivityStartedEvent> bpmnActivityStartedListener() {
return bpmnActivityStartedEvent -> collectedEvents.add(bpmnActivityStartedEvent);
}
@Bean
public BPMNElementEventListener<BPMNActivityCompletedEvent> bpmnActivityCompletedListener() {
return bpmnActivityCompletedEvent -> collectedEvents.add(bpmnActivityCompletedEvent);
}
@Bean
public BPMNElementEventListener<BPMNSequenceFlowTakenEvent> bpmnSequenceFlowTakenListener() {
return bpmnSequenceFlowTakenEvent -> collectedEvents.add(bpmnSequenceFlowTakenEvent);
}
@Bean
public ProcessRuntimeEventListener<ProcessCreatedEvent> processCreatedListener() {
return processCreatedEvent -> collectedEvents.add(processCreatedEvent);
}
@Bean
public ProcessRuntimeEventListener<ProcessStartedEvent> processStartedListener() {
return processStartedEvent -> collectedEvents.add(processStartedEvent);
}
@Bean
public VariableEventListener<VariableCreatedEvent> variableCreatedEventListener() {
return variableCreatedEvent -> collectedEvents.add(variableCreatedEvent);
}
@Bean
public VariableEventListener<VariableDeletedEvent> variableDeletedEventListener() {
return variableDeletedEvent -> collectedEvents.add(variableDeletedEvent);
}
@Bean
public VariableEventListener<VariableUpdatedEvent> variableUpdatedEventListener() {
return variableUpdatedEvent -> collectedEvents.add(variableUpdatedEvent);
}
@Bean
public TaskEventListener<TaskCreatedEvent> taskCreatedEventListener() {
return taskCreatedEvent -> collectedEvents.add(taskCreatedEvent);
}
@Bean
public TaskEventListener<TaskAssignedEvent> taskAssignedEventListener() {
return taskAssignedEvent -> collectedEvents.add(taskAssignedEvent);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:activiti="http://activiti.org/bpmn" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="usertaskas-b5300a4b-8950-4486-ba20-a8d775a3d75d" name="UserTask Assignee Followed By Group1" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_1uccvwa</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1uccvwa" sourceRef="StartEvent_1" targetRef="Task_0pmsax8" />
<bpmn2:sequenceFlow id="SequenceFlow_151v2cg" sourceRef="Task_0pmsax8" targetRef="Task_0rdamee" />
<bpmn2:endEvent id="EndEvent_0zp4rcd">
<bpmn2:incoming>SequenceFlow_0le1m49</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_0le1m49" sourceRef="Task_0rdamee" targetRef="EndEvent_0zp4rcd" />
<bpmn2:userTask id="Task_0pmsax8" name="Task User1" activiti:assignee="user1">
<bpmn2:incoming>SequenceFlow_1uccvwa</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_151v2cg</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:userTask id="Task_0rdamee" name="Task Group1" activiti:candidateGroups="group1">
<bpmn2:incoming>SequenceFlow_151v2cg</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_0le1m49</bpmn2:outgoing>
</bpmn2:userTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="usertaskas-b5300a4b-8950-4486-ba20-a8d775a3d75d">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="103" y="33" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="76" y="69" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1uccvwa_di" bpmnElement="SequenceFlow_1uccvwa">
<di:waypoint x="139" y="51" />
<di:waypoint x="189" y="51" />
<bpmndi:BPMNLabel>
<dc:Bounds x="164" y="29.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_151v2cg_di" bpmnElement="SequenceFlow_151v2cg">
<di:waypoint x="289" y="51" />
<di:waypoint x="339" y="51" />
<bpmndi:BPMNLabel>
<dc:Bounds x="314" y="29.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_0zp4rcd_di" bpmnElement="EndEvent_0zp4rcd">
<dc:Bounds x="489" y="33" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="507" y="72" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0le1m49_di" bpmnElement="SequenceFlow_0le1m49">
<di:waypoint x="439" y="51" />
<di:waypoint x="489" y="51" />
<bpmndi:BPMNLabel>
<dc:Bounds x="464" y="29.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="UserTask_1yqq1gz_di" bpmnElement="Task_0pmsax8">
<dc:Bounds x="189" y="11" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="UserTask_1dbp00f_di" bpmnElement="Task_0rdamee">
<dc:Bounds x="339" y="11" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:activiti="http://activiti.org/bpmn" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="usertaskca-1e577517-7404-4645-b650-4fbde528f612" name="UserTask Candidate Group" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_10vblge</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_10vblge" sourceRef="StartEvent_1" targetRef="Task_0r8goei" />
<bpmn2:endEvent id="EndEvent_191qi0q">
<bpmn2:incoming>SequenceFlow_0vf8cap</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_0vf8cap" sourceRef="Task_0r8goei" targetRef="EndEvent_191qi0q" />
<bpmn2:userTask id="Task_0r8goei" name="Task Group 1" activiti:candidateGroups="group1">
<bpmn2:incoming>SequenceFlow_10vblge</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_0vf8cap</bpmn2:outgoing>
</bpmn2:userTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="usertaskca-1e577517-7404-4645-b650-4fbde528f612">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="157" y="100" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="130" y="136" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_10vblge_di" bpmnElement="SequenceFlow_10vblge">
<di:waypoint x="193" y="118" />
<di:waypoint x="243" y="118" />
<bpmndi:BPMNLabel>
<dc:Bounds x="218" y="96.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_191qi0q_di" bpmnElement="EndEvent_191qi0q">
<dc:Bounds x="393" y="100" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="411" y="139" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0vf8cap_di" bpmnElement="SequenceFlow_0vf8cap">
<di:waypoint x="343" y="118" />
<di:waypoint x="393" y="118" />
<bpmndi:BPMNLabel>
<dc:Bounds x="368" y="96.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="UserTask_13g60ey_di" bpmnElement="Task_0r8goei">
<dc:Bounds x="243" y="78" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:activiti="http://activiti.org/bpmn" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="usertaskgr-1a8cdf77-0981-45d4-8080-7cf1a80c973b" name="UserTask Candidate Group1 Followed by Group2" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_052072h</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_052072h" sourceRef="StartEvent_1" targetRef="Task_1dq9dtf" />
<bpmn2:sequenceFlow id="SequenceFlow_0cyfmaw" sourceRef="Task_1dq9dtf" targetRef="Task_0viibyv" />
<bpmn2:endEvent id="EndEvent_1ee100d">
<bpmn2:incoming>SequenceFlow_16g2n05</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_16g2n05" sourceRef="Task_0viibyv" targetRef="EndEvent_1ee100d" />
<bpmn2:userTask id="Task_1dq9dtf" name="Task Group 1" activiti:candidateGroups="group1">
<bpmn2:incoming>SequenceFlow_052072h</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_0cyfmaw</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:userTask id="Task_0viibyv" name="Task Group 2" activiti:candidateGroups="group2">
<bpmn2:incoming>SequenceFlow_0cyfmaw</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_16g2n05</bpmn2:outgoing>
</bpmn2:userTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="usertaskgr-1a8cdf77-0981-45d4-8080-7cf1a80c973b">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="121" y="66" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="94" y="102" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_052072h_di" bpmnElement="SequenceFlow_052072h">
<di:waypoint x="157" y="84" />
<di:waypoint x="207" y="84" />
<bpmndi:BPMNLabel>
<dc:Bounds x="182" y="62.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0cyfmaw_di" bpmnElement="SequenceFlow_0cyfmaw">
<di:waypoint x="307" y="84" />
<di:waypoint x="357" y="84" />
<bpmndi:BPMNLabel>
<dc:Bounds x="332" y="62.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_1ee100d_di" bpmnElement="EndEvent_1ee100d">
<dc:Bounds x="507" y="66" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="525" y="105" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_16g2n05_di" bpmnElement="SequenceFlow_16g2n05">
<di:waypoint x="457" y="84" />
<di:waypoint x="507" y="84" />
<bpmndi:BPMNLabel>
<dc:Bounds x="482" y="62.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="UserTask_10d3usd_di" bpmnElement="Task_1dq9dtf">
<dc:Bounds x="207" y="44" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="UserTask_1rlpea8_di" bpmnElement="Task_0viibyv">
<dc:Bounds x="357" y="44" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
......@@ -23,5 +23,6 @@
<module>activiti-spring-conformance-set3</module>
<module>activiti-spring-conformance-set4</module>
<module>activiti-spring-conformance-set5</module>
<module>activiti-spring-conformance-variables</module>
</modules>
</project>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册