Изменение информации в "шапке" файла листа согласования
Изменение информации в “шапке” файла листа согласования¶
Например, в листе согласования необходимо к стандартной теме документа, которую лист согласования получает из DocumentCommonInfo.Subject, дописать информацию из другого поля карточки OtherCommonInfo.OtherSubject.
Для этого пишется расширение на лист согласования. Расширение пишется на сервере, наследуется от KrApprovalListExtension и регистрируется по интерфейсу IKrApprovalListExtension с указанием имени типа карточки. На каждый тип карточки может быть ровно одно расширение на лист согласования, которое регистрируется отдельно по имени типа.
using System;
using Tessa.Platform.Data;
using Tessa.Extensions.Default.Server.Workflow.KrProcess.Files;
public sealed class MyApprovalListExtension : KrApprovalListExtension
{
public MyApprovalListExtension(IDbScope dbScope)
{
this.dbScope = dbScope;
}
private readonly IDbScope dbScope;
public override void BeforeRequest(KrApprovalListExtensionContext context)
{
string otherSubject;
using (this.dbScope.Create())
{
DbManager db = this.dbScope.Db;
otherSubject = db
.SetCommand(
"select OtherSubject from OtherCommonInfo with(nolock) where ID = @ID",
db.Parameter("@ID", context.CardID))
.LogCommand()
.ExecuteScalar<string>();
}
// дописываем к стандартному полю "Тема" строку из otherSubject, если это поле непустое
if (!string.IsNullOrEmpty(otherSubject))
{
context.Subject += Environment.NewLine + otherSubject;
}
}
}
[Registrator]
public sealed class Registrator : RegistratorBase
{
public override void RegisterUnity()
{
this.UnityContainer
.RegisterType<IKrApprovalListExtension, MyApprovalListExtension>(
"CardTypeName",
new ContainerControlledLifetimeManager())
;
}
public override void FinalizeRegistration()
{
this.UnityContainer
.TryResolve<IKrApprovalListExtensionResolver>()
?.Register<MyApprovalListExtension>("CardTypeName");
}
}