예제 #1
0
        IXapEvaluationService IXapValidationProvider.LoadRules <T>(T obj, string ruleType)
        {
            IXapDataProvider db      = null;
            IXapRuleSet      ruleSet = null;
            IXapRule         rule    = null;

            try {
                string dbEnvironment  = string.Empty;
                string lobName        = string.Empty;
                string componentName  = string.Empty;
                string ruleDependents = string.Empty;

                GetDbContext <T>(obj, out dbEnvironment, out lobName, out componentName);

                db = DbFactory.Instance.Db(dbEnvironment, lobName, "CORE.SelectRules");

                XapDataReader dr = db.AddParameter(DbFactory.Instance.DbParameter("RuleType", ruleType))
                                   .AddParameter(DbFactory.Instance.DbParameter("LobName", lobName))
                                   .AddParameter(DbFactory.Instance.DbParameter("ComponentName", componentName))
                                   .AddParameter(DbFactory.Instance.DbParameter("NameSpace", obj.GetType().FullName))
                                   .ExecuteReader();

                while (dr.Read())
                {
                    ruleSet = evaluationService.GetRuleSet(dr.GetString("RuleSet"));
                    evaluationService.AddRuleSet(ruleSet);

                    rule                 = ruleSet.GetRule(dr.GetString("RuleName"));
                    rule.RuleType        = dr.GetString("RuleType");
                    rule.RuleSyntax      = dr.GetString("RuleSyntax");
                    rule.RuleDescription = dr.GetString("RuleDesc");
                    rule.RuleMessage     = dr.GetString("RuleMessage");

                    IXapRuleVariable ruleVariable = EvaluationFactory.Instance.CreateRuleVariable(dr.GetString("PropertyName"));
                    rule.AddRuleVariable(ruleVariable);

                    ruleDependents = dr.GetString("Dependencies");

                    string[] dependents = ruleDependents.Split(',');
                    for (int i = 0; i < dependents.Length; i++)
                    {
                        IXapRuleVariable variableDependent = EvaluationFactory.Instance.CreateRuleVariable(dependents[i]);
                        rule.AddRuleVariable(variableDependent);
                    }
                    ruleSet.AddRule(rule);
                }

                return(evaluationService);
            }catch (XapException ex) {
                throw;
            }catch (Exception ex) {
                throw new XapException($"Error loading validation rules for {obj.GetType().FullName}", ex);
            } finally {
                db.CloseConnection();
            }
        }
예제 #2
0
        internal static string PrepareRuleSyntax(string ruleSyntax, IXapRule rule)
        {
            try {
                foreach (IXapRuleVariable ruleVariable in rule.GetRuleVariables())
                {
                    ruleSyntax = PrepareVariable(ruleSyntax, ruleVariable);
                    ruleSyntax = PrepareVariableAlias(ruleSyntax, ruleVariable);
                    ruleSyntax = PrepareGenericVariableValue(ruleSyntax, ruleVariable);
                    ruleSyntax = PrepareGenericVariableName(ruleSyntax, ruleVariable);

                    //clear the variable value to make sure it's reset for next run
                    ruleVariable.VariableValue = string.Empty;
                }
                return(ruleSyntax);
            } catch (Exception ex) {
                throw new XapException($"Error preparing rule syntax for Rule:{rule.RuleName} Syntax:{rule.RuleSyntax}", ex);
            }
        }