microsoft / RulesEngine

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

How to do nested if else #574

Open ying234 opened 5 months ago

ying234 commented 5 months ago

Is there way to do such nested if rules? Is there setting to make the parent rule expression also evaluated even if there are nested child rules?

if(loyaltyFactor > 4)
{
    if(totalOrder > 3)
    {
    ...
    }
   else
    {
    ...
    }
}
else
{
...
}
[
  {
    "WorkflowName": "Discount",
    "Rules": [
      {
        "RuleName": "GiveDiscount30NestedOrExample",
        "SuccessEvent": "30",
        "ErrorMessage": "One or more adjust rules failed.",
        "ErrorType": "Error",
        "Operator": "OrElse",
        "Rules": [
          {
            "RuleName": "ParentRule",
            "ErrorMessage": "One or more adjust rules failed.",
            "ErrorType": "Error",
            "RuleExpressionType": "LambdaExpression",
            "Operator": "OrElse",
            "Expression": "input1.loyaltyFactor > 4",
            "Rules": [
              {
                "RuleName": "SubHighLoyaltyLowNumberOrders",
                "ErrorMessage": "One or more adjust rules failed.",
                "ErrorType": "Error",
                "RuleExpressionType": "LambdaExpression",
                "Expression": "input2.totalOrders <= 3"
              },
              {
                "RuleName": "SubHighLoyaltyHighNumberOfTotalOrders",
                "ErrorMessage": "One or more adjust rules failed.",
                "ErrorType": "Error",
                "RuleExpressionType": "LambdaExpression",
                "Expression": "input2.totalOrders > 3"
              }
            ]
          },
          {
            "RuleName": "LowLayaltyHighNumberOfTotalOrders",
            "ErrorMessage": "One or more adjust rules failed.",
            "ErrorType": "Error",
            "RuleExpressionType": "LambdaExpression",
            "Expression": "input2.totalOrders > 15"
          }
        ]
      }
    ]
  }
]
jjrobinson commented 5 months ago

Also hoping this issue can get fixed to make the Rules Engine much power useful.

abbasc52 commented 5 months ago

@ying234 complex scenarios can be enabled via actions such as evaluateRule and ExecuteActionWorkflowAsync . Please refer this example - https://microsoft.github.io/RulesEngine/#evaluaterule

ying234 commented 4 months ago

@abbasc52 looks good for the evaluateRule. Thank you!