/// <summary> /// Получает значение свойства объекта по ссылке на объект и имени свойства. /// </summary> /// <param name="ссылка">Ссылка на объект.</param> /// <param name="имяПоля">Имя поля.</param> /// <param name="значение">Значение поля.</param> /// <returns>Возвращает true, Если значение установлено, в противном случае - false.</returns> public bool ПопыткаПолучитьЗначение(ОбъектСсылка ссылка, string имяПоля, out object значение) { ссылка = ссылка ?? throw new ArgumentNullException("ссылка"); if (имяПоля.Equals("Ссылка", StringComparison.OrdinalIgnoreCase)) { значение = ссылка; return(true); } УзелМетаданных реквизит; if (((dynamic)ссылка.Метаданные()).еквизиты.ПопыткаНайтиПодчиненный(имяПоля, out реквизит)) { if (ссылка.Пустая()) { значение = null; return(true); } Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка); if (данныеОбъекта.TryGetValue(имяПоля, out значение)) { return(true); } this.ЗагрузитьДанныеОбъекта(ссылка); return(ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение)); } if (((dynamic)ссылка.Метаданные()).ТабличныеЧасти.ПопыткаНайти(имяПоля, out реквизит)) { if (ссылка.Пустая()) { значение = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит); return(true); } Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка); object таблЧасть; if (данныеОбъекта.TryGetValue(имяПоля, out таблЧасть)) { if (!(таблЧасть is ТабличнаяЧасть)) { таблЧасть = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит); данныеОбъекта[имяПоля] = таблЧасть; } значение = таблЧасть; return(true); } this.ЗагрузитьДанныеОбъекта(ссылка); return(this.ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение)); } значение = null; return(false); }
/// <summary> /// Получает текстовое представление объекта по ссылке на объект. /// </summary> /// <param name="ссылка">Ссылка на объект.</param> /// <returns>Возвращает текстовое представление объекта.</returns> public string ПолучитьПредставлениеОбъекта(ОбъектСсылка ссылка) { ссылка = ссылка ?? throw new ArgumentNullException("ссылка"); if (ссылка.Пустая()) { return(""); } object представление = null; Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка); if (данныеОбъекта.TryGetValue("#", out представление)) { return((string)представление); } this.ЗагрузитьДанныеОбъекта(ссылка); return(this.ПолучитьПредставлениеОбъекта(ссылка)); }