Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
ru:rule:event_gateway_warning [2024-01-08 11:34] – [✔ Как надо] Anatoly Belaychuk | ru:rule:event_gateway_warning [2024-09-20 23:04] (текущий) – [Примечания] Anatoly Belaychuk |
---|
====== Будьте осторожны с развилками по событиям ====== | ====== Будьте осторожны с развилками по событиям ====== |
| |
{{tag>gateway event}} | {{tag>развилка параллельная_развилка развилка_по_событиям}} |
| |
| Развилка по событиям немедленно прерывает ожидание всех событий при наступлении любого из них. |
| Если необходимо реализовать более гибкую бизнес-логику, используйте параллельную развилку и событие-останов. |
| |
Обратите внимание на разницу между диаграммами внизу: если процесс "как надо" ожидает прихода сообщения постоянно, то процесс "как не надо" прекращает ожидание, когда срабатывает таймер. Если сообщение приходит во время выяснения причин задержки с клиентом, оно не будет обработано и в результате процесс зависнет после возврата к развилке по событиям. Это распространенная ошибка. | |
===== ✔ Как надо ===== | ===== ✔ Как надо ===== |
| |
<outgoing>Flow_1omf6ox</outgoing> | <outgoing>Flow_1omf6ox</outgoing> |
</parallelGateway> | </parallelGateway> |
<endEvent id="Event_1k1tn88" name="Paid"> | <endEvent id="Event_1k1tn88" name="Оплачено"> |
<incoming>Flow_1x386gx</incoming> | <incoming>Flow_1x386gx</incoming> |
<terminateEventDefinition id="TerminateEventDefinition_0ku242o" /> | <terminateEventDefinition id="TerminateEventDefinition_0ku242o" /> |
<sequenceFlow id="Flow_0tjh6sh" sourceRef="Gateway_1jxup79" targetRef="Event_0r0tew3" /> | <sequenceFlow id="Flow_0tjh6sh" sourceRef="Gateway_1jxup79" targetRef="Event_0r0tew3" /> |
<sequenceFlow id="Flow_0vj1spf" sourceRef="Event_0r0tew3" targetRef="Activity_12mr8cn" /> | <sequenceFlow id="Flow_0vj1spf" sourceRef="Event_0r0tew3" targetRef="Activity_12mr8cn" /> |
<sequenceFlow id="Flow_1fpmuu7" name="yes" sourceRef="Gateway_0gfb7mo" targetRef="Gateway_1jxup79" /> | <sequenceFlow id="Flow_1fpmuu7" name="да" sourceRef="Gateway_0gfb7mo" targetRef="Gateway_1jxup79" /> |
<sequenceFlow id="Flow_0v7giyt" sourceRef="Activity_12mr8cn" targetRef="Gateway_0gfb7mo" /> | <sequenceFlow id="Flow_0v7giyt" sourceRef="Activity_12mr8cn" targetRef="Gateway_0gfb7mo" /> |
<sequenceFlow id="Flow_0xssdyb" name="no" sourceRef="Gateway_0gfb7mo" targetRef="Event_04k06ga" /> | <sequenceFlow id="Flow_0xssdyb" name="нет" sourceRef="Gateway_0gfb7mo" targetRef="Event_04k06ga" /> |
<sequenceFlow id="Flow_1omf6ox" sourceRef="Gateway_08peucq" targetRef="Gateway_1jxup79" /> | <sequenceFlow id="Flow_1omf6ox" sourceRef="Gateway_08peucq" targetRef="Gateway_1jxup79" /> |
<intermediateCatchEvent id="Event_1hlib99" name="Payment obtained"> | <intermediateCatchEvent id="Event_1hlib99" name="Поступила оплата"> |
<incoming>Flow_1bmuvfd</incoming> | <incoming>Flow_1bmuvfd</incoming> |
<outgoing>Flow_1x386gx</outgoing> | <outgoing>Flow_1x386gx</outgoing> |
===== ✘ Как НЕ надо ===== | ===== ✘ Как НЕ надо ===== |
| |
Тут антипаттерны (диаграммы) | <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"> |
| <intermediateCatchEvent id="Event_0r0tew3" name="Срок оплаты"> |
| <incoming>Flow_0opoyid</incoming> |
| <outgoing>Flow_1tv5ius</outgoing> |
| <timerEventDefinition id="TimerEventDefinition_1a77cp0" /> |
| </intermediateCatchEvent> |
| <intermediateCatchEvent id="Event_09tpike" name="Поступила оплата"> |
| <incoming>Flow_11x2rmj</incoming> |
| <outgoing>Flow_1j4cmln</outgoing> |
| <messageEventDefinition id="MessageEventDefinition_0j2tmjq" /> |
| </intermediateCatchEvent> |
| <eventBasedGateway id="Gateway_0qwge4c"> |
| <incoming>Flow_1elj1ik</incoming> |
| <outgoing>Flow_11x2rmj</outgoing> |
| <outgoing>Flow_0opoyid</outgoing> |
| </eventBasedGateway> |
| <sequenceFlow id="Flow_11x2rmj" sourceRef="Gateway_0qwge4c" targetRef="Event_09tpike" /> |
| <sequenceFlow id="Flow_0opoyid" sourceRef="Gateway_0qwge4c" targetRef="Event_0r0tew3" /> |
| <startEvent id="Event_01ljcuy"> |
| <outgoing>Flow_104xfj6</outgoing> |
| </startEvent> |
| <sequenceFlow id="Flow_1j4cmln" sourceRef="Event_09tpike" targetRef="Event_1k1tn88" /> |
| <task id="Activity_12mr8cn" name="Выяснить у клиента причину задержки"> |
| <incoming>Flow_1tv5ius</incoming> |
| <outgoing>Flow_06rckk1</outgoing> |
| </task> |
| <sequenceFlow id="Flow_1tv5ius" sourceRef="Event_0r0tew3" targetRef="Activity_12mr8cn" /> |
| <exclusiveGateway id="Gateway_0gfb7mo" name="Ждем еще?"> |
| <incoming>Flow_06rckk1</incoming> |
| <outgoing>Flow_0eyb0h5</outgoing> |
| <outgoing>Flow_083x67t</outgoing> |
| </exclusiveGateway> |
| <sequenceFlow id="Flow_06rckk1" sourceRef="Activity_12mr8cn" targetRef="Gateway_0gfb7mo" /> |
| <sequenceFlow id="Flow_0eyb0h5" name="нет" sourceRef="Gateway_0gfb7mo" targetRef="Event_04k06ga" /> |
| <endEvent id="Event_1k1tn88" name="Оплачено"> |
| <incoming>Flow_1j4cmln</incoming> |
| </endEvent> |
| <endEvent id="Event_04k06ga" name="Не оплачено"> |
| <incoming>Flow_0eyb0h5</incoming> |
| </endEvent> |
| <exclusiveGateway id="Gateway_057c6r5"> |
| <incoming>Flow_104xfj6</incoming> |
| <incoming>Flow_083x67t</incoming> |
| <outgoing>Flow_1elj1ik</outgoing> |
| </exclusiveGateway> |
| <sequenceFlow id="Flow_104xfj6" sourceRef="Event_01ljcuy" targetRef="Gateway_057c6r5" /> |
| <sequenceFlow id="Flow_1elj1ik" sourceRef="Gateway_057c6r5" targetRef="Gateway_0qwge4c" /> |
| <sequenceFlow id="Flow_083x67t" name="да" sourceRef="Gateway_0gfb7mo" targetRef="Gateway_057c6r5" /> |
| </process> |
| <bpmndi:BPMNDiagram id="BpmnDiagram_1"> |
| <bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_0kf0077"> |
| <bpmndi:BPMNShape id="Gateway_182m8yn_di" bpmnElement="Gateway_0qwge4c"> |
| <omgdc:Bounds x="395" y="-145" width="50" height="50" /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_0lccgc3_di" bpmnElement="Event_09tpike"> |
| <omgdc:Bounds x="512" y="-138" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="486" y="-95" width="89" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_1f2yzhy_di" bpmnElement="Event_0r0tew3"> |
| <omgdc:Bounds x="512" y="-258" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="485" y="-215" width="90" height="14" /> |
| </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 id="Activity_12mr8cn_di" bpmnElement="Activity_12mr8cn"> |
| <omgdc:Bounds x="600" y="-280" width="100" height="80" /> |
| <bpmndi:BPMNLabel /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Gateway_0gfb7mo_di" bpmnElement="Gateway_0gfb7mo" isMarkerVisible="true"> |
| <omgdc:Bounds x="755" y="-265" width="50" height="50" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="752" y="-205" width="56" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_081tn46_di" bpmnElement="Event_1k1tn88"> |
| <omgdc:Bounds x="632" y="-138" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="639" y="-95" width="23" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Gateway_057c6r5_di" bpmnElement="Gateway_057c6r5" isMarkerVisible="true"> |
| <omgdc:Bounds x="295" y="-145" width="50" height="50" /> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNShape id="Event_1odkgr3_di" bpmnElement="Event_04k06ga"> |
| <omgdc:Bounds x="852" y="-258" width="36" height="36" /> |
| <bpmndi:BPMNLabel> |
| <omgdc:Bounds x="849" y="-215" width="42" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNShape> |
| <bpmndi:BPMNEdge id="Flow_11x2rmj_di" bpmnElement="Flow_11x2rmj"> |
| <omgdi:waypoint x="445" y="-120" /> |
| <omgdi:waypoint x="512" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_0opoyid_di" bpmnElement="Flow_0opoyid"> |
| <omgdi:waypoint x="420" y="-145" /> |
| <omgdi:waypoint x="420" y="-240" /> |
| <omgdi:waypoint x="512" y="-240" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_1j4cmln_di" bpmnElement="Flow_1j4cmln"> |
| <omgdi:waypoint x="548" y="-120" /> |
| <omgdi:waypoint x="632" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_1tv5ius_di" bpmnElement="Flow_1tv5ius"> |
| <omgdi:waypoint x="548" y="-240" /> |
| <omgdi:waypoint x="600" y="-240" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_06rckk1_di" bpmnElement="Flow_06rckk1"> |
| <omgdi:waypoint x="700" y="-240" /> |
| <omgdi:waypoint x="755" y="-240" /> |
| </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> |
| <omgdc:Bounds x="822" y="-258" width="13" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_104xfj6_di" bpmnElement="Flow_104xfj6"> |
| <omgdi:waypoint x="248" y="-120" /> |
| <omgdi:waypoint x="295" y="-120" /> |
| </bpmndi:BPMNEdge> |
| <bpmndi:BPMNEdge id="Flow_1elj1ik_di" bpmnElement="Flow_1elj1ik"> |
| <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> |
| <omgdc:Bounds x="542" y="-348" width="17" height="14" /> |
| </bpmndi:BPMNLabel> |
| </bpmndi:BPMNEdge> |
| </bpmndi:BPMNPlane> |
| </bpmndi:BPMNDiagram> |
| </definitions> |
| </bpmnio> |
===== Примечания ===== | ===== Примечания ===== |
| |
Тут дополнительные комментарии (этот раздел опционален) | Обратите внимание на разницу между диаграммами: если процесс "[[#как_надо]]" ожидает прихода сообщения постоянно, то процесс "[[#как_не_надо]]" прекращает ожидание, когда срабатывает таймер. |
| В этой схеме, если сообщение приходит во время выяснения причины задержки, оно не будет обработано и в результате процесс зависнет после возврата к развилке по событиям. |
| |
===== Исключения ===== | ===== Смотри также ===== |
| |
Исключения из указанного выше правила | * [[ru:rule:control_branch]] |
| |
===== Связанные страницы ===== | |
| |
Тут ссылки на страницы со схожим контентом (этот раздел опционален) | |
| |
===== Автор(ы) ===== | ===== Автор(ы) ===== |
| |
Тут подпись | --- //[[user:bell|Anatoly Belaychuk]] 2024-01-08 11:45// |