AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2013, 11:24   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,444 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
пример
За это сообщение автора поблагодарили: Logger (3), coolibin (3).
Старый 23.10.2013, 21:08   #2  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Благодарю, данный пример я видел. Там проиллюстрировано создание объекта, наполнение данными и вызов методов объекта через Refrection.

Но если я получаю данный объект (System.Collections.Generic.IEnumerable`1) как результат работы функции, которая содержится в объекте сборки, то не могу считать через Reflection её энумератор.
Старый 27.10.2013, 23:15   #3  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Но если я получаю данный объект (System.Collections.Generic.IEnumerable`1) как результат работы функции, которая содержится в объекте сборки, то не могу считать через Reflection её энумератор.
Можете:

X++:
    type = myIntList.GetType();

    propertyCount = type.GetProperty("Count");
    
    nil = new System.Object[0]();
    
    cnt = propertyCount.GetValue(myIntList, nil);
    
    info(strFmt("%1", cnt));
__________________
Axapta non erubescit
За это сообщение автора поблагодарили: Cardagant (1).
Старый 28.10.2013, 13:12   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Спасибо за ответ! Но всё равно не выходит.

Попробую привести ситуацию подробнее

TMSoft.Gohub.Client.GohubConnection - Класс сборки, реализующий подключение к сторонней БД

TMSoft.Gohub.Client.GohubDocument - Класс сборки, реализующий объекты, коллекцию которых требуется получить.

X++:
System.Type                         enumerable;
System.Type                         enumerator;
System.Object                       CLRenumerable;
System.Object                       CLRenumerator;
System.Reflection.MethodInfo        methodInfo;
;

// Создаётся некоторое подключение
con = new TMSoft.Gohub.Client.GohubConnection(someparams);

// Получить коллекцию всех документов
// Описание функции говорит, что возвратит System.Collections.Generic.IEnumerable`1[TMSoft.Gohub.Client.GohubDocument]
CLRenumerable = con.QueryDocuments(0);

// Получить тип
enumerable = CLRenumerable.GetType();

info(enumerable.get_Name()); // <_QueryDocuments>d__0
info(enumerable.get_FullName()); // TMSoft.Gohub.Client.GohubConnection+<_QueryDocuments>d__0
info(enumerable.get_AssemblyQualifiedName()); // TMSoft.Gohub.Client.GohubConnection+<_QueryDocuments>d__0, TMSoft.Gohub.Client.Net, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

if (CLRInterop::isNull(enumerable)) // false
     throw error("null");

methodInfo = enumerable.GetMethod("GetEnumerator");

if (CLRInterop::isNull(methodInfo)) // true
     throw error("null"); 

CLRenumerator   = methodInfo1.Invoke(enumerable, nil);

Последний раз редактировалось Cardagant; 28.10.2013 в 13:18.
Старый 28.10.2013, 13:51   #5  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от Cardagant Посмотреть сообщение
X++:
CLRenumerator   = methodInfo1.Invoke(enumerable, nil);
Может все же
X++:
CLRenumerator   = methodInfo.Invoke(CLRenumerable, nil);
А CLRInterop::isNull ошибается порой, известная тема...
__________________
Axapta non erubescit

Последний раз редактировалось b_nosoff; 28.10.2013 в 15:16.
Старый 28.10.2013, 14:23   #6  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от b_nosoff Посмотреть сообщение
Может все же
X++:
CLRenumerator   = methodInfo1.Invoke(CLRenumerable, nil);
Моя ошибка, Вы правы!

Цитата:
Сообщение от b_nosoff Посмотреть сообщение
А CLRInterop::isNull ошибается порой, известная тема...
Закоментировал проверку на Нулл, получаю ошибку на строке
X++:
CLRenumerator   = methodInfo.Invoke(CLRenumerable, nil);
Объект не инициализирован.

Последний раз редактировалось Cardagant; 28.10.2013 в 14:25.
Старый 28.10.2013, 15:28   #7  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Объект не инициализирован.
Попробуйте так:
X++:
enumerable = System.Type::GetType("System.Collections.IEnumerable");
чисто в порядке эксперимента
__________________
Axapta non erubescit
Теги
.net, generic

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ssmantha: Debugging .NET code called from X++ code in AX 2012 Blog bot DAX Blogs 1 11.11.2011 15:50
emeadaxsupport: When browsing AX 2009 Role Centers, you get an error: An unexpected error has occurred on systems with .NET Framework v4.0 installed Blog bot DAX Blogs 1 28.07.2010 08:24
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
jinx: Microsoft Dynamics AX und .NET - Erstellen eines Termins in Outlook Blog bot DAX auf Deutsch 0 03.11.2007 00:33
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:26.