{"record":{"id":"25d37e8a9df70e0b","repo":"OrchardCMS/OrchardCore","slug":"the-syntax-syntax-isn-t-supported-for-forlooptask","errorCode":null,"errorMessage":"The syntax {Syntax} isn't supported for ForLoopTask.","messagePattern":"The syntax (.+?) isn't supported for ForLoopTask\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"src/OrchardCore.Modules/OrchardCore.Workflows/Activities/ForLoopTask.cs","lineNumber":134,"sourceCode":"\n            return Outcome(\"Iterate\");\n        }\n        else\n        {\n            Index = from;\n\n            return Outcome(\"Done\");\n        }\n    }\n\n    private async Task<double> EvaluateFromAsync(WorkflowExecutionContext workflowContext)\n    {\n        return Syntax switch\n        {\n            WorkflowScriptSyntax.Liquid => double.Parse(await _expressionEvaluator.EvaluateAsync(LiquidFrom, workflowContext, null)),\n            WorkflowScriptSyntax.JavaScript when double.TryParse(From.Expression, out var from) => from,\n            WorkflowScriptSyntax.JavaScript => await _scriptEvaluator.EvaluateAsync(From, workflowContext),\n            _ => throw new NotSupportedException($\"The syntax {Syntax} isn't supported for ForLoopTask.\")\n        };\n    }\n\n    private async Task<double> EvaluateToAsync(WorkflowExecutionContext workflowContext)\n    {\n        return Syntax switch\n        {\n            WorkflowScriptSyntax.Liquid => double.Parse(await _expressionEvaluator.EvaluateAsync(LiquidTo, workflowContext, null)),\n            WorkflowScriptSyntax.JavaScript when double.TryParse(To.Expression, out var to) => to,\n            WorkflowScriptSyntax.JavaScript => await _scriptEvaluator.EvaluateAsync(To, workflowContext),\n            _ => throw new NotSupportedException($\"The syntax {Syntax} isn't supported for ForLoopTask.\")\n        };\n    }\n\n    private async Task<double> EvaluateStepAsync(WorkflowExecutionContext workflowContext)\n    {\n        return Syntax switch\n        {","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/OrchardCMS/OrchardCore/blob/4306c0717fe573f6fca1b4955909ddab6a192807/src/OrchardCore.Modules/OrchardCore.Workflows/Activities/ForLoopTask.cs#L116-L152","documentation":"ForLoopTask's EvaluateFromAsync computes the loop's starting value by switching on the activity's Syntax. Only Liquid (parse LiquidFrom) and JavaScript (evaluate From) are implemented; any other WorkflowScriptSyntax value hits the default arm and throws NotSupportedException, aborting the loop before it starts.","triggerScenarios":"Starting a workflow containing a ForLoopTask whose Syntax property is neither WorkflowScriptSyntax.Liquid nor WorkflowScriptSyntax.JavaScript (default/0 enum value, deserialized unknown value from workflow JSON, or programmatic construction without setting Syntax).","commonSituations":"Workflow definitions imported from another environment or older version with a syntax name that no longer maps; a newly added WorkflowScriptSyntax member not yet handled by ForLoopTask; forgetting to set Syntax when building the activity in code.","solutions":["Set Syntax to WorkflowScriptSyntax.Liquid and supply the start value in the LiquidFrom expression field.","Or set Syntax to WorkflowScriptSyntax.JavaScript and put the numeric start expression in the From field (a plain double literal string also works via TryParse).","Correct/repair the stored workflow definition if it holds an obsolete syntax value.","If a new syntax member was introduced, update/rebuild OrchardCore.Workflows so EvaluateFromAsync handles it."],"exampleFix":"// before\nvar loop = new ForLoopTask(); // Syntax unset -> unsupported in EvaluateFromAsync\n// after\nvar loop = new ForLoopTask\n{\n    Syntax = WorkflowScriptSyntax.JavaScript,\n    From = new JavaScriptExpression { Expression = \"1\" },\n    To = new JavaScriptExpression { Expression = \"10\" },\n    Step = new JavaScriptExpression { Expression = \"1\" }\n};","handlingStrategy":"validation","validationCode":"// before running the workflow\nif (forLoopTask.Syntax is not (WorkflowScriptSyntax.Liquid or WorkflowScriptSyntax.JavaScript))\n    throw new InvalidOperationException($\"ForLoopTask From requires Liquid or JavaScript syntax; got {forLoopTask.Syntax}\");","typeGuard":"static bool IsSupportedSyntax(WorkflowScriptSyntax s) => s is WorkflowScriptSyntax.Liquid or WorkflowScriptSyntax.JavaScript;","tryCatchPattern":"try { result = await activity.ExecuteAsync(workflowContext, activityContext); }\ncatch (NotSupportedException ex) { logger.LogError(ex, \"ForLoopTask 'from' evaluation failed for syntax {Syntax}\", syntax); /* halt workflow */ }","preventionTips":["Set Syntax explicitly on ForLoopTask (From, To, Step all share it)","Keep From/To/Step expression fields consistent with the chosen syntax (LiquidFrom vs From)","Validate imported workflow definitions before activation","When adding enum members to WorkflowScriptSyntax, update all consuming activities in the same change"],"tags":["workflows","unsupported-enum-value","script-syntax","orchardcore"],"backgroundTag":"unsupported-enum-value","analyzedSha":"4306c0717fe573f6fca1b4955909ddab6a192807","analyzedAt":"2026-09-13T17:41:05.024Z","contentChangedAt":"2026-09-13T17:41:05.024Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}