Event subprocess with error start event
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-18-2012 02:59 PM
Hi,
Please, see attachment and XML below…
When the Review task ends with error, the respective error start event of the event subprocess is not activated.
This message appears in the log:
18/07/2012 14:26:56 org.activiti.engine.impl.bpmn.helper.ErrorPropagation propagateError
INFO: errorEnd throws error event with errorCode '123', but no catching boundary event was defined. Execution will simply be ended (none end event semantics).
Did I miss something?
BPMN
===================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<error id="err01" errorCode="123" />
<process id="process01" isExecutable="true">
<startEvent id="startEvent01">
<outgoing>toReview</outgoing>
</startEvent>
<userTask completionQuantity="1" id="reviewUserTask" implementation="webService"
isForCompensation="false" name="Review" startQuantity="1">
<incoming>toReview</incoming>
<outgoing>toOkGtw</outgoing>
</userTask>
<exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?">
<incoming>toOkGtw</incoming>
<outgoing>toEmptyEnd</outgoing>
<outgoing>toErrorEnd</outgoing>
</exclusiveGateway>
<endEvent id="emptyEnd" name="emptyEnd">
<incoming>toEmptyEnd</incoming>
</endEvent>
<endEvent id="errorEnd" name="err">
<incoming>toErrorEnd</incoming>
<errorEventDefinition errorRef="err01" id="errId" />
</endEvent>
<sequenceFlow id="toReview"
name="" sourceRef="startEvent01"
targetRef="reviewUserTask" />
<sequenceFlow id="toOkGtw"
name="" sourceRef="reviewUserTask"
targetRef="okGtw" />
<sequenceFlow id="toEmptyEnd"
name="ok" sourceRef="okGtw"
targetRef="emptyEnd">
<conditionExpression id="sid-eff7d8a1-fd2a-4f8f-85a7-d5a694d6c10f"
xsi:type="tFormalExpression">${condition=='A'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="toErrorEnd"
name="not ok" sourceRef="okGtw"
targetRef="errorEnd">
<conditionExpression id="condExp"
xsi:type="tFormalExpression">${condition=='R'}</conditionExpression>
</sequenceFlow>
</process>
<process id="process02" isExecutable="false">
<subProcess completionQuantity="1" id="eventSubProcess" isForCompensation="false"
name="" startQuantity="1" triggeredByEvent="true">
<startEvent id="errStartEvent" name="err">
<outgoing>toReport</outgoing>
<errorEventDefinition errorRef="err01" id="sid-fc567882-11a0-4da4-9787-8a185d893f66" />
</startEvent>
<userTask completionQuantity="1" id="reportUserTask"
implementation="webService" isForCompensation="false" name="Report" startQuantity="1">
<incoming>toReport</incoming>
<outgoing>toSubEmptyEnd</outgoing>
</userTask>
<endEvent id="subEmptyEnd" name="">
<incoming>toSubEmptyEnd</incoming>
</endEvent>
<sequenceFlow id="toReport"
name="" sourceRef="errStartEvent"
targetRef="reportUserTask" />
<sequenceFlow id="toSubEmptyEnd"
name="" sourceRef="reportUserTask"
targetRef="subEmptyEnd" />
</subProcess>
</process>
</definitions>
============================================================
Please, see attachment and XML below…
When the Review task ends with error, the respective error start event of the event subprocess is not activated.
This message appears in the log:
18/07/2012 14:26:56 org.activiti.engine.impl.bpmn.helper.ErrorPropagation propagateError
INFO: errorEnd throws error event with errorCode '123', but no catching boundary event was defined. Execution will simply be ended (none end event semantics).
Did I miss something?
BPMN
===================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<error id="err01" errorCode="123" />
<process id="process01" isExecutable="true">
<startEvent id="startEvent01">
<outgoing>toReview</outgoing>
</startEvent>
<userTask completionQuantity="1" id="reviewUserTask" implementation="webService"
isForCompensation="false" name="Review" startQuantity="1">
<incoming>toReview</incoming>
<outgoing>toOkGtw</outgoing>
</userTask>
<exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?">
<incoming>toOkGtw</incoming>
<outgoing>toEmptyEnd</outgoing>
<outgoing>toErrorEnd</outgoing>
</exclusiveGateway>
<endEvent id="emptyEnd" name="emptyEnd">
<incoming>toEmptyEnd</incoming>
</endEvent>
<endEvent id="errorEnd" name="err">
<incoming>toErrorEnd</incoming>
<errorEventDefinition errorRef="err01" id="errId" />
</endEvent>
<sequenceFlow id="toReview"
name="" sourceRef="startEvent01"
targetRef="reviewUserTask" />
<sequenceFlow id="toOkGtw"
name="" sourceRef="reviewUserTask"
targetRef="okGtw" />
<sequenceFlow id="toEmptyEnd"
name="ok" sourceRef="okGtw"
targetRef="emptyEnd">
<conditionExpression id="sid-eff7d8a1-fd2a-4f8f-85a7-d5a694d6c10f"
xsi:type="tFormalExpression">${condition=='A'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="toErrorEnd"
name="not ok" sourceRef="okGtw"
targetRef="errorEnd">
<conditionExpression id="condExp"
xsi:type="tFormalExpression">${condition=='R'}</conditionExpression>
</sequenceFlow>
</process>
<process id="process02" isExecutable="false">
<subProcess completionQuantity="1" id="eventSubProcess" isForCompensation="false"
name="" startQuantity="1" triggeredByEvent="true">
<startEvent id="errStartEvent" name="err">
<outgoing>toReport</outgoing>
<errorEventDefinition errorRef="err01" id="sid-fc567882-11a0-4da4-9787-8a185d893f66" />
</startEvent>
<userTask completionQuantity="1" id="reportUserTask"
implementation="webService" isForCompensation="false" name="Report" startQuantity="1">
<incoming>toReport</incoming>
<outgoing>toSubEmptyEnd</outgoing>
</userTask>
<endEvent id="subEmptyEnd" name="">
<incoming>toSubEmptyEnd</incoming>
</endEvent>
<sequenceFlow id="toReport"
name="" sourceRef="errStartEvent"
targetRef="reportUserTask" />
<sequenceFlow id="toSubEmptyEnd"
name="" sourceRef="reportUserTask"
targetRef="subEmptyEnd" />
</subProcess>
</process>
</definitions>
============================================================
Labels:
- Labels:
-
Archive
14 REPLIES 14
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2012 09:59 AM
ok, I put it now… but still not working
Here is my XML
Here is my XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<error id="myError" errorCode="123" />
<process id="EventSubprocessErrorStartTest" isExecutable="true">
<startEvent id="startEvent01">
<outgoing>toReview</outgoing>
</startEvent>
<userTask id="reviewUserTask" name="Review">
<incoming>toReview</incoming>
<outgoing>toOkGtw</outgoing>
</userTask>
<sequenceFlow id="toReview" sourceRef="startEvent01" targetRef="reviewUserTask" />
<sequenceFlow id="toOkGtw" sourceRef="reviewUserTask" targetRef="okGtw" />
<exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?">
<incoming>toOkGtw</incoming>
<outgoing>toEmptyEnd</outgoing>
<outgoing>toErrorEnd</outgoing>
</exclusiveGateway>
<sequenceFlow id="toEmptyEnd" sourceRef="okGtw" targetRef="emptyEnd">
<conditionExpression id="exp01" xsi:type="tFormalExpression">${condition=='A'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="toErrorEnd" sourceRef="okGtw" targetRef="errorEnd">
<conditionExpression id="exp02" xsi:type="tFormalExpression">${condition=='R'}</conditionExpression>
</sequenceFlow>
<endEvent id="emptyEnd" name="emptyEnd">
<incoming>toEmptyEnd</incoming>
</endEvent>
<endEvent id="errorEnd" name="err">
<incoming>toErrorEnd</incoming>
<errorEventDefinition errorRef="myError" />
</endEvent>
<subProcess id="eventSubProcess" triggeredByEvent="true">
<startEvent id="catchError">
<errorEventDefinition errorRef="myError" />
</startEvent>
<sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" />
<userTask id="taskAfterErrorCatch" name="Provide additional data" />
</subProcess>
</process>
</definitions>
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2012 10:15 AM
Your sub-process doesn't contain a end-event, it just stops with the "userTask". I assume this is the issue, as the rest is perfectly fine…
Try debugging first before posting immediately on the form please.
Try debugging first before posting immediately on the form please.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2012 10:46 AM
In this case, please, review the XML you sent me: https://svn.codehaus.org/activiti/activiti/trunk/modules/activiti-engine/src/test/resources/org/acti...
I modified the XML as suggested but still not work. (I debug as I did in the last post)
Thank you.
I modified the XML as suggested but still not work. (I debug as I did in the last post)
Thank you.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2012 10:56 AM
Your test with the suggested modifications, runs green:
@Test
public void testEventSubprocessoErrorStart() {
org.activiti.engine.repository.Deployment deployment =
repositoryService.createDeployment()
.addClasspathResource("org/activiti/examples/bpmn/subprocess/EventSubprocess.bpmn20.xml")
.deploy();
ProcessInstance pi = runtimeService.startProcessInstanceByKey("EventSubprocessErrorStartTest");
//should return only one task called 'Review'
List<Task> tasks = taskService.createTaskQuery()
.processInstanceId(pi.getId()).list();
assertEquals(1, tasks.size());
Task reviewTask = tasks.get(0);
assertEquals("Review", reviewTask.getName());
//
//creating the variable to evaluate the expression that will lead to an error end event
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("condition", "R");
//complete the 'Review' task with the variables
taskService.complete(reviewTask.getId(), vars);
//should return only one task (event subprocess 'Report' task) bot no one will be returned
tasks = taskService.createTaskQuery().list();
assertEquals(1, tasks.size());
// Clean up
repositoryService.deleteDeployment(deployment.getId(), true);
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples"
xmlns:tns="Examples"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<error id="myError" errorCode="123" />
<process id="EventSubprocessErrorStartTest" isExecutable="true">
<startEvent id="startEvent01">
<outgoing>toReview</outgoing>
</startEvent>
<userTask id="reviewUserTask" name="Review">
<incoming>toReview</incoming>
<outgoing>toOkGtw</outgoing>
</userTask>
<exclusiveGateway gatewayDirection="Diverging" id="okGtw" name="ok?">
<incoming>toOkGtw</incoming>
<outgoing>toEmptyEnd</outgoing>
<outgoing>toErrorEnd</outgoing>
</exclusiveGateway>
<endEvent id="emptyEnd" name="emptyEnd">
<incoming>toEmptyEnd</incoming>
</endEvent>
<endEvent id="errorEnd" name="err">
<incoming>toErrorEnd</incoming>
<errorEventDefinition errorRef="myError" />
</endEvent>
<sequenceFlow id="toReview" sourceRef="startEvent01" targetRef="reviewUserTask" />
<sequenceFlow id="toOkGtw" sourceRef="reviewUserTask" targetRef="okGtw" />
<sequenceFlow id="toEmptyEnd" sourceRef="okGtw" targetRef="emptyEnd">
<conditionExpression id="exp01" xsi:type="tFormalExpression">${condition=='A'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="toErrorEnd" sourceRef="okGtw" targetRef="errorEnd">
<conditionExpression id="exp02" xsi:type="tFormalExpression">${condition=='R'}</conditionExpression>
</sequenceFlow>
<subProcess id="eventSubProcess" triggeredByEvent="true">
<startEvent id="errStartEvent" name="err">
<outgoing>toReport</outgoing>
<errorEventDefinition errorRef="myError"/>
</startEvent>
<userTask id="reportUserTask" name="Report">
<incoming>toReport</incoming>
<outgoing>toSubEmptyEnd</outgoing>
</userTask>
<endEvent id="subEmptyEnd">
<incoming>toSubEmptyEnd</incoming>
</endEvent>
<sequenceFlow id="toReport" sourceRef="errStartEvent"
targetRef="reportUserTask" />
<sequenceFlow id="toSubEmptyEnd" sourceRef="reportUserTask"
targetRef="subEmptyEnd" />
</subProcess>
</process>
</definitions>
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-25-2012 11:25 AM
yes really works now. great!
Sorry, last debugging did not caught the changes I made in the XML
Thank you, case closed.
Sorry, last debugging did not caught the changes I made in the XML
Thank you, case closed.
