public static RuleSet BuildRuleSet(DataTable dtRules, RuleValidation validation) { RuleSet rules = new RuleSet("RuleSet 1"); RulesParser parser = new RulesParser(validation); DataView vwRules = new DataView(dtRules); vwRules.RowFilter = "ACTIVE = 1"; vwRules.Sort = "PRIORITY asc"; foreach ( DataRowView row in vwRules ) { string sRULE_NAME = Sql.ToString (row["RULE_NAME" ]); int nPRIORITY = Sql.ToInteger(row["PRIORITY" ]); string sREEVALUATION = Sql.ToString (row["REEVALUATION"]); bool bACTIVE = Sql.ToBoolean(row["ACTIVE" ]); string sCONDITION = Sql.ToString (row["CONDITION" ]); string sTHEN_ACTIONS = Sql.ToString (row["THEN_ACTIONS"]); string sELSE_ACTIONS = Sql.ToString (row["ELSE_ACTIONS"]); RuleExpressionCondition condition = parser.ParseCondition (sCONDITION ); List<RuleAction> lstThenActions = parser.ParseStatementList(sTHEN_ACTIONS); List<RuleAction> lstElseActions = parser.ParseStatementList(sELSE_ACTIONS); System.Workflow.Activities.Rules.Rule r = new System.Workflow.Activities.Rules.Rule(sRULE_NAME, condition, lstThenActions, lstElseActions); r.Priority = nPRIORITY; r.Active = bACTIVE ; //r.ReevaluationBehavior = (RuleReevaluationBehavior) Enum.Parse(typeof(RuleReevaluationBehavior), sREEVALUATION); // 12/04/2010 Play it safe and never-reevaluate. r.ReevaluationBehavior = RuleReevaluationBehavior.Never; rules.Rules.Add(r); } rules.Validate(validation); if ( validation.Errors.HasErrors ) { throw(new Exception(RulesUtil.GetValidationErrors(validation))); } return rules; }
// 12/12/2012 For security reasons, we want to restrict the data types available to the rules wizard. public static void RulesValidate(Guid gID, string sRULE_NAME, int nPRIORITY, string sREEVALUATION, bool bACTIVE, string sCONDITION, string sTHEN_ACTIONS, string sELSE_ACTIONS, Type thisType, SplendidRulesTypeProvider typeProvider) { RuleSet rules = new RuleSet("RuleSet 1"); RuleValidation validation = new RuleValidation(thisType, typeProvider); RulesParser parser = new RulesParser(validation); RuleExpressionCondition condition = parser.ParseCondition (sCONDITION ); List<RuleAction> lstThenActions = parser.ParseStatementList(sTHEN_ACTIONS); List<RuleAction> lstElseActions = parser.ParseStatementList(sELSE_ACTIONS); System.Workflow.Activities.Rules.Rule r = new System.Workflow.Activities.Rules.Rule(sRULE_NAME, condition, lstThenActions, lstElseActions); r.Priority = nPRIORITY; r.Active = bACTIVE ; //r.ReevaluationBehavior = (RuleReevaluationBehavior) Enum.Parse(typeof(RuleReevaluationBehavior), sREEVALUATION); // 12/04/2010 Play it safe and never-reevaluate. r.ReevaluationBehavior = RuleReevaluationBehavior.Never; rules.Rules.Add(r); rules.Validate(validation); if ( validation.Errors.HasErrors ) { throw(new Exception(GetValidationErrors(validation))); } }