Примеры

Полезные примеры использования элементов компонента

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

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

Внутри обработчика нельзя использовать 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

Скрытие/отображение кнопок переходов в процессных задачах

Начиная с 4.0.28 и 3.15.48

На текущий момент ELMA4 Р2 не поддерживается

Для скрытия или отображения в сценарии процесса кнопок перехода в задачах можно использовать метод form.HideConnector:

using ITino.ELMA.Common.Helpers;

/// <summary>
/// Скрыть кнопку перехода на какое то изменение
/// </summary>
/// <param name="context">Контекст процесса</param>
/// <param name="form"></param>
public virtual void HideOnChange (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
  	// Что то меняем в значениях контекста процесса (для примера)
	context.Two = context.One;
  
	// Скрыть кнопку перехода, где Uid перехода на диаграмме процесса  
	form.HideConnector(new Guid("b29c9cc7-7068-4213-a6e3-987171a702aa"));
}

/// <summary>
/// Показать ранее скрытую кнопку перехода на какое то изменение
/// </summary>
/// <param name="context">Контекст процесса</param>
/// <param name="form"></param>
public virtual void ShowOnChange (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
	// Показать кнопку перехода, где Uid перехода на диаграмме процесса  
	form.HideConnector(new Guid("b29c9cc7-7068-4213-a6e3-987171a702aa"), false);
}

Все кнопки доступные изначально:

image-1639307960009.png

И для ELMA4:

image-1639308155429.png

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

image-1639308073033.png

И для ELMA4:image-1639308216480.png