Both sides previous revision Previous revision Next revision | Previous revision |
en:rule:control_branch [2023-09-10 12:13] – [Notes] Anatoly Belaychuk | en:rule:control_branch [2024-11-02 13:36] (current) – [Edit diagram] Anatoly Belaychuk |
---|
====== Use a subprocess with the control branch as an alternative to the attached event ====== | ====== A subprocess and a control branch may be used as an alternative to the attached event ====== |
| |
{{tag>subprocess gateway "attached event"}} | {{tag>subprocess event attached_event terminate_event}} |
| |
{{en:underconstruction.png?nolink&200|}} | |
| |
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 ===== |
| |
Let's assume that we need to obtain payment from the client, watch the deadline and talk with the customer in case of delay. Use the following steps: | Let's assume that we need to obtain payment from the client, watch the payment due date and talk with the customer in case of delay. Use the following technique: |
| |
- Surround the "Obtain payment" task with subprocess. | - Put the "Obtain payment" task into subprocess. |
- 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" to 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"> |
===== ✘ How NOT to ===== | ===== ✘ How NOT to ===== |
| |
Attached timer, while a better alternative in simple scenarios, won't do the job because we shouldn't interrupt the "Obtain payment" task untill discussing the issue with the client: | Interrupting attached timer won't let discussing the issue with client while still trying to obtain the payment: |
| |
<bpmnio type="bpmn"> | <bpmnio type="bpmn"> |
<outgoing>Flow_0b5yo8b</outgoing> | <outgoing>Flow_0b5yo8b</outgoing> |
</task> | </task> |
| <startEvent id="Event_0jid81n"> |
| <outgoing>Flow_1mqvexf</outgoing> |
| </startEvent> |
| <sequenceFlow id="Flow_1mqvexf" sourceRef="Event_0jid81n" targetRef="Activity_1mnvjuz" /> |
| <endEvent id="Event_1k1tn88" name="Paid"> |
| <incoming>Flow_0b5yo8b</incoming> |
| </endEvent> |
| <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> |
<boundaryEvent id="Event_0r0tew3" name="Payment due date" 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_1akyg21" /> | <timerEventDefinition id="TimerEventDefinition_0f85qyr" /> |
</boundaryEvent> | </boundaryEvent> |
| <sequenceFlow id="Flow_0xmx632" sourceRef="Event_0r0tew3" targetRef="Event_04k06ga" /> |
| <endEvent id="Event_04k06ga" name="Not paid"> |
| <incoming>Flow_0xmx632</incoming> |
| </endEvent> |
| </process> |
| <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
| <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0kf0077"> |
| <bpmndi:BPMNShape id="Activity_1mnvjuz_di" bpmnElement="Activity_1mnvjuz"> |
| <omgdc:Bounds x="200" y="-160" width="100" height="80" /> |
| <bpmndi:BPMNLabel /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_0jid81n_di" bpmnElement="Event_0jid81n"> |
| <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 id="Event_0u9z69r_di" bpmnElement="Event_04k06ga"> |
| <omgdc:Bounds x="232" y="-8" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="230" y="35" width="41" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_0sh9f2p_di" bpmnElement="Event_0r0tew3"> |
| <omgdc:Bounds x="232" y="-98" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="205" y="-55" width="90" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNEdge id="Flow_1mqvexf_di" bpmnElement="Flow_1mqvexf"> |
| <omgdi:waypoint x="148" y="-120" /> |
| <omgdi:waypoint x="200" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_0b5yo8b_di" bpmnElement="Flow_0b5yo8b"> |
| <omgdi:waypoint x="300" y="-120" /> |
| <omgdi:waypoint x="352" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_0xmx632_di" bpmnElement="Flow_0xmx632"> |
| <omgdi:waypoint x="250" y="-62" /> |
| <omgdi:waypoint x="250" y="-8" /> |
| </bpmndi:BPMNEdge> |
| </bpmndi:BPMNPlane> |
| </bpmndi:BPMNDiagram> |
| </definitions> |
| </bpmnio> |
| |
| Non-interrupting looks better but it won't let resetting the timer to the new due date: |
| |
| <bpmnio type="bpmn"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> |
| <process id="Process_0kf0077"> |
| <task id="Activity_1mnvjuz" name="Obtain payment"> |
| <incoming>Flow_1mqvexf</incoming> |
| <outgoing>Flow_0b5yo8b</outgoing> |
| </task> |
<startEvent id="Event_0jid81n"> | <startEvent id="Event_0jid81n"> |
<outgoing>Flow_1mqvexf</outgoing> | <outgoing>Flow_1mqvexf</outgoing> |
</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="Event_04k06ga" /> | <sequenceFlow id="Flow_1fkn8r9" sourceRef="Event_0r0tew3" targetRef="Activity_1skmlnn" /> |
<endEvent id="Event_04k06ga" name="Not paid"> | <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> |
| <boundaryEvent id="Event_0r0tew3" name="Payment due date" cancelActivity="false" attachedToRef="Activity_1mnvjuz"> |
| <outgoing>Flow_1fkn8r9</outgoing> |
| <timerEventDefinition id="TimerEventDefinition_1u44tv6" /> |
| </boundaryEvent> |
| <task id="Activity_1skmlnn" name="Clarify delay with the client"> |
<incoming>Flow_1fkn8r9</incoming> | <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"> |
| <incoming>Flow_0jzxjdu</incoming> |
| <terminateEventDefinition id="TerminateEventDefinition_1uvti5o" /> |
| </endEvent> |
| <endEvent id="Event_1ltc3ao" name="Overdue"> |
| <incoming>Flow_16a0qq5</incoming> |
</endEvent> | </endEvent> |
| <sequenceFlow id="Flow_16a0qq5" name="yes" sourceRef="Gateway_1sygjo0" targetRef="Event_1ltc3ao" /> |
<endEvent id="Event_1k1tn88" name="Paid"> | <endEvent id="Event_1k1tn88" name="Paid"> |
<incoming>Flow_0b5yo8b</incoming> | <incoming>Flow_0b5yo8b</incoming> |
| <terminateEventDefinition id="TerminateEventDefinition_1srmvcb" /> |
</endEvent> | </endEvent> |
<sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> | |
</process> | </process> |
<bpmndi:BPMNDiagram id="BpmnDiagram_1"> | <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
<omgdc:Bounds x="112" y="-138" width="36" height="36" /> | <omgdc:Bounds x="112" y="-138" width="36" height="36" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_0a3e20c_di" bpmnElement="Event_04k06ga"> | <bpmndi:BPMNShape id="Activity_1skmlnn_di" bpmnElement="Activity_1skmlnn"> |
<omgdc:Bounds x="232" y="-8" width="36" height="36" /> | <omgdc:Bounds x="200" y="-10" width="100" height="80" /> |
| <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="229" y="35" width="42" height="14" /> | <omgdc:Bounds x="342" y="-19" width="55" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_0ok4f4i_di" bpmnElement="Event_1k1tn88"> | <bpmndi:BPMNShape id="Event_08w64xf_di" bpmnElement="Event_04k06ga"> |
| <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_05jo8b9_di" bpmnElement="Event_1k1tn88"> |
<omgdc:Bounds x="352" y="-138" width="36" height="36" /> | <omgdc:Bounds x="352" y="-138" width="36" height="36" /> |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_0lg3tjq_di" bpmnElement="Event_0r0tew3"> | <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> |
<bpmndi:BPMNEdge id="Flow_1fkn8r9_di" bpmnElement="Flow_1fkn8r9"> | <bpmndi:BPMNEdge id="Flow_1fkn8r9_di" bpmnElement="Flow_1fkn8r9"> |
<omgdi:waypoint x="250" y="-62" /> | <omgdi:waypoint x="250" y="-62" /> |
<omgdi:waypoint x="250" y="-8" /> | <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"> |
<omgdi:waypoint x="300" y="-120" /> | <omgdi:waypoint x="300" y="-120" /> |
<omgdi:waypoint x="352" y="-120" /> | <omgdi:waypoint x="352" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_0gsynar_di" bpmnElement="Flow_0gsynar"> |
| <omgdi:waypoint x="300" y="30" /> |
| <omgdi:waypoint x="345" y="30" /> |
| </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> |
</definitions> | </definitions> |
</bpmnio> | </bpmnio> |
| ===== Notes ===== |
| |
Utilizing exclusive event-based gateway is a rather common mistake. What's missed in the diagram below is that the payment may arrive while we are discussing the issue with the client. If this happens, the message won't be catched and the process will hang on the gateway. | - 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. |
| - As an exception to the [[en:rule:explicit_parallel_split|general rule]], one may initiate work and control flows directly from the start event: |
| |
<bpmnio type="bpmn"> | <bpmnio type="bpmn"> |
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> | <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="http://bpmn.io" exporterVersion="0.10.1"> |
<process id="Process_0kf0077"> | <process id="Process_0kf0077"> |
<intermediateCatchEvent id="Event_0r0tew3" name="Payment due date"> | <subProcess id="Activity_1tn5n73"> |
<incoming>Flow_0opoyid</incoming> | <startEvent id="Event_13ec10q"> |
<outgoing>Flow_1tv5ius</outgoing> | <outgoing>Flow_1qbujp7</outgoing> |
<timerEventDefinition id="TimerEventDefinition_1a77cp0" /> | <outgoing>Flow_1v8e8eg</outgoing> |
</intermediateCatchEvent> | </startEvent> |
<intermediateCatchEvent id="Event_09tpike" name="Payment obtained"> | <task id="Activity_1mnvjuz" name="Obtain payment"> |
<incoming>Flow_11x2rmj</incoming> | <incoming>Flow_1qbujp7</incoming> |
<outgoing>Flow_1j4cmln</outgoing> | <outgoing>Flow_0xinlw8</outgoing> |
<messageEventDefinition id="MessageEventDefinition_0j2tmjq" /> | </task> |
</intermediateCatchEvent> | <intermediateCatchEvent id="Event_0r0tew3" name="Payment due date"> |
<eventBasedGateway id="Gateway_0qwge4c"> | <incoming>Flow_0tjh6sh</incoming> |
<incoming>Flow_1elj1ik</incoming> | <outgoing>Flow_0vj1spf</outgoing> |
<outgoing>Flow_11x2rmj</outgoing> | <timerEventDefinition id="TimerEventDefinition_1a77cp0" /> |
<outgoing>Flow_0opoyid</outgoing> | </intermediateCatchEvent> |
</eventBasedGateway> | <exclusiveGateway id="Gateway_1jxup79"> |
<sequenceFlow id="Flow_11x2rmj" sourceRef="Gateway_0qwge4c" targetRef="Event_09tpike" /> | <incoming>Flow_1fpmuu7</incoming> |
<sequenceFlow id="Flow_0opoyid" sourceRef="Gateway_0qwge4c" targetRef="Event_0r0tew3" /> | <incoming>Flow_1v8e8eg</incoming> |
<startEvent id="Event_01ljcuy"> | <outgoing>Flow_0tjh6sh</outgoing> |
<outgoing>Flow_104xfj6</outgoing> | </exclusiveGateway> |
</startEvent> | <sequenceFlow id="Flow_0tjh6sh" sourceRef="Gateway_1jxup79" targetRef="Event_0r0tew3" /> |
<sequenceFlow id="Flow_1j4cmln" sourceRef="Event_09tpike" targetRef="Event_1k1tn88" /> | <sequenceFlow id="Flow_0xinlw8" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> |
<task id="Activity_12mr8cn" name="Clarify delay with the client"> | <endEvent id="Event_1k1tn88" name="Paid"> |
<incoming>Flow_1tv5ius</incoming> | <incoming>Flow_0xinlw8</incoming> |
<outgoing>Flow_06rckk1</outgoing> | <terminateEventDefinition id="TerminateEventDefinition_0ku242o" /> |
</task> | </endEvent> |
<sequenceFlow id="Flow_1tv5ius" sourceRef="Event_0r0tew3" targetRef="Activity_12mr8cn" /> | <task id="Activity_12mr8cn" name="Clarify delay with the client"> |
<exclusiveGateway id="Gateway_0gfb7mo" name="Wait more?"> | <incoming>Flow_0vj1spf</incoming> |
<incoming>Flow_06rckk1</incoming> | <outgoing>Flow_0v7giyt</outgoing> |
<outgoing>Flow_0eyb0h5</outgoing> | </task> |
<outgoing>Flow_083x67t</outgoing> | <sequenceFlow id="Flow_0vj1spf" sourceRef="Event_0r0tew3" targetRef="Activity_12mr8cn" /> |
</exclusiveGateway> | <exclusiveGateway id="Gateway_0gfb7mo" name="Wait more?"> |
<sequenceFlow id="Flow_06rckk1" sourceRef="Activity_12mr8cn" targetRef="Gateway_0gfb7mo" /> | <incoming>Flow_0v7giyt</incoming> |
<sequenceFlow id="Flow_0eyb0h5" name="no" sourceRef="Gateway_0gfb7mo" targetRef="Event_04k06ga" /> | <outgoing>Flow_0xssdyb</outgoing> |
<endEvent id="Event_1k1tn88" name="Paid"> | <outgoing>Flow_1fpmuu7</outgoing> |
<incoming>Flow_1j4cmln</incoming> | </exclusiveGateway> |
</endEvent> | <sequenceFlow id="Flow_0v7giyt" sourceRef="Activity_12mr8cn" targetRef="Gateway_0gfb7mo" /> |
<endEvent id="Event_04k06ga" name="Not paid"> | <sequenceFlow id="Flow_0xssdyb" name="no" sourceRef="Gateway_0gfb7mo" targetRef="Event_04k06ga" /> |
<incoming>Flow_0eyb0h5</incoming> | <sequenceFlow id="Flow_1fpmuu7" name="yes" sourceRef="Gateway_0gfb7mo" targetRef="Gateway_1jxup79" /> |
</endEvent> | <endEvent id="Event_04k06ga" name="Not paid"> |
<exclusiveGateway id="Gateway_057c6r5"> | <incoming>Flow_0xssdyb</incoming> |
<incoming>Flow_104xfj6</incoming> | <terminateEventDefinition id="TerminateEventDefinition_0jd5cs4" /> |
<incoming>Flow_083x67t</incoming> | </endEvent> |
<outgoing>Flow_1elj1ik</outgoing> | <sequenceFlow id="Flow_1qbujp7" sourceRef="Event_13ec10q" targetRef="Activity_1mnvjuz" /> |
</exclusiveGateway> | <sequenceFlow id="Flow_1v8e8eg" sourceRef="Event_13ec10q" targetRef="Gateway_1jxup79" /> |
<sequenceFlow id="Flow_104xfj6" sourceRef="Event_01ljcuy" targetRef="Gateway_057c6r5" /> | </subProcess> |
<sequenceFlow id="Flow_1elj1ik" sourceRef="Gateway_057c6r5" targetRef="Gateway_0qwge4c" /> | |
<sequenceFlow id="Flow_083x67t" name="yes" sourceRef="Gateway_0gfb7mo" targetRef="Gateway_057c6r5" /> | |
</process> | </process> |
<bpmndi:BPMNDiagram id="BpmnDiagram_1"> | <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
<bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0kf0077"> | <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0kf0077"> |
<bpmndi:BPMNShape id="Gateway_182m8yn_di" bpmnElement="Gateway_0qwge4c"> | <bpmndi:BPMNShape id="Activity_1tn5n73_di" bpmnElement="Activity_1tn5n73" isExpanded="true"> |
<omgdc:Bounds x="395" y="-145" width="50" height="50" /> | <omgdc:Bounds x="350" y="-620" width="580" height="330" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_0lccgc3_di" bpmnElement="Event_09tpike"> | <bpmndi:BPMNShape id="Activity_1mnvjuz_di" bpmnElement="Activity_1mnvjuz"> |
<omgdc:Bounds x="512" y="-138" width="36" height="36" /> | <omgdc:Bounds x="490" y="-410" width="100" height="80" /> |
| <bpmndi:BPMNLabel /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_1f2yzhy_di" bpmnElement="Event_0r0tew3"> |
| <omgdc:Bounds x="522" y="-498" width="36" height="36" /> |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="486" y="-95" width="89" height="14" /> | <omgdc:Bounds x="495" y="-455" width="90" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_1f2yzhy_di" bpmnElement="Event_0r0tew3"> | <bpmndi:BPMNShape id="Event_0s7eoii_di" bpmnElement="Event_1k1tn88"> |
<omgdc:Bounds x="512" y="-258" width="36" height="36" /> | <omgdc:Bounds x="652" y="-388" width="36" height="36" /> |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="485" y="-215" width="90" height="14" /> | <omgdc:Bounds x="659" y="-345" width="23" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | |
<bpmndi:BPMNShape id="Event_01ljcuy_di" bpmnElement="Event_01ljcuy"> | |
<omgdc:Bounds x="212" y="-138" width="36" height="36" /> | |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Activity_12mr8cn_di" bpmnElement="Activity_12mr8cn"> | <bpmndi:BPMNShape id="Activity_12mr8cn_di" bpmnElement="Activity_12mr8cn"> |
<omgdc:Bounds x="600" y="-280" width="100" height="80" /> | <omgdc:Bounds x="620" y="-520" width="100" height="80" /> |
<bpmndi:BPMNLabel /> | <bpmndi:BPMNLabel /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_0gfb7mo_di" bpmnElement="Gateway_0gfb7mo" isMarkerVisible="true"> | <bpmndi:BPMNShape id="Gateway_0gfb7mo_di" bpmnElement="Gateway_0gfb7mo" isMarkerVisible="true"> |
<omgdc:Bounds x="755" y="-265" width="50" height="50" /> | <omgdc:Bounds x="765" y="-505" width="50" height="50" /> |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="752" y="-205" width="56" height="14" /> | <omgdc:Bounds x="762" y="-448" width="56" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_081tn46_di" bpmnElement="Event_1k1tn88"> | <bpmndi:BPMNShape id="Event_1kp0poi_di" bpmnElement="Event_04k06ga"> |
<omgdc:Bounds x="632" y="-138" width="36" height="36" /> | <omgdc:Bounds x="852" y="-498" width="36" height="36" /> |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="639" y="-95" width="23" height="14" /> | <omgdc:Bounds x="849" y="-455" width="42" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Gateway_057c6r5_di" bpmnElement="Gateway_057c6r5" isMarkerVisible="true"> | <bpmndi:BPMNShape id="Event_13ec10q_di" bpmnElement="Event_13ec10q"> |
<omgdc:Bounds x="295" y="-145" width="50" height="50" /> | <omgdc:Bounds x="402" y="-388" width="36" height="36" /> |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNShape id="Event_1odkgr3_di" bpmnElement="Event_04k06ga"> | <bpmndi:BPMNShape id="Gateway_1jxup79_di" bpmnElement="Gateway_1jxup79" isMarkerVisible="true"> |
<omgdc:Bounds x="852" y="-258" width="36" height="36" /> | <omgdc:Bounds x="395" y="-505" width="50" height="50" /> |
<bpmndi:BPMNLabel> | |
<omgdc:Bounds x="849" y="-215" width="42" height="14" /> | |
</bpmndi:BPMNLabel> | |
</bpmndi:BPMNShape> | </bpmndi:BPMNShape> |
<bpmndi:BPMNEdge id="Flow_11x2rmj_di" bpmnElement="Flow_11x2rmj"> | <bpmndi:BPMNEdge id="Flow_0tjh6sh_di" bpmnElement="Flow_0tjh6sh"> |
<omgdi:waypoint x="445" y="-120" /> | <omgdi:waypoint x="445" y="-480" /> |
<omgdi:waypoint x="512" y="-120" /> | <omgdi:waypoint x="522" y="-480" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_0opoyid_di" bpmnElement="Flow_0opoyid"> | <bpmndi:BPMNEdge id="Flow_0xinlw8_di" bpmnElement="Flow_0xinlw8"> |
<omgdi:waypoint x="420" y="-145" /> | <omgdi:waypoint x="590" y="-370" /> |
<omgdi:waypoint x="420" y="-240" /> | <omgdi:waypoint x="652" y="-370" /> |
<omgdi:waypoint x="512" y="-240" /> | |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_1j4cmln_di" bpmnElement="Flow_1j4cmln"> | <bpmndi:BPMNEdge id="Flow_0vj1spf_di" bpmnElement="Flow_0vj1spf"> |
<omgdi:waypoint x="548" y="-120" /> | <omgdi:waypoint x="558" y="-480" /> |
<omgdi:waypoint x="632" y="-120" /> | <omgdi:waypoint x="620" y="-480" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_1tv5ius_di" bpmnElement="Flow_1tv5ius"> | <bpmndi:BPMNEdge id="Flow_0v7giyt_di" bpmnElement="Flow_0v7giyt"> |
<omgdi:waypoint x="548" y="-240" /> | <omgdi:waypoint x="720" y="-480" /> |
<omgdi:waypoint x="600" y="-240" /> | <omgdi:waypoint x="765" y="-480" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_06rckk1_di" bpmnElement="Flow_06rckk1"> | <bpmndi:BPMNEdge id="Flow_0xssdyb_di" bpmnElement="Flow_0xssdyb"> |
<omgdi:waypoint x="700" y="-240" /> | <omgdi:waypoint x="815" y="-480" /> |
<omgdi:waypoint x="755" y="-240" /> | <omgdi:waypoint x="852" y="-480" /> |
</bpmndi:BPMNEdge> | |
<bpmndi:BPMNEdge id="Flow_0eyb0h5_di" bpmnElement="Flow_0eyb0h5"> | |
<omgdi:waypoint x="805" y="-240" /> | |
<omgdi:waypoint x="852" y="-240" /> | |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="822" y="-258" width="13" height="14" /> | <omgdc:Bounds x="827" y="-498" width="13" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
<bpmndi:BPMNEdge id="Flow_104xfj6_di" bpmnElement="Flow_104xfj6"> | <bpmndi:BPMNEdge id="Flow_1fpmuu7_di" bpmnElement="Flow_1fpmuu7"> |
<omgdi:waypoint x="248" y="-120" /> | <omgdi:waypoint x="790" y="-505" /> |
<omgdi:waypoint x="295" y="-120" /> | <omgdi:waypoint x="790" y="-570" /> |
</bpmndi:BPMNEdge> | <omgdi:waypoint x="420" y="-570" /> |
<bpmndi:BPMNEdge id="Flow_1elj1ik_di" bpmnElement="Flow_1elj1ik"> | <omgdi:waypoint x="420" y="-505" /> |
<omgdi:waypoint x="345" y="-120" /> | |
<omgdi:waypoint x="395" y="-120" /> | |
</bpmndi:BPMNEdge> | |
<bpmndi:BPMNEdge id="Flow_083x67t_di" bpmnElement="Flow_083x67t"> | |
<omgdi:waypoint x="780" y="-265" /> | |
<omgdi:waypoint x="780" y="-330" /> | |
<omgdi:waypoint x="320" y="-330" /> | |
<omgdi:waypoint x="320" y="-145" /> | |
<bpmndi:BPMNLabel> | <bpmndi:BPMNLabel> |
<omgdc:Bounds x="542" y="-348" width="17" height="14" /> | <omgdc:Bounds x="597" y="-588" width="17" height="14" /> |
</bpmndi:BPMNLabel> | </bpmndi:BPMNLabel> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_1qbujp7_di" bpmnElement="Flow_1qbujp7"> |
| <omgdi:waypoint x="438" y="-370" /> |
| <omgdi:waypoint x="490" y="-370" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_1v8e8eg_di" bpmnElement="Flow_1v8e8eg"> |
| <omgdi:waypoint x="420" y="-388" /> |
| <omgdi:waypoint x="420" y="-455" /> |
</bpmndi:BPMNEdge> | </bpmndi:BPMNEdge> |
</bpmndi:BPMNPlane> | </bpmndi:BPMNPlane> |
</definitions> | </definitions> |
</bpmnio> | </bpmnio> |
| |
===== Notes ===== | |
| |
Although it's usually better to depict subprocesses collapsed to isolate their internals, it may make sence to depict the subprocess expanded in this technique to make the logic clear. | |
===== Exceptions ===== | |
| |
Attached events are simpler and hence should be preferred in more straightforward scenarios. | |
| |
===== See also ===== | ===== See also ===== |
| |
* [[en:rule:event_gateway_warning]] | * [[en:rule:event_gateway_warning]] |
| |
===== Автор(ы) ===== | ===== Autor(s) ===== |
| |
--- //[[user:bell|Anatoly Belaychuk]] 2023-09-10 11:21// | --- //[[user:bell|Anatoly Belaychuk]] 2023-09-10 11:21// |
| |