Как получить описание объекта
Для получения описания COM-объектов, создаваемых компонентой, используется объект Reflector. Он является независимой частью компоненты и создаётся как отдельный объект.
- С помощью Reflector’а можно:
Получить имя класса (имя реализуемого интерфейса) как оно описано в библиотеке типов.
Получить набор полей объекта.
Узнать, есть ли у объекта указанное свойство.
Узнать тип значения у свойства.
Тип компоненты |
Имя объекта Reflector |
---|---|
AddIn |
|
COM |
|
//Создание Reflector'а
Reflector = Новый ComОбъект("AddIn.Diadoc.Reflector");
// Допустим, хотим посмотреть описание корневого объекта компоненты AddIn
DiadocApi_ = Новый("AddIn.DiadocInvoiceAPI");
DiadocApi = DiadocApi_.CreateObject();
ОписаниеОбъекта = Reflector.Describe(DiadocApi);
ИмяИнтерфейса = ОписаниеОбъекта.GetInterfaceName(); // "IDiadocApiInvoiceApi"
ПоляОбъекта = ОписаниеОбъекта.GetPropertiesNames(); // коллекция строк с именами полей объекта
ЕстьЛиСвойство = ОписаниеОбъекта.HasProperty("ProxySettings"); // true
ТипСвойства_1 = ОписаниеОбъекта.GetPropertyType("ProxySettings"); // "VT_PTR"
ТипСвойства_2 = ОписаниеОбъекта.GetPropertyType("Свойство_которого_нет"); // ""
ТипСвойства_3 = ОписаниеОбъекта.GetPropertyType("ApiClientId"); // "VT_BSTR"
Процедура ПрочитатьВсеСвойстваОбъектаКомпонентыЧерезРефлектор(Объект, Рефлектор)
Если ТипЗнч(Объект) = Тип("COMОбъект") Тогда
ОписаниеОбъекта = Рефлектор.Describe(Объект);
Если ОписаниеОбъекта.GetInterfaceName() = "IValueCollection" Тогда
Для Каждого ЭлементКоллекции Из Объект Цикл
ПрочитатьВсеСвойстваОбъектаКомпонентыЧерезРефлектор(ЭлементКоллекции, Рефлектор);
КонецЦикла;
Иначе
Для Каждого ИмяПоле Из ОписаниеОбъекта.GetPropertiesNames() Цикл
ВложенныйОбъект = Объект[ИмяПоле];
ПрочитатьВсеСвойстваОбъектаКомпонентыЧерезРефлектор(ВложенныйОбъект, Рефлектор);
КонецЦикла;
КонецЕсли;
Иначе
// Логика работы со строковым значением одного из полей DynamicContent'а
// Объект - строка
КонецЕсли;
КонецПроцедуры