Шлюзы используются для описания условных и параллельных процессов в бизнес-процессах. Они позволяют моделировать разветвления и объединения потоков выполнения процесса в зависимости от определенных условий или событий.
Условия задаются в потоках, следующих после шлюзов с помощью выражений:
Примеры условий:
Условие по полю связь
`{{variables.field_fieldName[0] === "content._id"}}`
Условие по полю строка
`{{variables.field_fieldName[0] === "string"}}`
Графически данный шлюз отображается так:
Расходящаяся развилка/шлюз «или/или» - на данном шлюзе можно выбрать только один путь, по которому процесс пойдет дальше.
Когда токен поступает в расходящийся шлюз «или/или», он проходит дальше по одному из выбранных путей.
Тот путь, который отмечен штрихом называется путь «по умолчанию». Этот путь будет выбран в том случае, если никакое из условий на потоках не сработало. Он может показывать «благополучный» вариант (happy path), который надо выбрать в любом случае. Или, наоборот, дополнительный исключающий путь, который обрабатывает все нестандартные ситуации.
В приведенном выше примере, если путник пойдет, например, назад, то некая невидимая сила телепортирует его домой.
Сходящаяся развилка/шлюз «или/или»
Когда в сходящийся шлюз поступает токен, он пропускает дальше тоже только один токен. Сходящийся шлюз «или/или» позволяет избежать дублирования задач, которые будут общими для разбежавшихся веток процесса.
Сходящийся и одновременно расходящийся шлюз «или/или»
Крайне не рекомендуется использовать одни и те же шлюзы в BPMN для обоих действий (сведение и разведение потоков). Это затрудняет чтение схемы и в некоторых случаях может приводить к нарушениям в логике.
Рассмотрим один пример, который проиллюстрирует эту проблему.
Предположим, что документ был определен как тип А. Когда токен поступит на шлюз №2, у нас не будет результата проверки, ведь она не выполнялась. Чтобы такая ситуация обработалась корректно, надо правильно отметить «поток по умолчанию». Но до этого момента нужно будет догадываться, что усложнит чтение и понимание схемы.
Для того, чтобы исправить ситуацию - необходимо добавить еще один шлюз «или/или»:
Графически данный шлюз отображается так:
При прохождении через параллельный шлюз, процесс делится на несколько параллельных потоков выполнения, которые могут выполняться одновременно («и» — выбор всех путей). Когда все потоки завершат свою работу, они сходятся обратно в один поток выполнения.
Использование параллельного шлюза позволяет моделировать одновременное выполнение нескольких задач или процессов, что может быть полезно в случаях, когда определенные шаги процесса могут выполняться параллельно без ожидания завершения других шагов.
Допустим, у нас есть бизнес-процесс "Обработка заказа", который включает в себя несколько параллельных задач: подтверждение заказа, проверка наличия товара и уведомление клиента.
Подтверждение заказа: сотрудник отправляет клиенту уведомление о получении заказа и ожидает подтверждения.
Проверка наличия товара: складской работник проверяет наличие товара на складе.
Уведомление клиента: одновременно с выполнением предыдущих задач, отдел обслуживания клиентов отправляет уведомление о статусе заказа.
В этом случае можно использовать параллельный шлюз для разделения процесса на три параллельных потока выполнения:
Когда все три задачи завершатся, потоки выполнения сойдутся обратно в один поток, чтобы продолжить выполнение оставшейся части процесса.
Таким образом, использование параллельного шлюза позволяет эффективно моделировать одновременное выполнение нескольких задач в рамках бизнес-процесса "Обработка заказа".
Графически данный шлюз отображается так:
«и/или» — выбор одного или нескольких;
В данном случае процесс может перейти к следующему шагу, если выполнено хотя бы одно из условий, представленных в исходящих потоках. Таким образом, неисключающий шлюз в BPMN позволяет моделировать процессы, в которых несколько альтернативных путей могут быть выбраны для продолжения выполнения процесса.
Графически данный шлюз отображается так:
— выбор первого события, которое случится;
Событийный шлюз (Event-Based Gateway) в нотации BPMN (Business Process Model and Notation) используется для моделирования процессов, в которых различные события могут привести к разным последующим шагам. Этот шлюз имеет несколько входящих потоков и несколько исходящих потоков. Когда процесс достигает событийного шлюза, он ожидает возникновения определенного события, и в зависимости от того, какое событие произошло, выбирается соответствующий исходящий поток для продолжения выполнения процесса.
Графически данный шлюз отображается так:
Сложный шлюз (Complex Gateway) в нотации BPMN используется для моделирования более сложных условий, когда выбор следующего шага зависит от комбинации различных условий или переменных. Сложный шлюз имеет несколько входящих потоков и несколько исходящих потоков, и он может быть настроен для принятия решений на основе комбинации условий, таких как "и", "или" или "исключающее ИЛИ". Это позволяет моделировать более сложные логические условия в процессе.