public static List<FunctionEntity> CreateViewEntity(DependencyObjectCollection collFunc,ServiceComponent service) { var group = collFunc.GroupBy(c => new { FUNCTION_INFO_NAME = c["FUNCTION_INFO_NAME"].ToStringExtension(), FUNCTION_INFO_DISPLAY_NAME = c["FUNCTION_INFO_DISPLAY_NAME"].ToStringExtension(), FUNCTION_INFO_CLASS = c["FUNCTION_INFO_CLASS"].ToStringExtension(), FUNCTION_INFO_CLASS_NAME = c["FUNCTION_INFO_CLASS_NAME"].ToStringExtension(), FUNCTION_EXPLAIN = c["FUNCTION_EXPLAIN"].ToStringExtension() }); List<FunctionEntity> list = new List<FunctionEntity>(); IQueryProjectContainer srv = service.GetService<IQueryProjectContainer>("TFL"); IMetadataContainer mc = service.GetService<IMetadataContainer>(); Regex regNum = new Regex("^[0-9]"); //参数不能以数字开头的校验 foreach (var item in group) { FunctionEntity entity = new FunctionEntity() { Name = item.Key.FUNCTION_INFO_NAME, DisplayName = item.Key.FUNCTION_INFO_DISPLAY_NAME, Description = item.Key.FUNCTION_EXPLAIN, Category = item.Key.FUNCTION_INFO_CLASS_NAME }; foreach (var sub in item) { if (Maths.IsEmpty(sub["FUNCTION_INFO_D_ID"])) //没有参数 continue; if(regNum.IsMatch(sub["PARAMETER_CODE"].ToStringExtension())) //参数不能以数字开头 continue; ParaEntity para = new ParaEntity(); para.Name = sub["PARAMETER_CODE"].ToStringExtension(); para.DisplayName = sub["PARAMETER_NAME"].ToStringExtension(); para.OffSet = sub["PLACEHOLDER"].ToStringExtension(); int index = para.Name.IndexOf("."); if (index > -1) { para.PropertyName = para.Name.Replace('.', '_'); //带上表明前缀 以防止有相同的属性名参数但是表明不一样(a.Status,b.Status),导致后续跟进参数注册属性会报错,不能注册相同的参数 } else { //可能存在查询单一表情况,不带别名的 para.PropertyName = para.Name; } para.SecondPropertyName = para.PropertyName + "2"; para.ControlType = (ControlTypeEnum)sub["CONTROL_TYPE"].ToInt32(); //控件类型 1.录入框 2.开窗 3.下拉框 4.日期框 para.ParaTypeFlag = (ParaTypeEnum)sub["PARAMETER_VALUE_TYPE"].ToInt32(); //参数值类型 1.String 2.Integer 3.Double 4.Boolean 5.Date 6.DateTime if (Maths.IsNotEmpty(sub["ORGANIZATION_TYPE"].ToStringExtension())) { para.OrgType = (OrgnizationType)(Enum.Parse(typeof(OrgnizationType), sub["ORGANIZATION_TYPE"].ToStringExtension())); //组织类型 1.公司 2.销售域 3.采购域 4.服务域 5.工厂 6.部门 7.工作中心 } else { para.OrgType = OrgnizationType.Empty; } para.QueryTypeKey = sub["WINDOW_TYPEKEY"].ToStringExtension(); //开窗typekey OperParaProName(0, para, sub, mc, srv); int count = GetTheSameCount(entity, para.PropertyName); if (count > 0) { OperParaProName(count, para, sub, mc, srv); } para.ConditionName = "Condition_" + para.PropertyName; para.Conditions = sub["CONDITIONS"].ToStringExtension(); if ((para.ControlType == ControlTypeEnum.SelectControl && para.OrgType == OrgnizationType.COMPANY)) {//组织类型为公司的开窗参数才需要添加当前条件项 if (Maths.IsNotEmpty(para.Conditions)) { para.Conditions = para.Conditions.Insert(0, "Current;"); } else { para.Conditions = "Current"; } } if ((para.ParaTypeFlag == ParaTypeEnum.String && para.ControlType == ControlTypeEnum.Input)) {//录入框类的string类型,要添加引用单元格条件项 if (Maths.IsNotEmpty(para.Conditions)) { para.Conditions += ";ExcelCell"; } else { para.Conditions = "ExcelCell"; } } string[] conditions = para.Conditions.Split(';'); if (conditions.Length > 0 && Maths.IsNotEmpty(conditions[0])) { para.Operator = GetConditionCompareEnumValue(conditions[0]); } ParaEntity tmpP = entity.ParaList.FirstOrDefault(c => c.PropertyName == para.PropertyName); if (tmpP == null) { //不能有相同的参数 entity.ParaList.Add(para); } } list.Add(entity); } return list; }
private static void OperParaProName(int existCount, ParaEntity para, DependencyObject sub, IMetadataContainer mc, IQueryProjectContainer srv) { string name = para.Name; string extendFix = string.Empty; if (existCount > 0) { extendFix = "X" + (existCount + 1); //后续以X+流水 name = name + extendFix; } int index = name.IndexOf("."); if (index > -1) { para.PropertyName = name.Replace('.', '_'); //带上表明前缀 以防止有相同的属性名参数但是表明不一样(a.Status,b.Status),导致后续跟进参数注册属性会报错,不能注册相同的参数 } else { //可能存在查询单一表情况,不带别名的 para.PropertyName = name; } para.SecondPropertyName = para.PropertyName + "2"; if (para.ControlType == ControlTypeEnum.PickList) { para.PickListTypeName = sub["CONTROL_CODE"].ToStringExtension(); if (para.PickListTypeName != string.Empty) { var pick = mc.GetPickListTypeElement(para.PickListTypeName); if (pick != null) { //para.Tip = pick.DisplayName; //20170829 mark by shenbao for P001-170829002 LocalizableString localStr = new LocalizableString(pick.DisplayName); //20170829 add by shenbao for P001-170829002 para.Tip = localStr[System.Globalization.CultureInfo.CurrentUICulture.ThreeLetterWindowsLanguageName]; //20170829 add by shenbao for P001-170829002 } } } else if (para.ControlType == ControlTypeEnum.SelectControl) { para.QueryProjectId = sub["CONTROL_CODE"].ToStringExtension(); QueryProject qp = srv.QueryProjects.FirstOrDefault(c => c.Id == para.QueryProjectId) as QueryProject; string idColumn = string.Empty; if (qp != null) { idColumn = qp.ContextDataColumn; para.Tip = qp.DisplayName; } else { idColumn = "KEY_FIELD_ID"; //理论上永远不会走到这里,除非FINCTION_INFO没有配置开窗编号,或者这个编号是错误的 } para.TargetEntityPirmaryKeyID = idColumn; if (index >= 0) { para.PropertyName = name.Substring(0, index) + "_" + idColumn + extendFix; //如果是开窗类型,则需要重新设置PropertyName,为ID字段 } else { para.PropertyName = idColumn + extendFix; } para.SecondPropertyName = para.PropertyName + "2"; } }