Добрый день, реализовали на своей системе логику создания прайс-листов в пользовательском разделе [Price List]. При нажатии на кнопку в карточке глобального прайс-листа запускается бизнес-процес в котором выполняется один скрипт-таск, который создает по рекурсии идентичные прайс-листы со всеми наследниками (которых иногда бывает довольно много) в соседнем разделе [Company Price List], привязывая их к ранее выбранному контрагенту. Так вот возникает небольшая проблема. Бизнес-процесс отратабывает и нормально создает идентичные записи прайс-листов, в журнале процессов ошибок нет. Но в какой-то момент, если прайс-листов очень много, БП "думает", что он завис, как мне кажется и выбрасывает окно с ошибкой "Error while starting the process". Как исправить эту небольшую проблему?
Нравится
В скриптаске реализуйте формирование ваших долго выполняемых действий в новом потоке (асинхронно).
Task.Factory.StartNew(() =>
{ createPrice(userConnection);
});
Или до скриптаска вставьте элемент таймер с минимальной задержкой.
Оба варианта позволят не ожидать завершения отработки БП.
Так же можно самому реализовать запуск БП через вызов сервиса ProcessEngineService.svc с указанием большого таймаута (что априори не есть хорошо).
Так что лучше длинные расчеты делать асинхронными
В скриптаске реализуйте формирование ваших долго выполняемых действий в новом потоке (асинхронно).
Task.Factory.StartNew(() =>
{ createPrice(userConnection);
});
Или до скриптаска вставьте элемент таймер с минимальной задержкой.
Оба варианта позволят не ожидать завершения отработки БП.
Так же можно самому реализовать запуск БП через вызов сервиса ProcessEngineService.svc с указанием большого таймаута (что априори не есть хорошо).
Так что лучше длинные расчеты делать асинхронными
Если создаваемых записей реально много, лучше обрабатывать их порциями с перерывами, чтобы не мешать другим действиям в системе и не перегрузить IIS или БД. В логике БП после создания N штук в конце создаём задачу по кварцу с датой-временем старта через несколько минут после текущего момента, запускающую такой же БП для продолжения создания.