Получение события при завершении процесса

Используя rest api (DELETE /process-instance/{id}) я завершаю активный процесс, и тут же стартую новый, по этому же БП, добавляя туда пару переменных.
это делается для того, чтобы из любого места БП переходить в завершение.
могу ли я в ExecutionListener-е как-то увидеть именно событие завершения процесса, ну и, соответственно, далее его обработать в своём коде?

Добрый день!

Не могли бы вы написать подробнее, какую задачу решаете?

DELETE /process-instance/{id} - это техническое удаление экземпляра БП.

Если суть задачи прерывать бизнес-процесс, то лучше для этого воспользоваться подпроцессом по событию (interrupting event subprocess):

Добрый день, Мстислав!

есть БП, по которому движется задача, БП довольно большой и разветвлённый.

внешняя система может постучаться в нашу, и отменить обработку заявки.
в этом случае из любого места процесса нужно попасть в автоподтверждение, которое с таймером и завершится через 3 часа.
в случае с завершением процесса, и с перезапуском его, используя $CAMUNDA_ENGINE_REST/message, мы вполне переходим в нужное место БП - из любой позиции в автоподтверждение. но при этом мы не можем обрабатывать событие так же, как обрабатываем обычные переходы.
хоть как-то обрабатывать событие всенепременнейше нужно, потому что у нашего приложения в бд тоже лежат процессы и их ид, и статус их.

т.е. ввиду того, что событие не обрабатывается, возникает несогласованность между бд камунды, где закрывшегося процесса, конечно же, нет, и бд приложения, где процесс всё еще значится как активный.
можно, конечно, просто закрывать в бд приложения этот процесс, выставляя ему соответствующий статус. но хотелось бы, если есть возможность, обрабатывать событие закрытия процесса так же, как и другие.
на англоязычном форуме камунды указано, что это возможно, и нужно использовать ExecutionListener. однако я не вижу там никаких событий закрытия, которые можно обработать.

bp

Роман, неужели не подойдет вот такой вариант?


Мне кажется, ваша задача может быть решена без применения листнеров :slight_smile:

  1. Ниже основного потока исполнения помещаете непрерывающий подпроцесс по событию
  2. Старт подпроцесса - сообщение “Отзови заявку”
  3. А. Если отмена, не трогаем основной поток процесса
  4. Б. Если подтверждение или таймаут - выполняем (опционально) какие-то регламентные вещи и терминируем основной процесс.

У нас по такой схеме реализовывался отзыв документа в СЭД.

Поддержу. Получение сигнала о завершении процессов с помощью листенера все же хотелось бы иметь. Это может понадобиться для технических задач, таких как мониторинг, аудит, телеметрия. Изменение одной-двух bpmn диаграмм не вариант, особенно если этих диаграмм много. У нас, например, нельзя просто так изменить диаграмму , за которую отвечает другая группа на стороне заказчика. Внести в диаграмму какие-то дополнительные технические аспекты - это уже будет крайняя мера, если нет возможности решить через приложение. Так что вопрос про листенер остается актуальным.

В таком случае проще всего воспользоваться Spring Event Bridge:

    @EventListener
    public void onHistoryEvent(HistoryEvent historyEvent) {
        if (historyEvent.getEventType().equals(endEventType)) {
           // вызвать нужный метод
        }
    }