Настройка возможности опционального запуска дополнительных задач в процессе
Иногда в процессе необходимо реализовать опциональный запуск параллельной задачи. Например, в рамках согласования договора зачастую подразумеваются дополнительные проверки, уточнения, согласования. А это значит, что процесс должен быть построен с учётом всех возможных вариантов.
Стандартное добавление параллельных развилок данный вопрос не решит, так как в случае с параллельными шагами, запускаемыми безо всяких условий, вторая задача будет запускаться всегда, и процесс будет всегда ожидать 2 токена, а нам нужно, чтобы это происходило только по команде из первой задачи.
Сценарий: Процесс согласования договора.
Согласующий 1 получает задачу «Проверить договор», он может:
- Принять решение самостоятельно и закрыть задачу, если ему не нужно получить никаких уточнений.
- Запросить дополнительную проверку Согласующего 2 и на основании его комментариев принять решение, и только потом закрыть задачу.
Таким образом, здесь нужна возможность запустить параллельную задачу из текущей, чтобы Согласующий 1 получил ответ от Согласующего 2 до завершения своей задачи.
Описание:
Создавать опциональную параллельную задачу мы будем с помощью отправки и получения внутренних сообщений. Процесс после открывающей параллельной развилки будет всегда ожидать сообщения, которое он получит либо из того же процесса (если Согласующий 2 не нужен), либо из созданного технического, и на основании него двигать токен.
Технический процесс в данном случае будет отправлять сообщение в ожидающее событие, в случае добавления Согласующего 2. Его нужно будет создать по новой сущности (скажем, «Добавления согласующих»).
Т.о., нам понадобится текстовый (или логический) атрибут «да/нет», в который мы будем передавать сообщение, на основании которого система поймет, назначать вторую задачу («да») или завершить токен («нет»).
Также необходимо отметить такой элемент как Process ID. Это номер экземпляра процесса. Нам он будет важен при отправке сообщения, чтобы указать координаты, куда это сообщение отправить. Так как Process ID — это системный атрибут процесса, в текущем шаблоне записи в ходе настройки нужно будет создать атрибут “processid” и заполнять его на выходе из стартового процесса атрибутом Process ID.
Настройка:
1. Создайте схему основного процесса по следующему примеру:
Схема процесса
Данная схема реализует описываемый пример посредством отправки и получения сообщения внутри процесса. Если Согласующий 1 завершает согласование, система в любом случае отправляет сообщение (отправка «нет»), и токен во второй параллельной ветке «пропускает» задачу на Согласующего 2. Если же Согласующий 1 решает запросить дополнительное согласование (при помощи настроенной для этой цели кнопки на форме задачи), по кнопке запускается технический процесс, который отправляет сообщение «да». Получающее сообщение событие видит «да» и назначает задачу на Согласующего 2.
2. Создайте технический процесс для добавления Согласующего 2 по новой сущности. В текущем шаблоне записи создайте ссылку на новый шаблон.
Схема технического процесса
3. В текущем шаблоне записи создайте текстовый атрибут «processid». На выходе из стартового события заполните его системным атрибутом ProcessID.
4. Создайте текстовый атрибут «да/нет», куда будет передаваться информацию, нужен Согласующий 2 или нет, чтобы назначить или не назначить вторую задачу. На выходе из задачи Согласующий 1 заполните этот атрибут значением «нет».
5. Настройте приём-отправку сообщений (См. Отправка сообщения и Получение сообщения).
- Отправка. Тип сообщения — уведомление (создать новое, добавить текстовое поле «да/нет»). В настройках промежуточного события заполните поле «да/нет» атрибутом «да/нет». В экземпляре процесса укажите $processid.
- В техническом процессе поле «да/нет» заполните значением «да», в экземпляре процесса укажите выражение (from a in db->главный шаблон записи where a->ссылка на шаблон Добавление Согласующего 2 == $id select a->processid).
- Получение. Выберите из существующих — уведомление. (т.е. пути передачи данных для получения указывать НЕ НУЖНО).
6. На форму задачи Согласующий 1 вынесите кнопку «Добавить согласующего 2», запускающую технический процесс (связанный, через атрибут с типом данных «Ссылка»).
7. Тестируйте.