示例#1
0
        public bool Check <T>(ScriptableObjectBase table, ICollection <T> values, string keyFieldName)
            where T : TableClassBase
        {
            string tableName = table.GetTableName();

            // 是否有自定义策略
            return(customCheckers[tableName].Check(table, values, keyFieldName));
        }
示例#2
0
        public void Check <T>(ScriptableObjectBase table, ICollection <T> values, string keyFieldName = null)
            where T : TableClassBase
        {
            if (values.Count == 0)
            {
                return;
            }

            string tableName = table.GetTableName();

            foreach (var oneStrategy in strategies)
            {
                if (oneStrategy.Contains(tableName))
                {
                    oneStrategy.Check(table, values, keyFieldName);
                    break;
                }
            }
        }
示例#3
0
        public bool Check <T>(ScriptableObjectBase table, ICollection <T> values, string keyFieldName)
            where T : TableClassBase
        {
            // 是否这个table的配置检测
            string tableName   = table.GetTableName();
            var    tableConfig = GetTableConfig(tableName);

            if (tableConfig == null)
            {
                return(true);
            }

            bool success = true;

            // ValidateXmlConfig已经做过提示了, 所以这里只做数据验证提示
            foreach (var fieldConfig in tableConfig.FieldCheckConfigs)
            {
                string fieldName = Utility.TypeRelate.CorrectFieldName(fieldConfig.FieldName);

                // 是否有该字段的属性
                var propertyInfo = typeof(T).GetProperty(fieldName);
                if (propertyInfo == null)
                {
                    continue;
                }

                foreach (var fieldValidater in fieldConfig.ValidateConfigs)
                {
                    // 是否存在验证node
                    var validateNode = fieldValidater.ToValidateNode();
                    if (validateNode == null)
                    {
                        continue;
                    }

                    // 验证约束
                    if (!validateNode.Constraint(propertyInfo.PropertyType))
                    {
                        continue;
                    }

                    bool keyExist = !string.IsNullOrEmpty(keyFieldName);

                    int row = 1;
                    foreach (var oneValue in values)
                    {
                        string val = propertyInfo.GetValue(oneValue, null).ToString();
                        if (!validateNode.Validate(propertyInfo.PropertyType, val))
                        {
                            if (keyExist)
                            {
                                string keyValue = oneValue.GetPropertyValue(keyFieldName).ToString();

                                Debug.LogError(
                                    string.Format(
                                        "#TableCheck# 表格[{0}]主键为[{1}({2})]行[{3}]列的值[{4}]不能通过[{5}]验证 ",
                                        tableName,
                                        keyFieldName,
                                        keyValue,
                                        fieldName,
                                        val,
                                        validateNode.GetDesc()));
                            }
                            else
                            {
                                Debug.LogError(
                                    string.Format(
                                        "#TableCheck# 表格[{0}]第[{1}]行[{2}]列的值[{3}]不能通过[{4}]验证 ",
                                        tableName,
                                        row.ToString(),
                                        fieldName,
                                        val,
                                        validateNode.GetDesc()));
                            }
                        }

                        row++;
                    }

                    success = false;
                }
            }

            return(success);
        }