microsoft / RulesEngine

A Json based Rules Engine with extensive Dynamic expression support
https://microsoft.github.io/RulesEngine/
MIT License
3.47k stars 530 forks source link

String Interpolation #534

Closed agern400 closed 9 months ago

agern400 commented 9 months ago

String interpolation seems to not be supported by custom output expressions i.e:

{ "WorkflowName": "interpolationWorkflow", "Rules": [ { "RuleName": "interpolationRule", "RuleExpressionType": "LambdaExpression", "Expression": "true", "Actions": { "OnSuccess": { "Name": "OutputExpression", "Context": { "Expression": "$\"The year is {DateTime.Now.Year}\"" } } } } ] }

The output expression generates an error:

System.Exception: Exception while executing OutputExpressionAction: Syntax error ---> Syntax error (at index 1) at System.Linq.Dynamic.Core.Tokenizer.TextParser.ValidateToken(TokenId tokenId, String errorMessage) at System.Linq.Dynamic.Core.Parser.ExpressionParser.Parse(Type resultType, Boolean createParameterCtor) at RulesEngine.ExpressionBuilders.RuleExpressionParser.Parse(String expression, ParameterExpression[] parameters, Type returnType) at RulesEngine.ExpressionBuilders.RuleExpressionParser.Compile[T](String expression, RuleParameter[] ruleParams) at RulesEngine.ExpressionBuilders.RuleExpressionParser.Evaluate[T](String expression, RuleParameter[] ruleParams) at RulesEngine.Actions.OutputExpressionAction.Run(ActionContext context, RuleParameter[] ruleParameters) at RulesEngine.Actions.ActionBase.ExecuteAndReturnResultAsync(ActionContext context, RuleParameter[] ruleParameters, Boolean includeRuleResults) --- End of inner exception stack trace ---

abbasc52 commented 9 months ago

@agern400 RulesEngine supports only a subset of C# lang features which is defined here - https://dynamic-linq.net/expression-language

You can use normal string concatenation in this case.