/// <summary> /// Создает ссылку на элемент перечисления. /// </summary> /// <param name="полноеИмяТипа">Полное имя типа объекта, например "Перечисление.СтавкиНДС".</param> /// <param name="указатель">Имя (идетификатор) элемента.</param> /// <param name="синоним">Синоним элемента.</param> /// <returns>Возвращает ссылку на элемент перечисления.</returns> public ПеречислениеСсылка ПолучитьПеречислениеСсылку(string полноеИмяТипа, string указатель, string синоним = "") { УзелМетаданных узелМетаданных; if (!this.Клиент.Метаданные.ПопыткаПолучить(полноеИмяТипа, out узелМетаданных)) { throw new ArgumentException(String.Format("Ошибка при получении ссылки на объект. Не удалось обнаружить объект метаданных \"{0}\".", полноеИмяТипа), "полноеИмяТипа"); } if (((МетаданныеОбъект)узелМетаданных).ТипКоллекции() != ТипКоллекции.Перечисление) { throw new Exception("Указан неверный тип коллекции."); } Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(полноеИмяТипа, указатель); Ссылка ссылка = null; WeakReference <Ссылка> слабСсылка; if (this.references.TryGetValue(идСсылки, out слабСсылка) && слабСсылка.TryGetTarget(out ссылка)) { return((ПеречислениеСсылка)ссылка); } ссылка = new ПеречислениеСсылка(this.bromClient, узелМетаданных.Имя(), указатель, синоним); this.references[идСсылки] = new WeakReference <Ссылка>(ссылка); return((ПеречислениеСсылка)ссылка); }
/// <summary> /// Создает ссылку на объект. /// </summary> /// <param name="полноеИмяТипа">Полное имя типа объекта, например "Справочник.Номенклатура".</param> /// <param name="указатель">Уникальный идентификатор ссылки.</param> /// <returns>Возвращает ссылку на объект.</returns> public ОбъектСсылка ПолучитьОбъектСсылку(string полноеИмяТипа, Guid указатель) { УзелМетаданных узелМетаданных; if (!this.Клиент.Метаданные.ПопыткаПолучить(полноеИмяТипа, out узелМетаданных)) { throw new ArgumentException(String.Format("Ошибка при получении ссылки на объект. Не удалось обнаружить объект метаданных \"{0}\".", полноеИмяТипа), "полноеИмяТипа"); } Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(полноеИмяТипа, указатель.ToString()); Ссылка ссылка = null; WeakReference <Ссылка> слабСсылка = null; if (this.references.TryGetValue(идСсылки, out слабСсылка) && слабСсылка.TryGetTarget(out ссылка)) { return((ОбъектСсылка)ссылка); } switch (((МетаданныеОбъект)узелМетаданных).ТипКоллекции()) { case ТипКоллекции.Справочник: ссылка = new СправочникСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.Документ: ссылка = new ДокументСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.ПланВидовХарактеристик: ссылка = new ПланВидовХарактеристикСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.ПланСчетов: ссылка = new ПланСчетовСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.ПланВидовРасчета: ссылка = new ПланВидовРасчетаСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.Задача: ссылка = new ЗадачаСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; case ТипКоллекции.БизнесПроцесс: ссылка = new БизнесПроцессСсылка(this.bromClient, узелМетаданных.Имя(), указатель); break; default: throw new Exception("Указан неверный тип коллекции."); } this.references[идСсылки] = new WeakReference <Ссылка>(ссылка); return((ОбъектСсылка)ссылка); }
internal void УничтожитьСсылку(Ссылка ссылка) { Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка); if (ссылка is ОбъектСсылка) { this.ОчиститьДанныеОбъекта(ссылка as ОбъектСсылка); } this.references.Remove(идСсылки); }
private Dictionary <string, object> ПолучитьУзелДанныхОбъекта(ОбъектСсылка ссылка) { Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка); Dictionary <string, object> node = null; if (!this.data.TryGetValue(идСсылки, out node)) { node = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); this.data.Add(идСсылки, node); } return(node); }
private void УдалитьУзелДанныхОбъекта(ОбъектСсылка ссылка) { Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка); this.data.Remove(идСсылки); }