====== В качестве альтернативы прикрепленному обработчику можно использовать подпроцесс и контрольный поток управления ====== {{tag>подпроцесс событие прикрепленный_обработчик событие-останов}} Для моделирования гибкой логики обработки событий используйте подпроцесс, содержащий основной и контрольный потоки управления. ===== ✔ Как надо ===== Предположим, вам необходимо смоделировать ожидание поступления платежа от клиента с одновременным контролем срока оплаты и, в случае просрочки, выяснением причин. Для этого выполните следующие шаги: - Поместите задачу "Получить оплату" в подпроцесс. - Начните подпроцесс с параллельной развилки, из которой исходят две ветви, "рабочая" и "контрольная". - Разместите задачу "Получить оплату" на рабочей ветви. - Разместите таймер на контрольной ветви. - Завершите обе ветви событием-остановом. Flow_0c37d4z Flow_0c37d4z Flow_05uwose Flow_1yoh8c2 Flow_05uwose Flow_0xinlw8 Flow_0tjh6sh Flow_0vj1spf Flow_1yoh8c2 Flow_1fpmuu7 Flow_0tjh6sh Flow_0xinlw8 Flow_0vj1spf Flow_0v7giyt Flow_0v7giyt Flow_0xssdyb Flow_1fpmuu7 Flow_0xssdyb ===== ✘ Как НЕ надо ===== Прерывающий прикрепленный обработчик не даст возможности выяснять у клиента причину задержки, продолжая при этом надеяться на поступление платежа: Flow_1mqvexf Flow_0b5yo8b Flow_1mqvexf Flow_0b5yo8b Flow_0xmx632 Flow_0xmx632 Непрерывающий обработчик выглядит более подходящим, но он не даст возможности установить таймер на новый срок оплаты: Flow_1mqvexf Flow_0b5yo8b Flow_1mqvexf Flow_0b5yo8b Flow_1fkn8r9 Flow_1fkn8r9 Flow_0gsynar Flow_0gsynar Flow_0jzxjdu Flow_16a0qq5 Flow_0jzxjdu Flow_16a0qq5 ===== Примечания ===== - Прикрепленный обработчик разрывает логику подпроцесса: часть логики оказывается внутри подпроцесса, часть - снаружи. Рассматриваемая альтернативная техника лишена этого недостатка. - Как правило, предпочтительно [[ru:rule:collapsed_subprocess | изображать подпроцесс в свернутом виде ]], чтобы абстрагироваться от его внутреннего устройства, но в данном случае есть смысл показать подпроцесс развернутым, чтобы прояснить логику процесса. - Как правило, [[ru:rule:explicit_parallel_split| из действия или события не должно выходить несколько потоков управления ]], но в данном случае допустимо изобразить основную и контрольную ветви выходящими непосредственно из стартового события: Flow_1qbujp7 Flow_1v8e8eg Flow_1qbujp7 Flow_0xinlw8 Flow_0tjh6sh Flow_0vj1spf Flow_1fpmuu7 Flow_1v8e8eg Flow_0tjh6sh Flow_0xinlw8 Flow_0vj1spf Flow_0v7giyt Flow_0v7giyt Flow_0xssdyb Flow_1fpmuu7 Flow_0xssdyb ===== Смотри также ===== * [[ru:rule:event_gateway_warning]] ===== Автор(ы) ===== --- //[[user:bell|Anatoly Belaychuk]] 2024-01-08 18:53//