feature: expose custom details to expressions

custom details can now be easily retrieved from any expression
This commit is contained in:
Gary Sharp
2021-02-07 18:17:03 +11:00
parent 3e57af394d
commit 9bfeff8c42
9 changed files with 181 additions and 81 deletions
@@ -235,7 +235,7 @@ namespace Disco.Services.Documents.AttachmentImport
{
try
{
var expressionResult = Identifier.DocumentTemplate.EvaluateOnAttachmentImportExpression(attachment, Database, creatorUser, Identifier.TimeStamp, PageIdentifiers);
var expressionResult = Identifier.DocumentTemplate.EvaluateOnAttachmentImportExpression(attachment, Identifier.Target, Database, creatorUser, Identifier.TimeStamp, PageIdentifiers);
DocumentsLog.LogImportAttachmentExpressionEvaluated(Identifier.DocumentTemplate, Identifier.Target, attachment, expressionResult);
}
catch (Exception ex)
@@ -22,12 +22,12 @@ namespace Disco.Services
ExpressionCache.InvalidateKey("DocumentTemplate_FilterExpression", dt.Id);
}
public static bool FilterExpressionMatches(this DocumentTemplate dt, object Data, DiscoDataContext Database, User User, System.DateTime TimeStamp, DocumentState State)
public static bool FilterExpressionMatches(this DocumentTemplate dt, IAttachmentTarget Data, DiscoDataContext Database, User User, System.DateTime TimeStamp, DocumentState State)
{
if (!string.IsNullOrEmpty(dt.FilterExpression))
{
var compiledExpression = dt.FilterExpressionFromCache();
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, State);
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, State, Data);
try
{
var er = compiledExpression.EvaluateFirst<object>(Data, evaluatorVariables);
@@ -59,12 +59,12 @@ namespace Disco.Services
ExpressionCache.InvalidateKey("DocumentTemplate_OnImportExpression", dt.Id);
}
public static string EvaluateOnAttachmentImportExpression(this DocumentTemplate dt, IAttachment Data, DiscoDataContext Database, User User, DateTime TimeStamp, List<DocumentUniqueIdentifier> PageIdentifiers)
public static string EvaluateOnAttachmentImportExpression(this DocumentTemplate dt, IAttachment Data, IAttachmentTarget AttachmentTarget, DiscoDataContext Database, User User, DateTime TimeStamp, List<DocumentUniqueIdentifier> PageIdentifiers)
{
if (!string.IsNullOrEmpty(dt.OnImportAttachmentExpression))
{
var compiledExpression = dt.OnImportAttachmentExpressionFromCache();
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, null);
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, null, AttachmentTarget);
evaluatorVariables.Add("PageIdentifiers", PageIdentifiers);
var result = compiledExpression.EvaluateFirst<object>(Data, evaluatorVariables);
if (result == null)
@@ -85,12 +85,12 @@ namespace Disco.Services
ExpressionCache.InvalidateKey("DocumentTemplate_OnGenerateExpression", dt.Id);
}
public static string EvaluateOnGenerateExpression(this DocumentTemplate dt, object Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
public static string EvaluateOnGenerateExpression(this DocumentTemplate dt, IAttachmentTarget Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
{
if (!string.IsNullOrEmpty(dt.OnGenerateExpression))
{
var compiledExpression = dt.OnGenerateExpressionFromCache();
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, State);
var evaluatorVariables = Expression.StandardVariables(dt, Database, User, TimeStamp, State, Data);
var result = compiledExpression.EvaluateFirst<object>(Data, evaluatorVariables);
return result.ToString();
@@ -81,12 +81,12 @@ namespace Disco.Services
ExpressionCache.InvalidateKey("DocumentTemplatePackage_FilterExpression", package.Id);
}
public static bool FilterExpressionMatches(this DocumentTemplatePackage package, object Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
public static bool FilterExpressionMatches(this DocumentTemplatePackage package, IAttachmentTarget Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
{
if (!string.IsNullOrEmpty(package.FilterExpression))
{
var compiledExpression = package.FilterExpressionFromCache();
var evaluatorVariables = Expression.StandardVariables(null, Database, User, TimeStamp, State);
var evaluatorVariables = Expression.StandardVariables(null, Database, User, TimeStamp, State, Data);
evaluatorVariables.Add("Package", package);
try
{
@@ -119,12 +119,12 @@ namespace Disco.Services
ExpressionCache.InvalidateKey("DocumentTemplatePackage_OnGenerateExpression", package.Id);
}
public static string EvaluateOnGenerateExpression(this DocumentTemplatePackage package, object Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
public static string EvaluateOnGenerateExpression(this DocumentTemplatePackage package, IAttachmentTarget Data, DiscoDataContext Database, User User, DateTime TimeStamp, DocumentState State)
{
if (!string.IsNullOrEmpty(package.OnGenerateExpression))
{
Expression compiledExpression = package.OnGenerateExpressionFromCache();
System.Collections.IDictionary evaluatorVariables = Expression.StandardVariables(null, Database, User, TimeStamp, State);
System.Collections.IDictionary evaluatorVariables = Expression.StandardVariables(null, Database, User, TimeStamp, State, Data);
evaluatorVariables.Add("Package", package);
try
{