Перейти к основному контенту

Реализация обработки длительной операции в задаче

Для обработки длительных операций в системе, когда использование блока "Скрипт" приводит к таймауту и срыву процесса, можно использовать следующий метод. При этом в самой задаче будет отображаться прогресс обработки, на время обработки кнопки переходов будут скрыты.

Внутри обработчика нельзя использовать context. Вместо этого использовать model.Context.

public override void OnTaskCreate(ITaskBase task, P_IA_AandP context)
{
	// 4f55dd98-5242-4633-88e8-4c745551b52c - Id задачи на диаграмме 
	WorkflowHelper.ProcessLongAction(new Guid("4f55dd98-5242-4633-88e8-4c745551b52c"), task, (model, session) =>
	{
		model.Name = "Сбор данных по активным задачам"; // Название операции, отображаемое в задаче
      
		// Здесь любой код для длительных операций
      	var instanceContext = model.Context as P_IA_AandP;
    });
}

После окончания длительной операции контекст процесса сохранять не нужно - это будет сделано автоматически, если были изменения.

В результате при создании задачи запуститься в отдельном потоке обработка, кнопки переходов будут скрыты и будет отображена информация об операции со счетчиком времени выполнения. Например:

image-1630422165056.png

После завершения длительно операции кнопки переходов вновь появятся и будет выдано сообщение со временем завершения выполнения указанной операции:

image-1630423575147.png

Если в исполняемом коде будет вызвано исключение, то появится соответствующее сообщение, кнопки переходов так же появятся:

image-1630427822285.png