RulesEngine/src/RulesEngine/Actions/EvaluateRuleAction.cs

41 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using RulesEngine.ExpressionBuilders;
using RulesEngine.Models;
namespace RulesEngine.Actions
{
public class EvaluateRuleAction : ActionBase
{
private readonly RulesEngine _ruleEngine;
public EvaluateRuleAction(RulesEngine ruleEngine)
{
_ruleEngine = ruleEngine;
}
internal override async ValueTask<ActionRuleResult> ExecuteAndReturnResultAsync(ActionContext context, RuleParameter[] ruleParameters, bool includeRuleResults=false){
var innerResult = await base.ExecuteAndReturnResultAsync(context,ruleParameters,includeRuleResults);
var output = innerResult.Output as ActionRuleResult;
List<RuleResultTree> resultList = null;
if(includeRuleResults){
resultList = new List<RuleResultTree>(output.Results);
resultList.AddRange(innerResult.Results);
}
return new ActionRuleResult {
Output = output.Output,
Exception = innerResult.Exception,
Results = resultList
};
}
public override async ValueTask<object> Run(ActionContext context, RuleParameter[] ruleParameters)
{
var workflowName = context.GetContext<string>("workflowName");
var ruleName = context.GetContext<string>("ruleName");
var ruleResult = await _ruleEngine.ExecuteActionWorkflowAsync(workflowName,ruleName,ruleParameters);
return ruleResult;
}
}
}