From d4a2a5f03a81a70ef4de77e833503ecaa9363d7d Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 16 Sep 2025 20:37:05 +0200 Subject: [PATCH] Throw InputEvaluationException for input evaluation errors Introduced `InputEvaluationException` to encapsulate errors during input evaluation in `ActivityExecutionContextExtensions`. Refactored the input evaluation logic by adding a core evaluation method to improve error handling and clarity. --- .../Exceptions/InputEvaluationException.cs | 6 ++++++ ...ityExecutionContextExtensions.InputEvaluation.cs | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/modules/Elsa.Workflows.Core/Exceptions/InputEvaluationException.cs diff --git a/src/modules/Elsa.Workflows.Core/Exceptions/InputEvaluationException.cs b/src/modules/Elsa.Workflows.Core/Exceptions/InputEvaluationException.cs new file mode 100644 index 000000000..b067f53e2 --- /dev/null +++ b/src/modules/Elsa.Workflows.Core/Exceptions/InputEvaluationException.cs @@ -0,0 +1,6 @@ +namespace Elsa.Workflows.Exceptions; + +public class InputEvaluationException(string inputName, string message, Exception exception) : Exception(message, exception) +{ + public string InputName { get; } = inputName; +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Extensions/ActivityExecutionContextExtensions.InputEvaluation.cs b/src/modules/Elsa.Workflows.Core/Extensions/ActivityExecutionContextExtensions.InputEvaluation.cs index db798e5cf..acd1f8541 100644 --- a/src/modules/Elsa.Workflows.Core/Extensions/ActivityExecutionContextExtensions.InputEvaluation.cs +++ b/src/modules/Elsa.Workflows.Core/Extensions/ActivityExecutionContextExtensions.InputEvaluation.cs @@ -3,6 +3,7 @@ using Elsa.Expressions.Contracts; using Elsa.Expressions.Helpers; using Elsa.Expressions.Models; using Elsa.Workflows; +using Elsa.Workflows.Exceptions; using Elsa.Workflows.Models; // ReSharper disable once CheckNamespace @@ -68,6 +69,18 @@ public static partial class ActivityExecutionContextExtensions } private static async Task EvaluateInputPropertyAsync(this ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor) + { + try + { + return await EvaluateInputPropertyCoreAsync(context, activityDescriptor, inputDescriptor); + } + catch (Exception e) + { + throw new InputEvaluationException(inputDescriptor.Name, $"Failed to evaluate activity input '{inputDescriptor.Name}'", e); + } + } + + private static async Task EvaluateInputPropertyCoreAsync(this ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor) { var activity = context.Activity; var defaultValue = inputDescriptor.DefaultValue;