Beispiel #1
0
        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;
        }
Beispiel #2
0
        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";

            }
        }