Вопрос

Почему вызов ThrowSignal(ProcessExecutingContext, String) бэкендовского апи срабатывает для всех инстанций процесса?

Есть бизнес-процесс, в нём добавлен элемент Wait for signal. Из бэкенда хочу триггерить этот элемент, чтобы процесс шёл дальшё. Делаю это так:

 

Process process = UserConnection.ProcessEngine.FindProcessByUId("12345", true);
if (process != null) {
	UserConnection.ProcessEngine.ThrowSignal(process.InternalContext, "testSignal");
}

Код отрабатывает и процесс идёт дальше. Но проблема в том, что если запущено 2 или более процессов с этим ожиданием сигнала, то дальше пойдут все, а не только тот, что был найден через FindProcessByUId(). Почему так? Я же по конктреному processId нахожу процесс, и именно его передаю в параметры.



Была мысль, что может надо для каждой инстанции своё уникальное название для сигнала иметь. Тот же processId можно было бы положить, ну или что-то своё сгенерировать, но у элемента Wait for signal при выборе названия сигнала нельзя выбрать формулу\переменную процесса, только текстовое значение ввести. Это никак не обойти?

Нравится

2 комментария

Добрый день.

 

ThrowSignal триггерит все процессы - это ожидаемое поведение.

Существует 2 варианта решения вашей задачи: 

1. В процессе вместо сигнала использовать ScriptTask \ UserTask, куда вы добавляете ту логику, что используете в бэкенде (по результату выполнения которой Вы хотите продолжить выполнение определенного бизнес процесса).

2. В процессе в элементе Wait for signal вместо Custom Signal использовать Record signal, который будет триггериться при изменении записи с конкретным Id

Artem Smyrnov, добрый день.

Мы как раз начали пытаться делать по второму варианту, добавили новое boolean поле на страницу объекта, в сигнале поставили триггер на изменения этого поля + значение в нём True. Далее в бекенде пробовали менять значение поля через Update на True - триггер не срабатывал. После этого стали вместо Update запускать бизнес-процесс, передавая ему в переменную айдишку нужного объекта. Процесс отрабатывает, значение переменной меняет, но сигнал не триггерится на это изменения. Не знаете, какие могут быть у этого причины?

Показать все комментарии