Примеры
Полезные примеры использования элементов компонента
- Реализация обработки длительной операции в задаче
- Скрытие/отображение кнопок переходов в процессных задачах
Реализация обработки длительной операции в задаче
Для обработки длительных операций в системе, когда использование блока "Скрипт" приводит к таймауту и срыву процесса, можно использовать следующий метод. При этом в самой задаче будет отображаться прогресс обработки, на время обработки кнопки переходов будут скрыты.
Внутри обработчика нельзя использовать 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;
});
}
В ELMA4 изменена сигнатура вызова метода - дополнительно передается тип контекста:
public override void OnTaskCreate(ITaskBase task, P_IA_AandP context)
{
// 4f55dd98-5242-4633-88e8-4c745551b52c - Id задачи на диаграмме
WorkflowHelper.ProcessLongAction<P_IA_AandP>(new Guid("4f55dd98-5242-4633-88e8-4c745551b52c"), task, (model, session) =>
{
model.Name = "Сбор данных по активным задачам"; // Название операции, отображаемое в задаче
// Здесь любой код для длительных операций
var instanceContextVar1 = model.Context.Var1;
});
}
После окончания длительной операции контекст процесса сохранять не нужно - это будет сделано автоматически, если были изменения.
В результате при создании задачи запуститься в отдельном потоке обработка, кнопки переходов будут скрыты и будет отображена информация об операции со счетчиком времени выполнения. Например:
После завершения длительно операции кнопки переходов вновь появятся и будет выдано сообщение со временем завершения выполнения указанной операции:
Если в исполняемом коде будет вызвано исключение, то появится соответствующее сообщение, кнопки переходов так же появятся:
Скрытие/отображение кнопок переходов в процессных задачах
Начиная с 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);
}
Все кнопки доступные изначально:
И для ELMA4:
После выполнения скрипта, если есть хоть один скрытый переход, то в верхнем меню убираем Сделано, т.к. невозможно динамически определить в нем нужных переход: