Добавление кликабельной иконки-тега для строк в истории заданий
Добавление кликабельной иконки-тега для строк в истории заданий¶
Для каждой строки в истории заданий можно добавить иконку-тег слева от имени типа задания, по клику на которой выполняется некоторое действие. Например, иконку-скрепку, при клике по которой открывается карточка с файлами, приложенными к заданию.
Note
Расширения на теги в истории заданий доступны, начиная со сборки 2.4.
Для этого пишется расширение ICardUIExtension
, в котором в истории заданий context.Model.TryGetTaskHistory()
для всех строк taskHistory.EnumerateHierarchy()
, которые связаны с типовыми задачами, устанавливается тег item.SetTag(...)
.
using System.Threading.Tasks;
using Tessa.Cards;
using Tessa.Extensions.Default.Shared.Workflow.Wf;
using Tessa.Localization;
using Tessa.UI;
using Tessa.UI.Cards;
using Tessa.UI.Cards.Tasks;
namespace Tessa.Extensions.Client
{
public sealed class TaskHistoryTagUIExtension : CardUIExtension
{
public override Task Initialized(ICardUIExtensionContext context)
{
TaskHistoryViewModel taskHistory = context.Model.TryGetTaskHistory();
if (taskHistory != null)
{
foreach (TaskHistoryItemViewModel item in taskHistory.EnumerateHierarchy())
{
// для каждого задания в истории, которое связано с типовым процессом исполнения (задачами)
// выводим кнопку-скрепку
if (WfHelper.TaskTypeIsResolution(item.Model.TypeID))
{
item.SetTag("Thin43", "Открыть вложения", new DelegateCommand(p =>
{
// код выполняется в UIContext-е карточки
ICardModel model = UIContext.Current.CardEditor.CardModel;
// информация по строке с заданием доступна из параметра p
var taskItem = (TaskHistoryItemViewModel) p;
// здесь можно открыть карточку с приложенными файлами через this.uiHost
TessaDialog.ShowMessage(string.Format(
"Текущая карточка '{0}'. Тип задания '{1}'.",
model.Digest,
LocalizationManager.Localize(taskItem.Model.TypeCaption)));
}));
}
}
}
return Task.CompletedTask;
}
}
[Registrator]
public sealed class Registrator : RegistratorBase
{
public override void RegisterExtensions(IExtensionContainer extensionContainer)
{
extensionContainer
.RegisterExtension<ICardUIExtension, TaskHistoryTagUIExtension>(x => x
.WithOrder(ExtensionStage.AfterPlatform, 1)
.WithSingleton()
.WhenCardTypes("Contract")) // только для договорных документов
;
}
}
}