====== Используйте для моделирования межпроцессного взаимодействия событие-условие ======
{{tag>взаимодействие событие-сообщение событие-условие промежуточное_событие}}
Событие-сообщение создает тесную связь между процессами: процесс-отправитель сообщения должен знать внутреннее устройство процесса-получателя.
Событие-условие позволяет реализовать более технологичную слабосвязную процессную архитектуру.
===== ✔ Как надо =====
Flow_09aipy9
Flow_09aipy9
Flow_16kqfso
Flow_16kqfso
Flow_1s33fqb
Flow_008j1br
Flow_1s33fqb
Flow_1ins0qh
Flow_1lsywu4
DataStoreReference_1o133y4
Flow_008j1br
Flow_1ins0qh
Flow_1lsywu4
Flow_0bg3trg
Flow_1wyen10
Flow_1wyen10
Flow_165lj3o
Flow_0ea0g86
Flow_165lj3o
Flow_0bg3trg
Flow_0ea0g86
Flow_1xejeiu
Flow_0uoc8i4
Flow_1xejeiu
Flow_0uoc8i4
Flow_1w0i707
Flow_1j3yt6b
Flow_1j3yt6b
Flow_12i57do
DataStoreReference_1o133y4
Property_1irqq7e
Flow_12i57do
Flow_0kxrz4w
Flow_081u6je
Flow_0kxrz4w
Flow_081u6je
Flow_0pavqii
DataStoreReference_1o133y4
Flow_0pavqii
Flow_1w0i707
для каждой строки
===== ✘ Как НЕ надо =====
Flow_09aipy9
Flow_09aipy9
Flow_16kqfso
Flow_16kqfso
Flow_1s33fqb
Flow_008j1br
Flow_1s33fqb
Flow_1ins0qh
Flow_1lsywu4
DataStoreReference_1o133y4
Flow_008j1br
Flow_1ins0qh
Flow_1lsywu4
Flow_0bg3trg
Flow_1wyen10
Flow_0bg3trg
Flow_0ea0g86
Flow_1wyen10
Flow_165lj3o
Flow_0ea0g86
Flow_165lj3o
Flow_1w0i707
Flow_1xejeiu
Flow_0uoc8i4
Flow_1xejeiu
Flow_0uoc8i4
Flow_1w0i707
Flow_1j3yt6b
Flow_1j3yt6b
Flow_12i57do
DataStoreReference_1o133y4
Property_1irqq7e
Flow_12i57do
Flow_0kxrz4w
Flow_081u6je
Flow_081u6je
Flow_0kxrz4w
для каждой строки
===== Примечания =====
Пока счета выставляет один процесс, большой разницы между схемами с событием-сообщением и событием-условием нет.
Схема с событием-сообщением даже выглядит предпочтительнее, поскольку более наглядно показывает механизм взаимодействия между процессами.
Ситуация меняется, если принять реалистичное допущение, что у компании несколько процессов продажи: товаров, услуг, розничная, партнерская и т.п.
В этом случае логика процесса обработки выписки банка сильно усложнится:
в него придется добавить развилку, которая будет отправлять сообщение в тот процесс, из которого пришел данный конкретный счет.
При добавлении нового процесса продажи в процесс обработки выписки придется вносить изменения.
Событие-условие позволяет избавиться от этой зависимости.
Здесь процессам не требуется ничего не знать о внутреннем устройстве друг друга, достаточно интерфейса, роль которого играет хранилище данных:
* процесс-клиент (От заказа до оплаты) добавляет запись в таблицу базу данных (Выставленные счета) и ждет, пока значение поля "статус" этой записи изменится на требуемый (оплачен)
* процесс-сервер (Обработка выписки банка), обрабатывая очередную строку, ищет среди выставленных счетов тот, на который ссылается платеж, и меняет статус найденного счета на "оплачен"
* процесс-клиент выходит из ожидания и продолжает работу
Процессов-клиентов и процессов-серверов при этом может быть сколько угодно.
В случае исполняемой модели процесса событие-сообщение должно автоматически обрабатываться движком.
Если процессный движок не поддерживает событие-условие, его легко заменить комбинацией развилки "или-или" и таймера:
Flow_158maf0
Flow_0kylthe
Flow_14u27z9
Flow_0kylthe
Flow_1afx0lh
Flow_14u27z9
Flow_1afx0lh
Flow_158maf0
В случае неисполняемой модели событие-условие моделирует действия сотрудника, который периодически нажимает клавишу F5 на странице информационной системы,
отображающей перечень выставленных счетов с их статусом.
===== Исключения =====
Схема взаимодействия с помощью событий-сообщений приемлема, если в нем участвуют ровно два процесса.
===== Смотри также =====
* [[external_event]]
* [[event_gateway_warning]]
* [[collapsed_subprocess]]
* [[single_process]]
===== Автор(ы) =====
--- //[[user:bell|Anatoly Belaychuk]] 2024-08-27 18:18//