Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:rule:control_branch [2024-01-08 19:36] – [✘ How NOT to] Anatoly Belaychuken:rule:control_branch [2024-11-02 13:36] (current) – [Edit diagram] Anatoly Belaychuk
Line 1: Line 1:
-====== Use a subprocess and a control branch as an alternative to the attached event ======+====== subprocess and a control branch may be used as an alternative to the attached event ======
  
-{{tag>subprocess gateway event "attached event"}}+{{tag>subprocess event attached_event terminate_event}}
  
 Use a subprocess containing the control branch to implement versatile event processing logic. Use a subprocess containing the control branch to implement versatile event processing logic.
- 
 ===== ✔ How to ===== ===== ✔ How to =====
  
Line 12: Line 11:
   - Start the subprocess with the parallel gateway followed by two branches, "working" and "control".   - Start the subprocess with the parallel gateway followed by two branches, "working" and "control".
   - Put the "Obtain payment" at the working branch.   - Put the "Obtain payment" at the working branch.
-  - Put the timer to the control branch. +  - Put the timer at the control branch. 
-  - End both the working and control branch with terminate events.+  - End both the working and control branch with the terminate event.
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
Line 166: Line 165:
 ===== ✘ How NOT to ===== ===== ✘ How NOT to =====
  
-Attached timer, while a better alternative in simple scenarios, won'do the job if need to discuss the issue with client while still trying to obtain the payment:+Interrupting attached timer won'let discussing the issue with client while still trying to obtain the payment:
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
Line 180: Line 179:
     </startEvent>     </startEvent>
     <sequenceFlow id="Flow_1mqvexf" sourceRef="Event_0jid81n" targetRef="Activity_1mnvjuz" />     <sequenceFlow id="Flow_1mqvexf" sourceRef="Event_0jid81n" targetRef="Activity_1mnvjuz" />
-    <sequenceFlow id="Flow_1fkn8r9" sourceRef="Event_0r0tew3" targetRef="Activity_1skmlnn" /> 
     <endEvent id="Event_1k1tn88" name="Paid">     <endEvent id="Event_1k1tn88" name="Paid">
       <incoming>Flow_0b5yo8b</incoming>       <incoming>Flow_0b5yo8b</incoming>
     </endEvent>     </endEvent>
     <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" />     <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" />
-    <boundaryEvent id="Event_0r0tew3" name="Payment due date" cancelActivity="false" attachedToRef="Activity_1mnvjuz"> +    <boundaryEvent id="Event_0r0tew3" name="Payment due date" attachedToRef="Activity_1mnvjuz"> 
-      <outgoing>Flow_1fkn8r9</outgoing> +      <outgoing>Flow_0xmx632</outgoing> 
-      <timerEventDefinition id="TimerEventDefinition_1u44tv6" />+      <timerEventDefinition id="TimerEventDefinition_0f85qyr" />
     </boundaryEvent>     </boundaryEvent>
-    <task id="Activity_1skmlnn" name="Clarify delay with the client"> +    <sequenceFlow id="Flow_0xmx632" sourceRef="Event_0r0tew3" targetRef="Event_04k06ga" />
-      <incoming>Flow_1fkn8r9</incoming> +
-      <outgoing>Flow_0gsynar</outgoing> +
-    </task> +
-    <sequenceFlow id="Flow_0gsynar" sourceRef="Activity_1skmlnn" targetRef="Gateway_1sygjo0" /> +
-    <exclusiveGateway id="Gateway_1sygjo0" name="Wait more?"> +
-      <incoming>Flow_0gsynar</incoming> +
-      <outgoing>Flow_0jzxjdu</outgoing> +
-      <outgoing>Flow_16a0qq5</outgoing> +
-    </exclusiveGateway> +
-    <sequenceFlow id="Flow_0jzxjdu" name="no" sourceRef="Gateway_1sygjo0" targetRef="Event_04k06ga" />+
     <endEvent id="Event_04k06ga" name="Not paid">     <endEvent id="Event_04k06ga" name="Not paid">
-      <incoming>Flow_0jzxjdu</incoming+      <incoming>Flow_0xmx632</incoming>
-      <terminateEventDefinition id="TerminateEventDefinition_1uvti5o" />+
     </endEvent>     </endEvent>
-    <endEvent id="Event_1ltc3ao" name="Overdue"> 
-      <incoming>Flow_16a0qq5</incoming> 
-    </endEvent> 
-    <sequenceFlow id="Flow_16a0qq5" name="yes" sourceRef="Gateway_1sygjo0" targetRef="Event_1ltc3ao" /> 
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
Line 224: Line 207:
         </bpmndi:BPMNLabel>         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1skmlnn_di" bpmnElement="Activity_1skmlnn"> +      <bpmndi:BPMNShape id="Event_0u9z69r_di" bpmnElement="Event_04k06ga"> 
-        <omgdc:Bounds x="200" y="-10" width="100" height="80" /> +        <omgdc:Bounds x="232" y="-8" width="36" height="36" />
-        <bpmndi:BPMNLabel /> +
-      </bpmndi:BPMNShape> +
-      <bpmndi:BPMNShape id="Gateway_1sygjo0_di" bpmnElement="Gateway_1sygjo0" isMarkerVisible="true"> +
-        <omgdc:Bounds x="345" y="5" width="50" height="50" />+
         <bpmndi:BPMNLabel>         <bpmndi:BPMNLabel>
-          <omgdc:Bounds x="342" y="-19" width="55" height="14" />+          <omgdc:Bounds x="230" y="35" width="41" height="14" />
         </bpmndi:BPMNLabel>         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Event_08w64xf_di" bpmnElement="Event_04k06ga"> +      <bpmndi:BPMNShape id="Event_0sh9f2p_di" bpmnElement="Event_0r0tew3">
-        <omgdc:Bounds x="452" y="12" width="36" height="36" /> +
-        <bpmndi:BPMNLabel> +
-          <omgdc:Bounds x="450" y="55" width="41" height="14" /> +
-        </bpmndi:BPMNLabel> +
-      </bpmndi:BPMNShape> +
-      <bpmndi:BPMNShape id="Event_1ltc3ao_di" bpmnElement="Event_1ltc3ao"> +
-        <omgdc:Bounds x="352" y="112" width="36" height="36" /> +
-        <bpmndi:BPMNLabel> +
-          <omgdc:Bounds x="349" y="155" width="43" height="14" /> +
-        </bpmndi:BPMNLabel> +
-      </bpmndi:BPMNShape> +
-      <bpmndi:BPMNShape id="Event_0am8is2_di" bpmnElement="Event_0r0tew3">+
         <omgdc:Bounds x="232" y="-98" width="36" height="36" />         <omgdc:Bounds x="232" y="-98" width="36" height="36" />
         <bpmndi:BPMNLabel>         <bpmndi:BPMNLabel>
Line 255: Line 222:
         <omgdi:waypoint x="148" y="-120" />         <omgdi:waypoint x="148" y="-120" />
         <omgdi:waypoint x="200" y="-120" />         <omgdi:waypoint x="200" y="-120" />
-      </bpmndi:BPMNEdge> 
-      <bpmndi:BPMNEdge id="Flow_1fkn8r9_di" bpmnElement="Flow_1fkn8r9"> 
-        <omgdi:waypoint x="250" y="-62" /> 
-        <omgdi:waypoint x="250" y="-10" /> 
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0b5yo8b_di" bpmnElement="Flow_0b5yo8b">       <bpmndi:BPMNEdge id="Flow_0b5yo8b_di" bpmnElement="Flow_0b5yo8b">
Line 264: Line 227:
         <omgdi:waypoint x="352" y="-120" />         <omgdi:waypoint x="352" y="-120" />
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0gsynar_di" bpmnElement="Flow_0gsynar"> +      <bpmndi:BPMNEdge id="Flow_0xmx632_di" bpmnElement="Flow_0xmx632"> 
-        <omgdi:waypoint x="300" y="30" /> +        <omgdi:waypoint x="250" y="-62" /> 
-        <omgdi:waypoint x="345" y="30" /+        <omgdi:waypoint x="250" y="-8" />
-      </bpmndi:BPMNEdge> +
-      <bpmndi:BPMNEdge id="Flow_0jzxjdu_di" bpmnElement="Flow_0jzxjdu"> +
-        <omgdi:waypoint x="395" y="30" /> +
-        <omgdi:waypoint x="452" y="30" /> +
-        <bpmndi:BPMNLabel> +
-          <omgdc:Bounds x="417" y="12" width="13" height="14" /> +
-        </bpmndi:BPMNLabel> +
-      </bpmndi:BPMNEdge> +
-      <bpmndi:BPMNEdge id="Flow_16a0qq5_di" bpmnElement="Flow_16a0qq5"> +
-        <omgdi:waypoint x="370" y="55" /> +
-        <omgdi:waypoint x="370" y="112" /> +
-        <bpmndi:BPMNLabel> +
-          <omgdc:Bounds x="377" y="78" width="17" height="14" /> +
-        </bpmndi:BPMNLabel>+
       </bpmndi:BPMNEdge>       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>     </bpmndi:BPMNPlane>
Line 286: Line 235:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
 +
 +Non-interrupting looks better but it won't let resetting the timer to the new due date:
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
Line 300: Line 251:
     <sequenceFlow id="Flow_1mqvexf" sourceRef="Event_0jid81n" targetRef="Activity_1mnvjuz" />     <sequenceFlow id="Flow_1mqvexf" sourceRef="Event_0jid81n" targetRef="Activity_1mnvjuz" />
     <sequenceFlow id="Flow_1fkn8r9" sourceRef="Event_0r0tew3" targetRef="Activity_1skmlnn" />     <sequenceFlow id="Flow_1fkn8r9" sourceRef="Event_0r0tew3" targetRef="Activity_1skmlnn" />
-    <endEvent id="Event_1k1tn88" name="Paid"> 
-      <incoming>Flow_0b5yo8b</incoming> 
-    </endEvent> 
     <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" />     <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" />
     <boundaryEvent id="Event_0r0tew3" name="Payment due date" cancelActivity="false" attachedToRef="Activity_1mnvjuz">     <boundaryEvent id="Event_0r0tew3" name="Payment due date" cancelActivity="false" attachedToRef="Activity_1mnvjuz">
Line 327: Line 275:
     </endEvent>     </endEvent>
     <sequenceFlow id="Flow_16a0qq5" name="yes" sourceRef="Gateway_1sygjo0" targetRef="Event_1ltc3ao" />     <sequenceFlow id="Flow_16a0qq5" name="yes" sourceRef="Gateway_1sygjo0" targetRef="Event_1ltc3ao" />
 +    <endEvent id="Event_1k1tn88" name="Paid">
 +      <incoming>Flow_0b5yo8b</incoming>
 +      <terminateEventDefinition id="TerminateEventDefinition_1srmvcb" />
 +    </endEvent>
   </process>   </process>
   <bpmndi:BPMNDiagram id="BpmnDiagram_1">   <bpmndi:BPMNDiagram id="BpmnDiagram_1">
Line 336: Line 288:
       <bpmndi:BPMNShape id="Event_0jid81n_di" bpmnElement="Event_0jid81n">       <bpmndi:BPMNShape id="Event_0jid81n_di" bpmnElement="Event_0jid81n">
         <omgdc:Bounds x="112" y="-138" width="36" height="36" />         <omgdc:Bounds x="112" y="-138" width="36" height="36" />
-      </bpmndi:BPMNShape> 
-      <bpmndi:BPMNShape id="Event_0ok4f4i_di" bpmnElement="Event_1k1tn88"> 
-        <omgdc:Bounds x="352" y="-138" width="36" height="36" /> 
-        <bpmndi:BPMNLabel> 
-          <omgdc:Bounds x="359" y="-95" width="23" height="14" /> 
-        </bpmndi:BPMNLabel> 
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1skmlnn_di" bpmnElement="Activity_1skmlnn">       <bpmndi:BPMNShape id="Activity_1skmlnn_di" bpmnElement="Activity_1skmlnn">
Line 363: Line 309:
         <bpmndi:BPMNLabel>         <bpmndi:BPMNLabel>
           <omgdc:Bounds x="349" y="155" width="43" height="14" />           <omgdc:Bounds x="349" y="155" width="43" height="14" />
 +        </bpmndi:BPMNLabel>
 +      </bpmndi:BPMNShape>
 +      <bpmndi:BPMNShape id="Event_05jo8b9_di" bpmnElement="Event_1k1tn88">
 +        <omgdc:Bounds x="352" y="-138" width="36" height="36" />
 +        <bpmndi:BPMNLabel>
 +          <omgdc:Bounds x="359" y="-95" width="23" height="14" />
         </bpmndi:BPMNLabel>         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>       </bpmndi:BPMNShape>
Line 407: Line 359:
 ===== Notes ===== ===== Notes =====
  
-  - [[en:rule:event_gateway_warning | Exclusive event-based gateway ]] won't do the job. +  - Although it's usually better to use [[en:rule:collapsed_subprocess|collapsed representation of a subprocess]] to isolate its internals, it may make sence to depict the subprocess expanded in this technique to make the logic clear. 
-  - Although it's usually better to use [[en:rule:collapsed_subprocess | collapsed representation of a process ]] to isolate its internals, it may make sence to depict the subprocess expanded in this technique to make the logic clear. +  - As an exception to the [[en:rule:explicit_parallel_split|general rule]], one may initiate work and control flows directly from the start event:
-  - As an exception to the [[en:rule:one_outgoing_control_flow | general rule ]], one may initiate work and control flows directly from the start event:+
  
 <bpmnio type="bpmn"> <bpmnio type="bpmn">
Line 548: Line 499:
 </definitions> </definitions>
 </bpmnio> </bpmnio>
-===== Exceptions =====+===== See also =====
  
-Attached events are simpler and hence should be preferred in more straightforward scenarios.+  * [[en:rule:event_gateway_warning]]
  
 ===== Autor(s) ===== ===== Autor(s) =====
  
  --- //[[user:bell|Anatoly Belaychuk]] 2023-09-10 11:21//  --- //[[user:bell|Anatoly Belaychuk]] 2023-09-10 11:21//
 +