Окружение: bpmonline 7.2
Опишу вкратце задумку:
1. На странице пользователь меняет какие-то поля у объекта жмет кнопку сохранения (это сейчас уже работает).
2. На изменение статуса (было Новое, стало Изменено) создан бизнес-процесс, в котором реализована логика обработки объекта при изменении (это сейчас уже работает).
3. Теперь требуется вызвать внешнюю процедуру (связь баз по linked server), которая в свою очередь должна получить данные по объекту и не только.
И вот как раз с третьим пунктом возникла проблема - внешняя процедура отваливается по таймауту. В ходе разбора этой проблемы, удалось выяснить следующее (поправьте если не прав):
1. бизнес-процесс вызывается в том же потоке, что и сохранение объекта
2. при этом все это происходит в одной транзакции
3. вызывая внешнюю процедуру, которая обращается в тем же данным, получаем неявную блокировку данных. Т.е. при выполнении запросов с одной базы к другой открывается своя транзакция, которая блокируется уже открытой транзакции.
Проблема "решается" если вызов вызвать в отдельном потоке (реализация через Task) - тогда транзакции закрываются в основном потоке и не мешают выполнению запроса. Или принудительно закрыть транзакцию. Но это на мой взгляд не верное решение данной проблемы. Так как отрабатывает бизнес-процесс-2 по изменению другого поля, которое изменяется в "вызове" и в результате бизнес-процесс-2 не запускается.
Можете ли вы подсказать, что можно в данном случае сделать? Может быть можно вызвать бизнес-процесс на изменения поля уже после закрытия транзакции основной, в рамках которой и изменяется объект.
поменял тему для привлечения внимания