Beispiel #1
0
        /// <summary>
        /// Проверка соответствия значениям в столбцах
        /// </summary>
        /// <param name="columnsValue"></param>
        public void CheckColumnsValur(List <ColumnValue> columnsValue, SpecTable specTable)
        {
            string err = string.Empty;

            foreach (var colVal in columnsValue)
            {
                if (colVal.ColumnSpec.ItemPropName == "Count")
                {
                    continue;
                }

                DBText atr;
                if (AttrsDict.TryGetValue(colVal.ColumnSpec.ItemPropName, out atr))
                {
                    if (!colVal.Value.Equals(atr.TextString, StringComparison.OrdinalIgnoreCase))
                    {
                        err += $"'{colVal.ColumnSpec.ItemPropName}'='{atr.TextString}' не соответствует эталонному значению '{colVal.Value}', '{specTable.SpecOptions.KeyPropName}' = '{Key}'.\n";
                    }
                }
                else
                {
                    // В элементе вообще нет свойства для этого столбца
                    err += $"Не определено свойство '{colVal.ColumnSpec.ItemPropName}'.\n";
                }
            }
            if (!string.IsNullOrEmpty(err))
            {
                Inspector.AddError($"Ошибки в блоке {BlName}: {err} Этот блок попадет в спецификацию с эталонными значениями.", IdBlRef);
            }
        }
Beispiel #2
0
        public bool Define(SpecTable specTable)
        {
            if (IdBlRef.IsNull)
            {
                Logger.Log.Error($"Ошибка в методе SpecItem.Define() - IdBlRef.IsNull. Недопустимая ситуация.");
                return(false);
            }
            var blRef = IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference;

            if (blRef == null)
            {
                Logger.Log.Error($"Ошибка в методе SpecItem.Define() - blRef == null. Недопустимая ситуация.");
                return(false);
            }

            string err = string.Empty;

            BlName = blRef.GetEffectiveName();

            if (blRef.AttributeCollection == null)
            {
                // В блоке нет атрибутов.
                err += "Нет атрибутов. ";
            }
            else
            {
                if (Regex.IsMatch(BlName, specTable.SpecOptions.BlocksFilter.BlockNameMatch, RegexOptions.IgnoreCase))
                {
                    // все атрибуты блока
                    AttrsDict = blRef.GetAttributeDictionary();

                    // Проверка типа блока
                    var typeBlock = specTable.SpecOptions.BlocksFilter.Type;
                    if (typeBlock != null)
                    {
                        DBText atrType;
                        if (AttrsDict.TryGetValue(typeBlock.BlockPropName, out atrType))
                        {
                            if (!typeBlock.Name.Equals(atrType.TextString, StringComparison.OrdinalIgnoreCase))
                            {
                                // Свойство типа не соответствует требованию
                                err += $"Свойство '{typeBlock.BlockPropName}'='{atrType.TextString}' не соответствует требуемому значению '{typeBlock.Name}'. ";
                            }
                        }
                        // В блоке нет свойства Типа
                        else
                        {
                            err += $"Нет обязательного свойства {typeBlock.BlockPropName}. ";
                        }
                    }

                    // Проверка обязательных атрибутов
                    foreach (var atrMustHave in specTable.SpecOptions.BlocksFilter.AttrsMustHave)
                    {
                        if (!AttrsDict.ContainsKey(atrMustHave))
                        {
                            err += $"Нет обязательного свойства: '{atrMustHave}'. ";
                        }
                    }

                    // определение Группы
                    DBText groupAttr;
                    if (AttrsDict.TryGetValue(specTable.SpecOptions.GroupPropName, out groupAttr))
                    {
                        Group = groupAttr.TextString;
                    }

                    // Ключевое свойство
                    DBText keyAttr;
                    if (AttrsDict.TryGetValue(specTable.SpecOptions.KeyPropName, out keyAttr))
                    {
                        Key = keyAttr.TextString;
                    }
                    else
                    {
                        err += $"Не определено ключевое свойство '{specTable.SpecOptions.KeyPropName}'. ";
                    }
                }
                // Имя блока не соответствует Regex.IsMatch
                else
                {
                    err += $"Имя блока не соответствует '{specTable.SpecOptions.BlocksFilter.BlockNameMatch}'. ";
                }
            }

            if (string.IsNullOrEmpty(err))
            {
                return(true);
            }
            else
            {
                Inspector.AddError($"Пропущен блок '{BlName}': {err}", blRef);
                return(false);
            }
        }