cancel
Showing results for 
Search instead for 
Did you mean: 

Event subprocess with error start event

alemser
Champ in-the-making
Champ in-the-making
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>
============================================================
14 REPLIES 14

alemser
Champ in-the-making
Champ in-the-making
ok, I put it now… but still not working

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>

frederikherema1
Star Contributor
Star Contributor
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.

alemser
Champ in-the-making
Champ in-the-making
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.

frederikherema1
Star Contributor
Star Contributor
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>

alemser
Champ in-the-making
Champ in-the-making
yes really works now. great!
Sorry, last debugging did not caught the changes I made in the XML

Thank you, case closed.