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

Merge pull request #2357 from Activiti/2337-salaboy-conformance-set5

conformance set5
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-conformance-tests</artifactId>
<version>7.0.0-SNAPSHOT</version>
</parent>
<artifactId>activiti-spring-conformance-set5</artifactId>
<packaging>jar</packaging>
<name>Activiti Spring :: Conformance Set 5</name>
<description>Activiti Spring :: Conformance Set 5</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>
package org.activiti.spring.conformance.set5;
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.set5;
import org.activiti.api.model.shared.event.RuntimeEvent;
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.TaskPayloadBuilder;
import org.activiti.api.task.model.events.TaskRuntimeEvent;
import org.activiti.api.task.runtime.TaskRuntime;
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 static org.activiti.spring.conformance.set5.Set5RuntimeTestConfiguration.collectedEvents;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class BasicCallActivityAndServiceTaskTest {
private final String processKey = "basiccalla-bdf1f7af-7cc7-45c7-a206-8b5c46a8198f";
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private TaskRuntime taskRuntime;
@Autowired
private SecurityUtil securityUtil;
@Autowired
private ProcessAdminRuntime processAdminRuntime;
@Before
public void cleanUp() {
collectedEvents.clear();
}
@Test
public void shouldCheckCallActivityWaitingOnUserTask() {
securityUtil.logInAs("user1");
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey(processKey)
.withBusinessKey("my-business-key")
.withProcessInstanceName("my-process-instance-name")
.build());
//then
assertThat(processInstance).isNotNull();
assertThat(processInstance.getStatus()).isEqualTo(ProcessInstance.ProcessInstanceStatus.COMPLETED);
assertThat(processInstance.getBusinessKey()).isEqualTo("my-business-key");
assertThat(processInstance.getName()).isEqualTo("my-process-instance-name");
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,
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,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED
);
collectedEvents.clear();
}
@After
public void cleanup() {
securityUtil.logInAs("admin");
Page<ProcessInstance> processInstancePage = processAdminRuntime.processInstances(Pageable.of(0, 50));
for (ProcessInstance pi : processInstancePage.getContent()) {
// We want to delete root processes instances because sub processes will be deleted automatically when the root ones are deleted
if(pi.getParentId() == null) {
processAdminRuntime.delete(ProcessPayloadBuilder.delete(pi.getId()));
}
}
}
}
package org.activiti.spring.conformance.set5;
import org.activiti.api.model.shared.event.RuntimeEvent;
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.TaskPayloadBuilder;
import org.activiti.api.task.model.events.TaskRuntimeEvent;
import org.activiti.api.task.runtime.TaskRuntime;
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 static org.activiti.spring.conformance.set5.Set5RuntimeTestConfiguration.collectedEvents;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class BasicCallActivityTest {
private final String processKey = "basiccalla-feb36a19-3821-40a8-a72a-fbe9ba7cb4d8";
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private TaskRuntime taskRuntime;
@Autowired
private SecurityUtil securityUtil;
@Autowired
private ProcessAdminRuntime processAdminRuntime;
@Before
public void cleanUp() {
collectedEvents.clear();
}
@Test
public void shouldCheckCallActivityWaitingOnUserTask() {
securityUtil.logInAs("user1");
ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey(processKey)
.withBusinessKey("my-business-key")
.withProcessInstanceName("my-process-instance-name")
.build());
//then
assertThat(processInstance).isNotNull();
assertThat(processInstance.getStatus()).isEqualTo(ProcessInstance.ProcessInstanceStatus.RUNNING);
assertThat(processInstance.getBusinessKey()).isEqualTo("my-business-key");
assertThat(processInstance.getName()).isEqualTo("my-process-instance-name");
// I should be able to get the process instance from the Runtime because it is still running
ProcessInstance processInstanceById = processRuntime.processInstance(processInstance.getId());
assertThat(processInstanceById).isEqualTo(processInstance);
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,
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();
// I should get a task for User1
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 50));
assertThat(tasks.getTotalItems()).isEqualTo(1);
Task task = tasks.getContent().get(0);
Task taskById = taskRuntime.task(task.getId());
assertThat(taskById.getStatus()).isEqualTo(Task.TaskStatus.ASSIGNED);
assertThat(task).isEqualTo(taskById);
assertThat(task.getAssignee()).isEqualTo("user1");
// Completing the task should complete the sub process
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());
assertThat(collectedEvents)
.extracting(RuntimeEvent::getEventType)
.containsExactly(
TaskRuntimeEvent.TaskEvents.TASK_COMPLETED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED,
BPMNActivityEvent.ActivityEvents.ACTIVITY_COMPLETED,
BPMNSequenceFlowTakenEvent.SequenceFlowEvents.SEQUENCE_FLOW_TAKEN,
BPMNActivityEvent.ActivityEvents.ACTIVITY_STARTED,
TaskRuntimeEvent.TaskEvents.TASK_CREATED,
TaskRuntimeEvent.TaskEvents.TASK_ASSIGNED);
collectedEvents.clear();
}
@After
public void cleanup() {
securityUtil.logInAs("admin");
Page<ProcessInstance> processInstancePage = processAdminRuntime.processInstances(Pageable.of(0, 50));
for (ProcessInstance pi : processInstancePage.getContent()) {
// We want to delete root processes instances because sub processes will be deleted automatically when the root ones are deleted
if(pi.getParentId() == null) {
processAdminRuntime.delete(ProcessPayloadBuilder.delete(pi.getId()));
}
}
}
}
package org.activiti.spring.conformance.set5;
import org.activiti.api.process.model.ProcessDefinition;
import org.activiti.api.process.model.ProcessDefinitionMeta;
import org.activiti.api.process.runtime.ProcessRuntime;
import org.activiti.api.process.runtime.conf.ProcessRuntimeConfiguration;
import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener;
import org.activiti.api.runtime.shared.events.VariableEventListener;
import org.activiti.api.runtime.shared.query.Page;
import org.activiti.api.runtime.shared.query.Pageable;
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 org.activiti.spring.conformance.util.security.SecurityUtil;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class ConformanceBasicProcessRuntimeTest {
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private SecurityUtil securityUtil;
@Test
public void shouldGetConfiguration() {
securityUtil.logInAs("user1");
//when
ProcessRuntimeConfiguration configuration = processRuntime.configuration();
//then
assertThat(configuration).isNotNull();
//when
List<ProcessRuntimeEventListener<?>> processRuntimeEventListeners = configuration.processEventListeners();
List<VariableEventListener<?>> variableEventListeners = configuration.variableEventListeners();
//then
assertThat(processRuntimeEventListeners).hasSize(10);
assertThat(variableEventListeners).hasSize(3);
}
@Test
public void shouldProcessDefinitions() {
securityUtil.logInAs("user1");
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 50));
List<ProcessDefinition> processDefinitions = processDefinitionPage.getContent();
assertThat(processDefinitions).extracting(ProcessDefinition::getName).contains(
"Basic Call Activity",
"Basic Call Activity With Service Task",
"Sub Process A",
"Sub Process B"
);
}
@Test
public void shouldProcessDefinitionsMetaData() {
securityUtil.logInAs("user1");
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 50));
List<ProcessDefinition> processDefinitions = processDefinitionPage.getContent();
assertThat(processDefinitions).extracting(ProcessDefinition::getName).contains(
"Basic Call Activity",
"Basic Call Activity With Service Task",
"Sub Process A",
"Sub Process B"
);
}
}
package org.activiti.spring.conformance.set5;
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.connector.Connector;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class Set5RuntimeTestConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(Set5RuntimeTestConfiguration.class);
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<BPMNActivityCancelledEvent> bpmnActivityCancelledListener() {
return bpmnActivityCancelledEvent -> collectedEvents.add(bpmnActivityCancelledEvent);
}
@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 ProcessRuntimeEventListener<ProcessCompletedEvent> processCompletedListener() {
return processCompletedEvent -> collectedEvents.add(processCompletedEvent);
}
@Bean
public ProcessRuntimeEventListener<ProcessResumedEvent> processResumedListener() {
return processResumedEvent -> collectedEvents.add(processResumedEvent);
}
@Bean
public ProcessRuntimeEventListener<ProcessSuspendedEvent> processSuspendedListener() {
return processSuspendedEvent -> collectedEvents.add(processSuspendedEvent);
}
@Bean
public ProcessRuntimeEventListener<ProcessCancelledEvent> processCancelledListener() {
return processCancelledEvent -> collectedEvents.add(processCancelledEvent);
}
@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<TaskUpdatedEvent> taskUpdatedEventListener() {
return taskUpdatedEvent -> collectedEvents.add(taskUpdatedEvent);
}
@Bean
public TaskEventListener<TaskCompletedEvent> taskCompletedEventListener() {
return taskCompletedEvent -> collectedEvents.add(taskCompletedEvent);
}
@Bean
public TaskEventListener<TaskSuspendedEvent> taskSuspendedEventListener() {
return taskSuspendedEvent -> collectedEvents.add(taskSuspendedEvent);
}
@Bean
public TaskEventListener<TaskAssignedEvent> taskAssignedEventListener() {
return taskAssignedEvent -> collectedEvents.add(taskAssignedEvent);
}
@Bean(name = "connector-a")
public Connector connectorA() {
return integrationContext -> {
return integrationContext;
};
}
@Bean(name = "connector-b")
public Connector connectorB() {
return integrationContext -> {
return integrationContext;
};
}
}
<?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" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="basiccalla-bdf1f7af-7cc7-45c7-a206-8b5c46a8198f" name="Basic Call Activity With Service Task" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_16avh94</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_16avh94" sourceRef="StartEvent_1" targetRef="Task_08p8iet" />
<bpmn2:callActivity id="Task_08p8iet" name="SubProcess B" calledElement="subprocess-9b037ac3-eb95-4eeb-8283-e71ffd2e7d11">
<bpmn2:incoming>SequenceFlow_16avh94</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_1t80m21</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:endEvent id="EndEvent_0hh4zxf">
<bpmn2:incoming>SequenceFlow_1t80m21</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1t80m21" sourceRef="Task_08p8iet" targetRef="EndEvent_0hh4zxf" />
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="basiccalla-bdf1f7af-7cc7-45c7-a206-8b5c46a8198f">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="150" y="125" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="123" y="161" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_16avh94_di" bpmnElement="SequenceFlow_16avh94">
<di:waypoint x="186" y="143" />
<di:waypoint x="236" y="143" />
<bpmndi:BPMNLabel>
<dc:Bounds x="211" y="121.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="CallActivity_003zdt9_di" bpmnElement="Task_08p8iet">
<dc:Bounds x="236" y="103" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_0hh4zxf_di" bpmnElement="EndEvent_0hh4zxf">
<dc:Bounds x="386" y="125" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="404" y="164" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1t80m21_di" bpmnElement="SequenceFlow_1t80m21">
<di:waypoint x="336" y="143" />
<di:waypoint x="386" y="143" />
<bpmndi:BPMNLabel>
<dc:Bounds x="361" y="121" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</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="basiccalla-feb36a19-3821-40a8-a72a-fbe9ba7cb4d8" name="Basic Call Activity" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_1jjdsur</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_1jjdsur" sourceRef="StartEvent_1" targetRef="Task_0tnsd93" />
<bpmn2:callActivity id="Task_0tnsd93" name="Sub Process A" calledElement="subprocess-8851dcba-722d-4b9c-9251-7811cb8b0e57">
<bpmn2:incoming>SequenceFlow_1jjdsur</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_0m5bnla</bpmn2:outgoing>
</bpmn2:callActivity>
<bpmn2:sequenceFlow id="SequenceFlow_0m5bnla" sourceRef="Task_0tnsd93" targetRef="Task_1wjq5ah" />
<bpmn2:endEvent id="EndEvent_0oqugim">
<bpmn2:incoming>SequenceFlow_16r1u8g</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_16r1u8g" sourceRef="Task_1wjq5ah" targetRef="EndEvent_0oqugim" />
<bpmn2:userTask id="Task_1wjq5ah" name="User Task User 1" activiti:assignee="user1">
<bpmn2:incoming>SequenceFlow_0m5bnla</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_16r1u8g</bpmn2:outgoing>
</bpmn2:userTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="basiccalla-feb36a19-3821-40a8-a72a-fbe9ba7cb4d8">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="303" y="156" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="276" y="192" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1jjdsur_di" bpmnElement="SequenceFlow_1jjdsur">
<di:waypoint x="339" y="174" />
<di:waypoint x="389" y="174" />
<bpmndi:BPMNLabel>
<dc:Bounds x="364" y="152.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="CallActivity_1rjandf_di" bpmnElement="Task_0tnsd93">
<dc:Bounds x="389" y="134" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0m5bnla_di" bpmnElement="SequenceFlow_0m5bnla">
<di:waypoint x="489" y="174" />
<di:waypoint x="539" y="174" />
<bpmndi:BPMNLabel>
<dc:Bounds x="514" y="152.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_0oqugim_di" bpmnElement="EndEvent_0oqugim">
<dc:Bounds x="689" y="156" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="707" y="195" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_16r1u8g_di" bpmnElement="SequenceFlow_16r1u8g">
<di:waypoint x="639" y="174" />
<di:waypoint x="689" y="174" />
<bpmndi:BPMNLabel>
<dc:Bounds x="664" y="152.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="UserTask_076t997_di" bpmnElement="Task_1wjq5ah">
<dc:Bounds x="539" y="134" 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="subprocess-8851dcba-722d-4b9c-9251-7811cb8b0e57" name="Sub Process A" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_11mmox8</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_11mmox8" sourceRef="StartEvent_1" targetRef="Task_0xthec8" />
<bpmn2:endEvent id="EndEvent_08ng22d">
<bpmn2:incoming>SequenceFlow_039jd0d</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_039jd0d" sourceRef="Task_0xthec8" targetRef="EndEvent_08ng22d" />
<bpmn2:userTask id="Task_0xthec8" name="Sub - User Task User 1" activiti:assignee="user1">
<bpmn2:incoming>SequenceFlow_11mmox8</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_039jd0d</bpmn2:outgoing>
</bpmn2:userTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="subprocess-8851dcba-722d-4b9c-9251-7811cb8b0e57">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="412" y="240" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_11mmox8_di" bpmnElement="SequenceFlow_11mmox8">
<di:waypoint x="448" y="258" />
<di:waypoint x="498" y="258" />
<bpmndi:BPMNLabel>
<dc:Bounds x="473" y="236.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_08ng22d_di" bpmnElement="EndEvent_08ng22d">
<dc:Bounds x="648" y="240" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="666" y="279" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_039jd0d_di" bpmnElement="SequenceFlow_039jd0d">
<di:waypoint x="598" y="258" />
<di:waypoint x="648" y="258" />
<bpmndi:BPMNLabel>
<dc:Bounds x="623" y="236.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="UserTask_082pmyc_di" bpmnElement="Task_0xthec8">
<dc:Bounds x="498" y="218" 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" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="subprocess-9b037ac3-eb95-4eeb-8283-e71ffd2e7d11" name="Sub Process B" isExecutable="true">
<bpmn2:documentation />
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:outgoing>SequenceFlow_0fo0vkf</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:sequenceFlow id="SequenceFlow_0fo0vkf" sourceRef="StartEvent_1" targetRef="Task_01zrjxr" />
<bpmn2:endEvent id="EndEvent_198krch">
<bpmn2:incoming>SequenceFlow_0w1pm6d</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_0w1pm6d" sourceRef="Task_01zrjxr" targetRef="EndEvent_198krch" />
<bpmn2:serviceTask id="Task_01zrjxr" name="Service Task A" implementation="connector-a">
<bpmn2:incoming>SequenceFlow_0fo0vkf</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_0w1pm6d</bpmn2:outgoing>
</bpmn2:serviceTask>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="subprocess-9b037ac3-eb95-4eeb-8283-e71ffd2e7d11">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="254" y="125" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="227" y="161" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0fo0vkf_di" bpmnElement="SequenceFlow_0fo0vkf">
<di:waypoint x="290" y="143" />
<di:waypoint x="340" y="143" />
<bpmndi:BPMNLabel>
<dc:Bounds x="315" y="121.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="EndEvent_198krch_di" bpmnElement="EndEvent_198krch">
<dc:Bounds x="490" y="125" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="508" y="164" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0w1pm6d_di" bpmnElement="SequenceFlow_0w1pm6d">
<di:waypoint x="440" y="143" />
<di:waypoint x="490" y="143" />
<bpmndi:BPMNLabel>
<dc:Bounds x="465" y="121.5" width="0" height="13" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="ServiceTask_13jew1n_di" bpmnElement="Task_01zrjxr">
<dc:Bounds x="340" y="103" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
......@@ -22,5 +22,6 @@
<module>activiti-spring-conformance-set2</module>
<module>activiti-spring-conformance-set3</module>
<module>activiti-spring-conformance-set4</module>
<module>activiti-spring-conformance-set5</module>
</modules>
</project>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册