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(именаЧленов)); } }
internal МетаданныеРеквизит(УзелМетаданных родитель, MetadataAttribute metadata) : base( родитель.Корень(), родитель, metadata.Name, string.Format("{0}.Реквизит.{1}", родитель.ПолноеИмя(), metadata.Name), metadata.Title ) { }
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) { }