elsa-core/samples/Sample04/Activities/ArithmeticOperation.cs
2019-07-07 14:20:42 +02:00

46 lines
1.3 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using Elsa.Core.Expressions;
using Elsa.Core.Extensions;
using Elsa.Core.Services;
using Elsa.Results;
using Elsa.Services;
using Elsa.Services.Models;
namespace Sample04.Activities
{
public abstract class ArithmeticOperation : Activity
{
private readonly IWorkflowExpressionEvaluator evaluator;
protected ArithmeticOperation(IWorkflowExpressionEvaluator evaluator)
{
this.evaluator = evaluator;
}
public WorkflowExpression<double[]> Values
{
get => GetState<WorkflowExpression<double[]>>();
set => SetState(value);
}
public string ResultVariableName
{
get => GetState<string>();
set => SetState(value);
}
protected override async Task<ActivityExecutionResult> OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken)
{
var values = await evaluator.EvaluateAsync(Values, context, cancellationToken);
var sum = Calculate(values);
context.SetLastResult(sum);
context.CurrentScope.SetVariable(ResultVariableName, sum);
return Done();
}
protected abstract double Calculate(params double[] values);
}
}