diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs index 3994cb84d0e..921fb6a81f9 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/Scripting/JavaScriptWorkflowScriptEvaluator.cs @@ -30,13 +30,24 @@ public async Task EvaluateAsync(WorkflowExpression expression, Workflow return default; } - var workflowType = workflowContext.WorkflowType; - var directive = $"js:{expression}"; - var expressionContext = new WorkflowExecutionScriptContext(workflowContext); + try + { + var workflowType = workflowContext.WorkflowType; + var directive = $"js:{expression}"; + var expressionContext = new WorkflowExecutionScriptContext(workflowContext); + + await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingScriptAsync(expressionContext), expressionContext, _logger); - await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingScriptAsync(expressionContext), expressionContext, _logger); + var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders); + + // Some types cannot be cast (e.g., null to bool), so we need to catch the exception and return the default value. + return (T)_scriptingManager.Evaluate(directive, null, null, methodProviders); + } + catch (Exception ex) + { + _logger.LogError(ex, "An error occurred while evaluating the expression: {Expression}", expression.Expression); + } - var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders); - return (T)_scriptingManager.Evaluate(directive, null, null, methodProviders); + return default; } }