Вопрос

Error while starting the process

Добрый день, реализовали на своей системе логику создания прайс-листов в пользовательском разделе [Price List]. При нажатии на кнопку в карточке глобального прайс-листа запускается бизнес-процес в котором выполняется один скрипт-таск, который создает по рекурсии идентичные прайс-листы со всеми наследниками (которых иногда бывает довольно много) в соседнем разделе [Company Price List], привязывая их к ранее выбранному контрагенту. Так вот возникает небольшая проблема. Бизнес-процесс отратабывает и нормально создает идентичные записи прайс-листов, в журнале процессов ошибок нет. Но в какой-то момент, если прайс-листов очень много, БП "думает", что он завис, как мне кажется и выбрасывает окно с ошибкой "Error while starting the process". Как исправить эту небольшую проблему?

Изображение удалено.

Изображение удалено.

Нравится

3 комментария
Лучший ответ

В скриптаске реализуйте формирование ваших долго выполняемых действий в новом потоке (асинхронно).

Task.Factory.StartNew(() =>

    { createPrice(userConnection);

    });

 Или до скриптаска вставьте элемент таймер с минимальной задержкой.

Оба варианта позволят не ожидать завершения отработки БП.

 

Так же можно самому реализовать запуск БП через вызов сервиса ProcessEngineService.svc с указанием большого таймаута (что априори не есть хорошо).

Так что лучше длинные расчеты делать асинхронными

В скриптаске реализуйте формирование ваших долго выполняемых действий в новом потоке (асинхронно).

Task.Factory.StartNew(() =>

    { createPrice(userConnection);

    });

 Или до скриптаска вставьте элемент таймер с минимальной задержкой.

Оба варианта позволят не ожидать завершения отработки БП.

 

Так же можно самому реализовать запуск БП через вызов сервиса ProcessEngineService.svc с указанием большого таймаута (что априори не есть хорошо).

Так что лучше длинные расчеты делать асинхронными

Григорий Чех,

Спасибо, попробую и отпишусь.

Если создаваемых записей реально много, лучше обрабатывать их порциями с перерывами, чтобы не мешать другим действиям в системе и не перегрузить IIS или БД. В логике БП после создания N штук в конце создаём задачу по кварцу с датой-временем старта через несколько минут после текущего момента, запускающую такой же БП для продолжения создания.

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