Вопрос:
Можно ли в подпроцессе завершить работу главного процесса (процесса где используется этот подпроцесс)? и каким образом?
Вот что нам нужно:
1. Есть главный процесс "Приготовление чая".
1.1 Для этого мы создаем карточку проекта (Состояние: "в работе") и создаем ряд задач.
2. Есть подпроцесс "Проверка наличия кружки", который стартует после задачи "Вода в чайнике вскипела" главного процесса.
2.1 Подпроцесс "Проверка наличия кружки" может завершиться или нахождением кружки или констатацией факта, что кружка отсутствует.
2.2 Если кружка отсутствует - необходимо в главном процессе "Приготовление чая" изменить значение поля "Состояние" карточки Проекта на "Отменен"
3. После изменения поле "Состояние" карточки Проекта на "Отменен" (чтение сигнала, например) завершить работу главного процесса.
Могли бы Вы уточнить как можно решить нашу задачу?
Ответ:
Завершение родительского процесса может привести к поломке. Ведь запускается подпроцесс, который в итоге будет что-то возвращать родителю, который вы уничтожите. Да и уничтожение процесса может завершится с ошибкой.
Подход к реализации описанной задачи следующий:
Создаем подпроцесс (условно, CupSearch) с параметром прцоесса логичское, к примеру, CupFound.
В данном подпроцессе заполняем значение параметра CupFound с помощью элемента Формула.
Завершаем процесс элементом Останов.
Создаем родительский процесс, в нем добавляем элемент Подпроцесс (название элемента, например, CupSearch1), указываем процесс = CupSearch.
Условный поток из элемента подпроцесс : [CupSearch1.CupFound] == true , продолжение выполнения процесса
Поток Иначе - переход на элемент Изменить данные, установить поле Отменен для проекта. После этого переход на элемент Останов.
Рис. 1 Основной процесс "Приготовление чая"
Рис. 2 Подпроцесс "Поиск чашки"