コード例 #1
0
ファイル: MoreService.svc.cs プロジェクト: EmptyCubes/More
        public RuleBookTraceInformation[] Execute(DateTime effectiveDate, string ruleBookName, Dictionary<string, object> inputs)
        {
            //MoreApplicationFactory.GetCompiler(effectiveDate);
            var rulesEngine = new RulesEngine();
            var assemblyEffectiveDate = MoreApplicationFactory.GetAssemblyEffectiveDate(effectiveDate);
            var factory = rulesEngine.GetFactory(MoreApplicationFactory.GetAssemblyName(assemblyEffectiveDate),
                MoreApplicationFactory.GetLookupRepository(effectiveDate)
                );
            if (factory == null)
            {
                throw new Exception(
                    "Either the assembly was not found.  Or it was compiled incorrectly. Recompile and try again.");
            }
            var ruleBook = factory.GetRuleBook(ruleBookName);

            if (ruleBook == null)
            {
                throw new Exception("Rule book not found.");
            }
            var result = ruleBook.Execute(inputs);
            if (result.Errors.Any())
            {
                var error = result.Errors.First();
                throw new FaultException(string.Format("{0} - {1}", error.Message, error.RuleDescription));
            }
            return result.TraceInformation.ToArray();
        }
コード例 #2
0
ファイル: MoreService.svc.cs プロジェクト: EmptyCubes/More
        public InputRequirement[] GetInputRequirements(DateTime effectiveDate, string ruleBookName)
        {
            var rulesEngine = new RulesEngine();
            var assemblyEffectiveDate = MoreApplicationFactory.GetAssemblyEffectiveDate(effectiveDate);
            var factory = rulesEngine.GetFactory(
                MoreApplicationFactory.GetAssemblyName(assemblyEffectiveDate),
                MoreApplicationFactory.GetLookupRepository(effectiveDate));
            if (factory == null)
            {
                throw new Exception(
                    "Either the assembly was not found.  Or it was compiled incorrectly. Recompile and try again.");
            }
            var ruleBook = factory.GetRuleBook(ruleBookName);

            return ruleBook.GetInputRequirements().ToArray();
        }
コード例 #3
0
ファイル: DebugController.cs プロジェクト: EmptyCubes/More
        //public ActionResult TestForm(string ruleBookName)
        //{
        //    ViewBag.RuleBookName = ruleBookName;
        //    MoreApplicationFactory.GetCompiler(MissionControlDate);
        //    var rulesEngine = new RulesEngine();
        //    var factory = rulesEngine.GetFactory(MoreApplicationFactory.GetAssemblyName(MissionControlDate), TableStrategy);
        //    var ruleBook = factory.GetRuleBook(ruleBookName);
        //    if (ruleBook == null)
        //    {
        //        return View("ErrorMessage", (object)"Rule book not found");
        //    }
        //    return View(ruleBook.GetInputRequirements());
        //}
        public ActionResult TestRuleBook(string ruleBookName)
        {
            ViewBag.RuleBookName = ruleBookName;
            MoreApplicationFactory.GetCompiler(MissionControlDate);
            var rulesEngine = new RulesEngine();
            var factory = rulesEngine.GetFactory(MoreApplicationFactory.GetAssemblyName(MissionControlDate), TableStrategy);
            var ruleBook = factory.GetRuleBook(ruleBookName);

            var ruleBookRequirements = ruleBook.GetInputRequirements();
            var inputs = new Dictionary<string, object>();

            foreach (var ruleBookRequirement in ruleBookRequirements)
            {
                inputs.Add(ruleBookRequirement.Name, Request[ruleBookRequirement.Name]);
            }

            return Json(ruleBook.Execute(inputs), JsonRequestBehavior.AllowGet);
        }
コード例 #4
0
ファイル: ValuesController.cs プロジェクト: EmptyCubes/More
        // POST api/values
        public object Post(RulesExecuteModel model)
        {
            // MoreApplicationFactory.GetCompiler(model.EffectiveDate);
            try
            {
                var inputs = JsonHelper.FromJson(model.Data);
                var rulesEngine = new RulesEngine();
                var assemblyEffectiveDate = MoreApplicationFactory.GetAssemblyEffectiveDate(model.EffectiveDate);
                var factory = rulesEngine.GetFactory(
                    MoreApplicationFactory.GetAssemblyName(assemblyEffectiveDate),
                    MoreApplicationFactory.GetLookupRepository(assemblyEffectiveDate)
                    );
                if (factory == null)
                {
                    return
                        "Either the assembly was not found.  Or it was compiled incorrectly. Recompile and try again.";
                }
                var ruleBook = factory.GetRuleBook(model.RuleBook);

                if (ruleBook == null)
                {
                    return "Rule book not found.";
                }
                var result = ruleBook.Execute(inputs);
                if (result.Errors.Any())
                {
                    var error = result.Errors.First();
                    return string.Format("{0} - {1}", error.Message, error.RuleDescription);
                }
                if (model.Items != null && model.Items.Length > 0 && model.Items.First() != "null")
                {
                    return model.Items.ToDictionary(item => item, result.Find);
                }
                return JsonHelper.GetJsonTrace(result.Results);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }