示例#1
0
        internal МетаданныеОбъект(УзелМетаданных родитель, MetadataObject metadata) :
            base(
                родитель.Корень(),
                родитель,
                metadata.Name,
                metadata.FullName,
                metadata.Title
                )
        {
            this.collectionType = (ТипКоллекции)Enum.Parse(typeof(ТипКоллекции), metadata.CollectionType);

            УзелМетаданных.ЗагрузитьРеквизиты(родитель.Корень(), this, metadata.Attribute);
            УзелМетаданных.ЗагрузитьТабличныеЧасти(родитель.Корень(), this, metadata.TableSection);

            Структура предопределенные = metadata.Predefined != null?metadata.Predefined.GetValue(родитель.Клиент()) as Структура : null;

            if (предопределенные != null)
            {
                this.predefinedValues = new Dictionary <string, Ссылка>(предопределенные.Count, StringComparer.OrdinalIgnoreCase);
                foreach (var keyValue in предопределенные)
                {
                    this.predefinedValues.Add(keyValue.Key, (Ссылка)keyValue.Value);
                }
            }
        }
        public override bool ПопыткаНайтиПодчиненный(string имя, out УзелМетаданных узел)
        {
            if (base.ПопыткаНайтиПодчиненный(имя, out узел))
            {
                return(true);
            }

            if (this.checkCache)
            {
                ИКешМетаданных кеш = this.Корень().Кеш;
                string         xmlМетаданные;
                if (кеш != null && кеш.ПопыткаПолучитьЗначение(this.Путь() + "." + имя, out xmlМетаданные))
                {
                    узел = ((MetadataNode)УзелМетаданных.ОбъектИзXML(xmlМетаданные, this.soapType)).GetValue(this);
                    return(true);
                }

                IEnumerable <string> именаПодчиненных = this.GetDynamicMemberNames();
                if (именаПодчиненных.Contains(имя, StringComparer.OrdinalIgnoreCase))
                {
                    this.Корень().Загрузить(String.Format("{0}.{1}", this.Путь(), имя));
                    return(this.ПопыткаНайтиПодчиненный(имя, out узел));
                }
            }

            узел = null;
            return(false);
        }
 internal void ЗарегистрироватьУзел(УзелМетаданных узел)
 {
     if (this.metadataMap != null)
     {
         this.metadataMap[узел.ПолноеИмя()] = узел;
     }
 }
 private void ЗакешироватьЭлементКоллекции(УзелМетаданных узелМетаданных, MetadataNode node)
 {
     if (this.cache != null)
     {
         this.cache.УстановитьЗначение(узелМетаданных.Путь(), УзелМетаданных.ОбъектВXML(node));
     }
 }
        public bool ПопыткаПолучить(string полноеИмя, out УзелМетаданных метаданные)
        {
            if (this.metadataMap.TryGetValue(полноеИмя, out метаданные))
            {
                return(true);
            }


            string[] фрагменты = полноеИмя.Split('.');
            if (фрагменты.Length >= 1)
            {
                string новФрагмент;
                if (this.fullNameToPathMap.TryGetValue(фрагменты[0], out новФрагмент))
                {
                    фрагменты[0] = новФрагмент;
                }
            }

            if (фрагменты.Length >= 3)
            {
                string новФрагмент;
                if (this.fullNameToPathMap.TryGetValue(фрагменты[2], out новФрагмент))
                {
                    фрагменты[2] = новФрагмент;
                }
            }

            string путь = String.Join(".", фрагменты);

            return(this.ПопыткаНайти(путь, out метаданные));
        }
 private void ЗакешироватьИменаЭлементовКоллекции <T> (T[] metadataNodes, УзелМетаданных узелРодитель) where T : MetadataNode
 {
     if (this.cache != null)
     {
         string[] именаЧленов = Array.ConvertAll(metadataNodes != null ? metadataNodes : new T[0], new Converter <T, string>(val => val.Name));
         this.cache.УстановитьЗначение("#list." + узелРодитель.Путь(), УзелМетаданных.ОбъектВXML(именаЧленов));
     }
 }
示例#7
0
 internal МетаданныеРеквизит(УзелМетаданных родитель, MetadataAttribute metadata) : base(
         родитель.Корень(),
         родитель,
         metadata.Name,
         string.Format("{0}.Реквизит.{1}", родитель.ПолноеИмя(), metadata.Name),
         metadata.Title
         )
 {
 }
示例#8
0
 internal МетаданныеТабличнаяЧасть(УзелМетаданных родитель, MetadataTableSection metadata) : base(
         родитель.Корень(),
         родитель,
         metadata.Name,
         string.Format("{0}.ТабличнаяЧасть.{1}", родитель.ПолноеИмя(), metadata.Name),
         metadata.Title
         )
 {
     УзелМетаданных.ЗагрузитьРеквизиты(родитель.Корень(), this, metadata.Attribute);
 }
        public override IEnumerable <string> GetDynamicMemberNames()
        {
            if (!this.checkCache)
            {
                return(base.GetDynamicMemberNames());
            }

            if (this.childrenNames != null)
            {
                return(this.childrenNames);
            }

            // пытаемся получить из кеша
            ИКешМетаданных кеш = this.Корень().Кеш;

            if (кеш != null)
            {
                string именаXML;
                if (кеш.ПопыткаПолучитьЗначение("#list." + this.Путь(), out именаXML))
                {
                    this.childrenNames = УзелМетаданных.ОбъектИзXML <string[]>(именаXML);
                    return(this.childrenNames);
                }
            }

            // пытаемся загрузить с сервера
            Соответствие картаИмен = this.Корень().ПолучитьИменаОбъектовКоллекций(this.Путь());
            Массив       именаВрем = картаИмен[this.Путь()] as Массив;

            if (именаВрем != null)
            {
                string[] имена = new string[именаВрем.Count];
                for (int i = 0; i < именаВрем.Count; i++)
                {
                    имена[i] = (string)именаВрем[i];
                }
                this.childrenNames = имена;
                if (кеш != null)
                {
                    кеш.УстановитьЗначение("#list." + this.Путь(), УзелМетаданных.ОбъектВXML(имена));
                }
                return(this.childrenNames);
            }

            throw new Exception(String.Format("Не удалось получить имена подчиненых узлов для коллекции \"{0}\"", this.Путь()));
        }
        private void ЗаполнитьМетаданныеИзПакетаSOAP(MetadataApplication soapMetadataPack)
        {
            if (soapMetadataPack.Collection == null)
            {
                return;
            }

            foreach (MetadataCollection collection in soapMetadataPack.Collection)
            {
                УзелМетаданных узелКоллекции;
                if (this.ПопыткаНайтиПодчиненный(collection.Name, out узелКоллекции))
                {
                    if (collection.Item != null)
                    {
                        foreach (MetadataNode node in collection.Item)
                        {
                            УзелМетаданных узел = node.GetValue(узелКоллекции);
                            this.ЗакешироватьЭлементКоллекции(узел, node);
                        }
                    }
                }
            }
        }
 public МетаданныеКоллекция(МетаданныеКонфигурация корень, УзелМетаданных родитель, string имя, string полноеИмя, string синоним, Type типSoap, bool проверятьКеш = false) : base(корень, родитель, имя, полноеИмя, синоним)
 {
     this.checkCache = проверятьКеш;
     this.soapType   = типSoap;
 }
 internal МетаданныеМодуль(УзелМетаданных родитель, MetadataModule metadata) : base(родитель.Корень(), родитель, metadata.Name, metadata.FullName, metadata.Title)
 {
 }