As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<br>…<br> <error id="myError" errorCode="E1" /><br>…<br> <endEvent id="errorEnd" name="err"><br> <incoming>toErrorEnd</incoming><br> <errorEventDefinition errorRef="myError" id="errId" /><br> </endEvent><br>…<br><br> <subProcess completionQuantity="1" id="eventSubProcess" isForCompensation="false"<br> name="" startQuantity="1" triggeredByEvent="true"><br> <br> <startEvent id="errStartEvent" name="err"><br> <outgoing>toReport</outgoing><br> <errorEventDefinition errorRef="myError" id="errStartId" /><br> </startEvent><br>…<br>
<br><errorEventDefinition /> <!– no errorCode: catch any error –><br>
<br>…<br> <exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?"><br> <incoming>toOkGtw</incoming><br> <outgoing>toEmptyEnd</outgoing><br> [b]<outgoing>toErrorEnd</outgoing>[/b]<br> </exclusiveGateway><br> <br> <endEvent id="emptyEnd" name="emptyEnd"><br> <incoming>toEmptyEnd</incoming><br> </endEvent><br> <br> <endEvent id="errorEnd" name="err"><br> <incoming>toErrorEnd</incoming><br> [b]<errorEventDefinition errorRef="myError" />[/b]<br> </endEvent><br><br> <subProcess completionQuantity="1" id="eventSubProcess" isForCompensation="false"<br> name="" startQuantity="1" triggeredByEvent="true"><br> <br> <startEvent id="errStartEvent" name="err"><br> <outgoing>toReport</outgoing><br> [b]<errorEventDefinition />[/b]<br> </startEvent><br>…<br><br>
<br><?xml version="1.0" encoding="UTF-8" standalone="no"?><br><definitions id="definitions" <br> xmlns="<a href="http://www.omg.org/spec/BPMN/20100524/MODEL" rel="nofollow noopener noreferrer">http://www.omg.org/spec/BPMN/20100524/MODEL</a>"<br> xmlns:activiti="<a href="http://activiti.org/bpmn" rel="nofollow noopener noreferrer">http://activiti.org/bpmn</a>"<br> targetNamespace="Examples"<br> xmlns:tns="Examples"<br> xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow noopener noreferrer">http://www.w3.org/2001/XMLSchema-instance</a>" ><br> <br> <process id="EventSubprocessErrorStartTest" isExecutable="true"><br> <br> <startEvent id="startEvent01"><br> <outgoing>toReview</outgoing><br> </startEvent><br> <br> <userTask id="reviewUserTask" name="Review"><br> <incoming>toReview</incoming><br> <outgoing>toOkGtw</outgoing><br> </userTask><br> <br> <exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?"><br> <incoming>toOkGtw</incoming><br> <outgoing>toEmptyEnd</outgoing><br> <outgoing>toErrorEnd</outgoing><br> </exclusiveGateway><br> <br> <endEvent id="emptyEnd" name="emptyEnd"><br> <incoming>toEmptyEnd</incoming><br> </endEvent><br> <br> <endEvent id="errorEnd" name="err"><br> <incoming>toErrorEnd</incoming><br> <errorEventDefinition errorRef="myError" /><br> </endEvent><br> <br> <sequenceFlow id="toReview" sourceRef="startEvent01" targetRef="reviewUserTask" /><br> <br> <sequenceFlow id="toOkGtw" sourceRef="reviewUserTask" targetRef="okGtw" /><br> <br> <sequenceFlow id="toEmptyEnd" sourceRef="okGtw" targetRef="emptyEnd"><br> <br> <conditionExpression id="exp01" xsi:type="tFormalExpression">${condition=='A'}</conditionExpression><br> <br> </sequenceFlow><br> <br> <sequenceFlow id="toErrorEnd" sourceRef="okGtw" targetRef="errorEnd"><br> <br> <conditionExpression id="exp02" xsi:type="tFormalExpression">${condition=='R'}</conditionExpression><br> <br> </sequenceFlow><br> </process><br> <br> <process id="SubprocessErrorStartTest" isExecutable="true"><br> <br> <subProcess id="eventSubProcess" triggeredByEvent="true"><br> <br> <startEvent id="errStartEvent" name="err"><br> <outgoing>toReport</outgoing><br> <errorEventDefinition/><br> </startEvent><br> <br> <userTask id="reportUserTask" name="Report"><br> <incoming>toReport</incoming><br> <outgoing>toSubEmptyEnd</outgoing><br> </userTask><br> <br> <endEvent id="subEmptyEnd"><br> <incoming>toSubEmptyEnd</incoming><br> </endEvent><br> <br> <sequenceFlow id="toReport" sourceRef="errStartEvent"<br> targetRef="reportUserTask" /><br> <br> <sequenceFlow id="toSubEmptyEnd" sourceRef="reportUserTask"<br> targetRef="subEmptyEnd" /><br> </subProcess><br> </process><br></definitions><br>
<br> @Test<br> public void testEventSubprocessoErrorStart() {<br> Deployment deployment = <br> repositoryService.createDeployment()<br> .addClasspathResource("org/activiti/examples/bpmn/subprocess/EventSubprocess.bpmn20.xml")<br> .deploy();<br> <br> <br> ProcessInstance pi = runtimeService.startProcessInstanceByKey("EventSubprocessErrorStartTest");<br> <br> //should return only one task called 'Review'<br> List<Task> tasks = taskService.createTaskQuery()<br> .processInstanceId(pi.getId()).list();<br> assertEquals(1, tasks.size());<br> Task reviewTask = tasks.get(0);<br> assertEquals("Review", reviewTask.getName());<br> //<br> <br> //creating the variable to evaluate the expression that will lead to an error end event<br> Map<String, Object> vars = new HashMap<String, Object>();<br> vars.put("condition", "R");<br> <br> //complete the 'Review' task with the variables<br> taskService.complete(reviewTask.getId(), vars);<br> <br> //should return only one task (event subprocess 'Report' task) bot no one will be returned<br> tasks = taskService.createTaskQuery().list();<br> <br> assertEquals(1, tasks.size());<br> <br> // Clean up<br> repositoryService.deleteDeployment(deployment.getId(), true);<br> }<br>
An event subprocess can be added at the process level or at any subprocess level.
<br><subProcess id="eventSubProcess" triggeredByEvent="true"><br> <startEvent id="catchError"><br> <errorEventDefinition errorRef="myError" /> <br> </startEvent><br> <sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" /><br> <userTask id="taskAfterErrorCatch" name="Provide additional data" /><br></subProcess><br>
<br><error id="myError" errorCode="123" /><br>
<br><?xml version="1.0" encoding="UTF-8" standalone="no"?><br><definitions id="definitions" <br> xmlns="<a href="http://www.omg.org/spec/BPMN/20100524/MODEL" rel="nofollow noopener noreferrer">http://www.omg.org/spec/BPMN/20100524/MODEL</a>"<br> xmlns:activiti="<a href="http://activiti.org/bpmn" rel="nofollow noopener noreferrer">http://activiti.org/bpmn</a>"<br> targetNamespace="Examples"<br> xmlns:tns="Examples"<br> xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow noopener noreferrer">http://www.w3.org/2001/XMLSchema-instance</a>" ><br> <br> <error id="myError" errorCode="123" /><br> <br> <process id="EventSubprocessErrorStartTest" isExecutable="true"><br> <startEvent id="startEvent01"><br> <outgoing>toReview</outgoing><br> </startEvent><br> <br> <userTask id="reviewUserTask" name="Review"><br> <incoming>toReview</incoming><br> <outgoing>toOkGtw</outgoing><br> </userTask><br> <sequenceFlow id="toReview" sourceRef="startEvent01" targetRef="reviewUserTask" /><br> <sequenceFlow id="toOkGtw" sourceRef="reviewUserTask" targetRef="okGtw" /><br> <br> <exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?"><br> <incoming>toOkGtw</incoming><br> <outgoing>toEmptyEnd</outgoing><br> <outgoing>toErrorEnd</outgoing><br> </exclusiveGateway><br> <sequenceFlow id="toEmptyEnd" sourceRef="okGtw" targetRef="emptyEnd"><br> <conditionExpression id="exp01" xsi:type="tFormalExpression">${condition=='A'}</conditionExpression><br> </sequenceFlow><br> <sequenceFlow id="toErrorEnd" sourceRef="okGtw" targetRef="errorEnd"><br> <conditionExpression id="exp02" xsi:type="tFormalExpression">${condition=='R'}</conditionExpression><br> </sequenceFlow><br><br> <endEvent id="emptyEnd" name="emptyEnd"><br> <incoming>toEmptyEnd</incoming><br> </endEvent><br> <br> <endEvent id="errorEnd" name="err"><br> <incoming>toErrorEnd</incoming><br> <errorEventDefinition errorRef="myError" /><br> </endEvent><br> <br> <subProcess id="eventSubProcess" triggeredByEvent="true"> <br> <startEvent id="catchError"><br> <errorEventDefinition errorRef="myError" /> <br> </startEvent><br> <sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" /><br> <userTask id="taskAfterErrorCatch" name="Provide additional data" /><br> </subProcess> <br> <br> </process><br></definitions><br>
<br>@Test<br> public void testEventSubprocessoErrorStart() {<br> org.activiti.engine.repository.Deployment deployment = <br> repositoryService.createDeployment()<br> .addClasspathResource("org/activiti/examples/bpmn/subprocess/EventSubprocess.bpmn20.xml")<br> .deploy();<br> <br> <br> ProcessInstance pi = runtimeService.startProcessInstanceByKey("EventSubprocessErrorStartTest");<br> <br> //should return only one task called 'Review'<br> List<Task> tasks = taskService.createTaskQuery()<br> .processInstanceId(pi.getId()).list();<br> assertEquals(1, tasks.size());<br> Task reviewTask = tasks.get(0);<br> assertEquals("Review", reviewTask.getName());<br> //<br> <br> //creating the variable to evaluate the expression that will lead to an error end event<br> Map<String, Object> vars = new HashMap<String, Object>();<br> vars.put("condition", "R");<br> <br> //complete the 'Review' task with the variables<br> taskService.complete(reviewTask.getId(), vars);<br> <br> //should return only one task (event subprocess 'Report' task) bot no one will be returned<br> tasks = taskService.createTaskQuery().list();<br> <br> assertEquals(1, tasks.size());<br> <br> // Clean up<br> repositoryService.deleteDeployment(deployment.getId(), true);<br> }<br>
<br><?xml version="1.0" encoding="UTF-8" standalone="no"?><br><definitions id="definitions" <br> xmlns="<a href="http://www.omg.org/spec/BPMN/20100524/MODEL" rel="nofollow noopener noreferrer">http://www.omg.org/spec/BPMN/20100524/MODEL</a>"<br> xmlns:activiti="<a href="http://activiti.org/bpmn" rel="nofollow noopener noreferrer">http://activiti.org/bpmn</a>"<br> targetNamespace="Examples"<br> xmlns:tns="Examples"<br> xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow noopener noreferrer">http://www.w3.org/2001/XMLSchema-instance</a>" ><br> <br> <error id="myError" errorCode="123" /><br> <process id="EventSubprocessErrorStartTest" isExecutable="true"><br> <br> <startEvent id="startEvent01"><br> <outgoing>toReview</outgoing><br> </startEvent><br> <br> <userTask id="reviewUserTask" name="Review"><br> <incoming>toReview</incoming><br> <outgoing>toOkGtw</outgoing><br> </userTask><br> <br> <exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?"><br> <incoming>toOkGtw</incoming><br> <outgoing>toEmptyEnd</outgoing><br> <outgoing>toErrorEnd</outgoing><br> </exclusiveGateway><br> <br> <endEvent id="emptyEnd" name="emptyEnd"><br> <incoming>toEmptyEnd</incoming><br> </endEvent><br> <br> <endEvent id="errorEnd" name="err"><br> <incoming>toErrorEnd</incoming><br> <errorEventDefinition errorRef="myError" /><br> </endEvent><br> <br> <sequenceFlow id="toReview" sourceRef="startEvent01" targetRef="reviewUserTask" /><br> <br> <sequenceFlow id="toOkGtw" sourceRef="reviewUserTask" targetRef="okGtw" /><br> <br> <sequenceFlow id="toEmptyEnd" sourceRef="okGtw" targetRef="emptyEnd"><br> <br> <conditionExpression id="exp01" xsi:type="tFormalExpression">${condition=='A'}</conditionExpression><br> <br> </sequenceFlow><br> <br> <sequenceFlow id="toErrorEnd" sourceRef="okGtw" targetRef="errorEnd"><br> <br> <conditionExpression id="exp02" xsi:type="tFormalExpression">${condition=='R'}</conditionExpression><br> <br> </sequenceFlow><br><br> <br> <subProcess id="eventSubProcess" triggeredByEvent="true"><br> <br> <startEvent id="errStartEvent" name="err"><br> <outgoing>toReport</outgoing><br> <errorEventDefinition errorRef="myError"/><br> </startEvent><br> <br> <userTask id="reportUserTask" name="Report"><br> <incoming>toReport</incoming><br> <outgoing>toSubEmptyEnd</outgoing><br> </userTask><br> <br> <endEvent id="subEmptyEnd"><br> <incoming>toSubEmptyEnd</incoming><br> </endEvent><br> <br> <sequenceFlow id="toReport" sourceRef="errStartEvent"<br> targetRef="reportUserTask" /><br> <br> <sequenceFlow id="toSubEmptyEnd" sourceRef="reportUserTask"<br> targetRef="subEmptyEnd" /><br> </subProcess><br> </process><br></definitions><br><br>