Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
ru:rule:control_branch [2024-03-26 00:03] – [Примечания] Anatoly Belaychuk | ru:rule:control_branch [2024-11-02 13:40] (текущий) – [✘ Как НЕ надо] Anatoly Belaychuk |
---|
====== В качестве альтернативы прикрепленному обработчику можно использовать подпроцесс и контрольный поток управления ====== | ====== В качестве альтернативы прикрепленному обработчику можно использовать подпроцесс и контрольный поток управления ====== |
| |
{{tag>подпроцесс событие прикрепленный_обработчик}} | {{tag>подпроцесс событие прикрепленный_обработчик событие-останов}} |
| |
Для моделирования гибкой логики обработки событий используйте подпроцесс, содержащий основной и контрольный потоки управления. | Для моделирования гибкой логики обработки событий используйте подпроцесс, содержащий основной и контрольный потоки управления. |
===== ✔ Как надо ===== | ===== ✔ Как надо ===== |
| |
Предположим, вам необходимо смоделировать ожидание поступления платежа от клиента с одновременным контролем срока оплаты и, в случае просрочки, выяснением причин. Используйте для этого следующие шаги: | Предположим, вам необходимо смоделировать ожидание поступления платежа от клиента с одновременным контролем срока оплаты и, в случае просрочки, выяснением причин. |
| Для этого выполните следующие шаги: |
| |
- Поместите задачу "Получить оплату" в подпроцесс. | - Поместите задачу "Получить оплату" в подпроцесс. |
- Начните подпроцесса с параллельной развилки, из которой исходят две ветви, "рабочая" и "контрольная". | - Начните подпроцесс с параллельной развилки, из которой исходят две ветви, "рабочая" и "контрольная". |
- Разместите задачу "Получить оплату" на рабочей ветви. | - Разместите задачу "Получить оплату" на рабочей ветви. |
- Разместите таймер на контрольной ветви. | - Разместите таймер на контрольной ветви. |
<endEvent id="Event_1k1tn88" name="Оплачено"> | <endEvent id="Event_1k1tn88" name="Оплачено"> |
<incoming>Flow_0b5yo8b</incoming> | <incoming>Flow_0b5yo8b</incoming> |
| <terminateEventDefinition id="TerminateEventDefinition_0jd5cs4" /> |
</endEvent> | </endEvent> |
<sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> | <sequenceFlow id="Flow_0b5yo8b" sourceRef="Activity_1mnvjuz" targetRef="Event_1k1tn88" /> |
- Прикрепленный обработчик разрывает логику подпроцесса: часть логики оказывается внутри подпроцесса, часть - снаружи. Рассматриваемая альтернативная техника лишена этого недостатка. | - Прикрепленный обработчик разрывает логику подпроцесса: часть логики оказывается внутри подпроцесса, часть - снаружи. Рассматриваемая альтернативная техника лишена этого недостатка. |
- Как правило, предпочтительно [[ru:rule:collapsed_subprocess | изображать подпроцесс в свернутом виде ]], чтобы абстрагироваться от его внутреннего устройства, но в данном случае есть смысл показать подпроцесс развернутым, чтобы прояснить логику процесса. | - Как правило, предпочтительно [[ru:rule:collapsed_subprocess | изображать подпроцесс в свернутом виде ]], чтобы абстрагироваться от его внутреннего устройства, но в данном случае есть смысл показать подпроцесс развернутым, чтобы прояснить логику процесса. |
- Как правило, [[ru:rule:one_outgoing_control_flow | из действия или события не должно выходить несколько потоков управления ]], но в данном случае допустимо изобразить основную и контрольную ветви выходящими непосредственно из стартового события: | - Как правило, [[ru:rule:explicit_parallel_split| из действия или события не должно выходить несколько потоков управления ]], но в данном случае допустимо изобразить основную и контрольную ветви выходящими непосредственно из стартового события: |
| |
<bpmnio type="bpmn"> | <bpmnio type="bpmn"> |