예제 #1
0
        /// <summary>
        /// 删除决策表行或列
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="matrixCode"></param>
        /// <param name="hasRightToDelete"></param>
        /// <param name="deleteType"></param>
        /// <param name="hasRightToDelete"></param>
        /// <param name="parentIndexes"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public JsonResult DeleteCell(string ruleCode, string matrixCode, bool hasRightToDelete, string deleteType, string parentIndexes, int index)
        {
            return(ExecuteFunctionRun(() =>
            {
                BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
                BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);

                bool result = false;
                List <int> parentIndexs = GetPrentIndexes(parentIndexes);
                if (hasRightToDelete && !string.IsNullOrWhiteSpace(deleteType))
                {
                    if (deleteType == "Column")
                    {
                        DecisionMatrix.RemoveColumn(parentIndexs.ToArray <int>(), index);
                    }
                    else if (deleteType == "Row")
                    {
                        DecisionMatrix.RemoveRow(parentIndexs.ToArray(), index);
                    }
                    result = this.Engine.BizBus.UpdateBizRule(Rule);
                }

                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }
        public JsonResult Upload()
        {
            return(ExecuteFunctionRun(() =>
            {
                System.Web.HttpFileCollectionBase files = HttpContext.Request.Files;//传输的文件
                ActionResult result = new ActionResult();
                BizRuleHanderViewModel model = new BizRuleHanderViewModel();

                if (files == null || files.Count == 0 || string.IsNullOrEmpty(files[0].FileName))
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.SelectFile";
                    return Json(result, "text/html", JsonRequestBehavior.AllowGet);
                }
                string fileType = Path.GetExtension(TrimHtml(Path.GetFileName(files[0].FileName))).ToLowerInvariant();
                if (!fileType.Replace(".", "").Equals("xml"))
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.FileMustIsXML";
                    return Json(result, "text/html", JsonRequestBehavior.AllowGet);
                }

                //将文件内容存放在缓存中
                string xmlStr = string.Empty;
                using (StreamReader sr = new StreamReader(files[0].InputStream))
                {
                    xmlStr = sr.ReadToEnd();
                }
                string newName = Guid.NewGuid().ToString() + fileType;

                model.FileName = newName;
                model.XMLString = xmlStr;

                //验证是否为伪造的xml文件
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(model.XMLString);
                }
                catch (Exception ex)
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.InvilidateFile";
                    return Json(result, "text/html", JsonRequestBehavior.AllowGet);
                }

                BizRuleTable BizRuleTable = ReadXmlFile(model); //从XML中读取服务名称和编码

                model.Code = BizRuleTable.Code;
                model.DisplayName = BizRuleTable.DisplayName;

                //界面控制,前台控制
                result.Success = true;
                result.Message = "";
                result.Extend = model;//返回上传的BizRule
                return Json(result, "text/html", JsonRequestBehavior.AllowGet);
            }));
        }
예제 #3
0
        /// <summary>
        /// 添加决策表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult AddDecisionMatrix(BizRuleDecisionMatrixViewModel model)
        {
            return(ExecuteFunctionRun(() => {
                ActionResult result = new ActionResult(false, "");

                BizRuleTable Rule = Engine.BizBus.GetBizRule(model.RuleCode);//业务规则

                if (string.IsNullOrEmpty(model.Code))
                {
                    result.Message = "msgGlobalString.InvalidCode";
                    return Json(result);
                }

                if (Rule.GetDecisionMatrix(model.Code) != null)
                {
                    result.Message = "msgGlobalString.CodeExisted";
                    return Json(result);
                }

                //决策表必须以字母开始,不让创建到数据库表字段时报错
                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z\\u4e00-\\u9fa5][0-9a-zA-Z\\u4e00-\\u9fa5_]*$");
                if (!regex.Match(model.Code).Success)
                {
                    result.Success = false;
                    result.Message = "EditBizObjectSchemaProperty.Msg4";
                    return Json(result);
                }

                //决策表名称不能含有特殊字符
                if (!regex.Match(model.DisplayName).Success)
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.NameInValid";
                    return Json(result);
                }

                OThinker.H3.BizBus.BizRule.BizRuleDecisionMatrix matrix = OThinker.H3.BizBus.BizRule.DecisionMatrixFactory.Create(
                    (DecisionMatrixType)Enum.Parse(typeof(DecisionMatrixType),
                                                   model.DecisionMatrixType),
                    model.Code);
                matrix.DisplayName = model.DisplayName;
                matrix.Description = model.Description;
                matrix.DecisionMatrixScope = (DecisionMatrixScope)Enum.Parse(typeof(DecisionMatrixScope), model.Scope);
                if (!Rule.AddDecisionMatrix(matrix))
                {
                    result.Message = "msgGlobalString.SaveFailed";
                    return Json(result);
                }
                if (!this.Engine.BizBus.UpdateBizRule(Rule))
                {
                    result.Message = "msgGlobalString.SaveFailed";
                    return Json(result);
                }
                result.Success = true;
                result.Message = "msgGlobalString.SaveSucced";
                return Json(result);
            }));
        }
예제 #4
0
        /// <summary>
        /// 加载行信息
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="matrixCode"></param>
        /// <param name="columnIndex"></param>
        /// <param name="parentIndexes"></param>
        /// <returns></returns>
        public JsonResult Load(string ruleCode, string matrixCode, int rowIndex, string parentIndexes)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();
                BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
                BizRuleDecisionMatrix DecisionMatrix = null;
                if (Rule != null)
                {
                    DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);
                }

                Header Row = null;       // 当前行

                Header ParentRow = null; // 直接父级行
                List <int> ParentRowIndexes = GetPrentIndexes(parentIndexes);

                if (ParentRowIndexes.Count > 0)
                {//如果存在父节点,则逐步找到最后一个节点,也就是直接上级
                    foreach (int index in ParentRowIndexes)
                    {
                        if (ParentRow == null)
                        {
                            ParentRow = DecisionMatrix.Rows[index];
                        }
                        else
                        {
                            ParentRow = ParentRow.Children[index];
                        }
                    }
                }

                //如果存在当前行,则看有无直接上级
                if (ParentRow == null)
                {
                    Row = DecisionMatrix.Rows[rowIndex];
                }
                else
                {
                    Row = ParentRow.Children[rowIndex];
                }

                BizRuleDecisionMatrixItemViewModel model = new BizRuleDecisionMatrixItemViewModel();
                model.Index = rowIndex;
                if (Row != null)
                {
                    model.ObjectID = Row.GetHashCode().ToString();//做判断是否为新增使用,不为空表示为更新
                    model.DisplayName = Row.DisplayName;
                    model.Description = Row.Description;
                    model.EffectiveCondition = Row.Value;
                    model.IsDefault = Row.IsDefault;
                    model.SortKey = Row.SortKey;
                    model.RuleCode = ruleCode;
                    model.MatrixCode = matrixCode;
                }
                return Json(model, JsonRequestBehavior.AllowGet);
            }));
        }
예제 #5
0
        /// <summary>
        /// 获取决策表列数据
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="matrixCode"></param>
        /// <returns></returns>
        public JsonResult GetColumnData(string ruleCode, string matrixCode)
        {
            return(ExecuteFunctionRun(() => {
                BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
                BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);

                List <BizRuleDecisionMatrixItemViewModel> dataList = new List <BizRuleDecisionMatrixItemViewModel>();
                if (DecisionMatrix.Columns != null)
                {
                    dataList = GetMatrixData(DecisionMatrix.Columns);
                }
                var gridData = CreateLigerUIGridData(dataList.ToArray());

                return Json(gridData, JsonRequestBehavior.AllowGet);
            }));
        }
예제 #6
0
 /// <summary>
 /// 决策表返回数据项
 /// </summary>
 /// <returns></returns>
 public JsonResult LoadResultFields(string ruleCode, string matrixCode)
 {
     return(ExecuteFunctionRun(() =>
     {
         List <OptionItem> list = new List <OptionItem>();
         BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
         BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);
         // 保存结果的字段
         BizRuleDataElement[] dataElements = Rule.DataElements;
         if (dataElements != null)
         {
             bool isSelectiveOrSorted = false;
             if (DecisionMatrix != null)
             {
                 isSelectiveOrSorted = DecisionMatrix.MatrixType == DecisionMatrixType.SelectiveArray ||
                                       DecisionMatrix.MatrixType == DecisionMatrixType.SortedArray;
             }
             foreach (BizRuleDataElement dataElement in dataElements)
             {
                 // 选择和排序规则的返回值只允许选择参与者
                 if (isSelectiveOrSorted)
                 {
                     if (dataElement.LogicType == Data.DataLogicType.MultiParticipant ||
                         dataElement.LogicType == Data.DataLogicType.SingleParticipant)
                     {
                         list.Add(new OptionItem()
                         {
                             Text = dataElement.DisplayName2, Value = dataElement.ElementName
                         });
                     }
                 }
                 else
                 {
                     if (dataElement.RealType == typeof(string) || dataElement.RealType == typeof(string[]))
                     {
                         list.Add(new OptionItem()
                         {
                             Text = dataElement.DisplayName2, Value = dataElement.ElementName
                         });
                     }
                 }
             }
         }
         return Json(list, JsonRequestBehavior.AllowGet);
     }));
 }
예제 #7
0
        /// <summary>
        /// 加载决策表信息
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="matrixCode"></param>
        /// <returns></returns>
        public JsonResult LoadDecisionMatrixInfo(string ruleCode, string matrixCode)
        {
            return(ExecuteFunctionRun(() =>
            {
                BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
                BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);
                if (DecisionMatrix == null)
                {
                    return null;
                }

                BizRuleDecisionMatrixViewModel model = new BizRuleDecisionMatrixViewModel();
                model.ObjectID = DecisionMatrix.GetHashCode().ToString();//判断是否新增使用,可随便赋值
                model.Code = DecisionMatrix.Code;
                model.RuleCode = ruleCode;
                model.RowExecutionType = DecisionMatrix.RowExecutionType.ToString();
                model.ColumnExecutionType = DecisionMatrix.ColumnExecutionType.ToString();
                model.DisplayName = DecisionMatrix.DisplayName;
                model.Description = DecisionMatrix.Description;
                model.DecisionMatrixType = DecisionMatrix.MatrixType.ToString();
                model.Scope = DecisionMatrix.DecisionMatrixScope.ToString();
                switch (DecisionMatrix.MatrixType)
                {
                case DecisionMatrixType.Script:
                    model.ResultField = "";
                    break;

                case DecisionMatrixType.SelectiveArray:

                    model.ResultField = ((SelectiveArrayDecisionMatrix)DecisionMatrix).ResultElementData;
                    break;

                case DecisionMatrixType.SortedArray:

                    model.ResultField = ((SortedArrayDecisionMatrix)DecisionMatrix).ResultElementData;
                    break;

                default:
                    throw new NotImplementedException();
                }

                return Json(model, JsonRequestBehavior.AllowGet);
            }));
        }
예제 #8
0
        private List <Item> GetBizRuleMethodNamesList(string serviceCode)
        {
            List <Item> list = new List <Item>();

            if (!string.IsNullOrEmpty(serviceCode))
            {
                switch (this.Method.MethodType)
                {
                case H3.DataModel.MethodType.Filter:
                    // 是搜索
                    OThinker.H3.BizBus.Filter.FilterSchema[] filters = this.Engine.BizBus.GetFilterSchemas(serviceCode);
                    if (filters != null)
                    {
                        foreach (OThinker.H3.BizBus.Filter.FilterSchema f in filters)
                        {
                            list.Add(new Item(f.SchemaCode, f.SchemaCode));
                        }
                    }
                    break;

                case H3.DataModel.MethodType.Normal:
                case H3.DataModel.MethodType.Static:
                    BizRuleTable ruleTable = this.Engine.BizBus.GetBizRule(serviceCode);
                    if (ruleTable != null)
                    {
                        foreach (BizRuleDecisionMatrix matrix in ruleTable.DecisionMatrixes)
                        {
                            list.Add(new Item(matrix.DisplayName, matrix.Code));
                        }
                    }
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            return(list);
        }
        public Object DownLoad(string ruleCode)
        {
            return(ExecuteFileResultFunctionRun(() => {
                BizRuleTable RuleTable = this.Engine.BizBus.GetBizRule(ruleCode);
                if (RuleTable == null)
                {
                    return null;
                }
                XmlDocument XmlDoc = new XmlDocument();
                XmlElement bizRule = XmlDoc.CreateElement(FunctionNodeType.BizRule.ToString());
                XmlDoc.AppendChild(bizRule);
                RuleTable.SaveAsXml(XmlDoc, bizRule);

                //导出文件
                string path = Server.MapPath("~/TempImages/");
                string fileName = ruleCode + ".xml";

                XmlDoc.Save(path + fileName);

                //"text/xml"
                return File(path + fileName, "application/octect-stream", fileName);
            }));
        }
예제 #10
0
        /// <summary>
        /// 移除决策表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult RemoveDecisionMatrix(string ruleCode, string matrixCode)
        {
            return(ExecuteFunctionRun(() =>
            {
                BizRuleTable Rule = Engine.BizBus.GetBizRule(ruleCode);
                BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(matrixCode);

                ActionResult result = new ActionResult(false, "msgGlobalString.DeleteFailed");
                if (!Rule.RemoveDecisionMatrix(DecisionMatrix.Code))
                {
                    return Json(result);
                }
                string code = Rule.Code;
                if (!Engine.BizBus.UpdateBizRule(Rule))
                {
                    //删除失败
                    return Json(result);
                }

                result.Success = true;
                result.Message = "msgGlobalString.DeleteSucced";
                return Json(result);
            }));
        }
        public JsonResult Import(BizRuleHanderViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();
                //业务规则必须以字母开始,不让创建到数据库表字段时报错
                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z\\u4e00-\\u9fa5][0-9a-zA-Z\\u4e00-\\u9fa5_]*$");
                if (!regex.Match(model.Code).Success)
                {
                    result.Success = false;
                    result.Message = "EditBizObjectSchemaProperty.Msg4";
                    return Json(result);
                }
                BizRuleTable BizRuleTable = ReadXmlFile(model);

                if (BizRuleTable == null)
                {
                    result.Success = false;
                    result.Message = "BizRule.CreateFailed";
                    return Json(result);
                }

                if (string.IsNullOrEmpty(model.Code))
                {
                    result.Success = false;
                    result.Message = "BizRule.EmptyCode";
                    return Json(result);
                }

                bool isSuccess = true;
                string errorMsg = "msgGlobalString.ImportFail";

                BizRuleTable record = this.Engine.BizBus.GetBizRule(model.Code);

                if (record != null)
                {
                    if (model.IsCover)
                    {
                        isSuccess = this.Engine.BizBus.RemoveBizRule(model.Code);
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = "msgGlobalString.CodeDuplicate";
                        return Json(result);
                    }
                }
                if (isSuccess)
                {
                    BizRuleTable.Code = model.Code;
                    BizRuleTable.DisplayName = model.DisplayName;
                    isSuccess = this.Engine.BizBus.AddBizRule(BizRuleTable, model.ParentCode);
                }
                if (isSuccess)
                {
                    result.Success = true;
                    result.Message = "msgGlobalString.ImportSucceed";
                }
                else
                {
                    result.Success = false;
                    result.Message = errorMsg;
                }

                return Json(result);
            }));
        }
예제 #12
0
        /// <summary>
        /// 更新决策表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult EditDecisionMatrix(BizRuleDecisionMatrixViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult(false, "");

                BizRuleTable Rule = Engine.BizBus.GetBizRule(model.RuleCode);//业务规则


                if (string.IsNullOrEmpty(model.Code))
                {
                    result.Message = "msgGlobalString.InvalidCode";
                    return Json(result);
                }

                BizRuleDecisionMatrix matrix = Rule.GetDecisionMatrix(model.Code);//决策表

                //决策表名称不能含有特殊字符
                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z\\u4e00-\\u9fa5][0-9a-zA-Z\\u4e00-\\u9fa5_]*$");
                if (!regex.Match(model.DisplayName).Success)
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.NameInValid";
                    return Json(result);
                }

                matrix.DisplayName = model.DisplayName;
                matrix.Description = model.Description;
                //matrix.MatrixType = (DecisionMatrixType)Enum.Parse(typeof(DecisionMatrixType), model.DecisionMatrixType);

                matrix.RowExecutionType = (ExecutionType)Enum.Parse(typeof(ExecutionType), model.RowExecutionType);
                matrix.ColumnExecutionType = (ExecutionType)Enum.Parse(typeof(ExecutionType), model.ColumnExecutionType);
                matrix.DecisionMatrixScope = (DecisionMatrixScope)Enum.Parse(typeof(DecisionMatrixScope), model.Scope);
                // 保存结果的字段
                switch (matrix.MatrixType)
                {
                case DecisionMatrixType.Script:
                    break;

                case DecisionMatrixType.SelectiveArray:
                    ((SelectiveArrayDecisionMatrix)matrix).ResultElementData = model.ResultField;
                    break;

                case DecisionMatrixType.SortedArray:
                    ((SortedArrayDecisionMatrix)matrix).ResultElementData = model.ResultField;
                    break;

                default:
                    throw new NotImplementedException();
                }

                bool flag = this.Engine.BizBus.UpdateBizRule(Rule);
                if (flag)
                {
                    result.Success = true;
                    result.Message = "msgGlobalString.SaveSucced";
                }
                else
                {
                    result.Success = false;
                    result.Message = "msgGlobalString.SaveFailed";
                }
                return Json(result);
            }));
        }
예제 #13
0
        /// <summary>
        /// 保存决策表列信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult Save(BizRuleDecisionMatrixItemViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();
                //校验数据

                result = ValidateData(model);

                bool IsCreate = string.IsNullOrEmpty(model.ObjectID);
                BizRuleTable Rule = Engine.BizBus.GetBizRule(model.RuleCode);
                if (Rule == null)
                {
                    //业务对象模式不存在,或者已经被删除
                    result.Success = false;
                    result.Message = "BizRule.DeletedOrNotExists";
                    return Json(result);
                }

                BizRuleDecisionMatrix DecisionMatrix = Rule.GetDecisionMatrix(model.MatrixCode);
                if (DecisionMatrix == null)
                {
                    //业务对象模式不存在,或者已经被删除
                    result.Success = false;
                    result.Message = "BizRule.DeletedOrNotExists";
                    return Json(result);
                }

                if (!result.Success)
                {
                    return Json(result);
                }
                if (string.IsNullOrEmpty(model.EffectiveCondition) && !model.IsDefault)
                {
                    // this.ShowWarningMessage(this.PortalResource.GetString("EditBizRuleTableColumn_Mssg1"));
                    result.Success = false;
                    result.Message = "BizRule.SelectDefault";
                    return Json(result);
                }
                if (IsCreate)
                {
                    OThinker.H3.BizBus.BizRule.Header column = new H3.BizBus.BizRule.Header();
                    column.DisplayName = model.DisplayName;
                    column.Description = model.Description;
                    column.Value = model.EffectiveCondition;
                    column.IsDefault = model.IsDefault;
                    column.SortKey = model.SortKey;
                    DecisionMatrix.AddColumn(GetPrentIndexes(model.ParentStrIndexs).ToArray(), column);
                }
                else
                {
                    Header Column = null;       // 当前列

                    Header ParentColumn = null; // 直接父级列
                    List <int> ParentColumnIndexes = GetPrentIndexes(model.ParentStrIndexs);

                    if (ParentColumnIndexes.Count > 0)
                    {//如果存在父节点,则逐步找到最后一个节点,也就是直接上级
                        foreach (int index in ParentColumnIndexes)
                        {
                            if (ParentColumn == null)
                            {
                                ParentColumn = DecisionMatrix.Columns[index];
                            }
                            else
                            {
                                ParentColumn = ParentColumn.Children[index];
                            }
                        }
                    }

                    if (model.Index > -1)
                    {
                        //如果存在当前列,则看有无直接上级
                        if (ParentColumn == null)
                        {
                            Column = DecisionMatrix.Columns[model.Index];
                        }
                        else
                        {
                            Column = ParentColumn.Children[model.Index];
                        }
                    }

                    Column.DisplayName = model.DisplayName;
                    Column.Value = model.EffectiveCondition;
                    Column.Description = model.Description;
                    Column.IsDefault = model.IsDefault;
                    Column.SortKey = model.SortKey;

                    //DecisionMatrix.Resort();
                }
                if (this.Engine.BizBus.UpdateBizRule(Rule))
                {
                    result.Success = true;
                    result.Message = "msgGlobalString.SaveSucced";
                }
                else
                {
                    //this.ShowWarningMessage(this.PortalResource.GetString("EditBizRuleTableColumn_SaveFailed"));
                    result.Success = false;
                    result.Message = "msgGlobalString.SaveFailed";
                }

                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }