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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.11.2013, 10:00   #1  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Передача массива в Net
Коллеги, нужна помощь.
Есть некий метод класса написанного на C#, данный метод принимает массив guid[]. Вопрос в том как из DAX передать такой параметр в этот метод, я уже все перепробовал не хочет он понимать.
Старый 23.11.2013, 10:09   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В каком месте у вас начинаются поблемы? на стороне аксапты или на стороне дотнета?

Через NetBusinessConnector получить CLRObject, созданный в Аксапте
Старый 23.11.2013, 12:13   #3  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
На стороне DAX. Попробовал все варианты, все время пишет "Класс не содержит этой функии"

Последний раз редактировалось maldini; 23.11.2013 в 12:37.
Старый 23.11.2013, 15:24   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Выложите пример неработающего кода
Старый 23.11.2013, 15:39   #5  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Выложите пример неработающего кода
Вот пример кода на C#
X++:
public StatusingAssignmentsDataSet ReadAssignments(Guid[] assnUIDs)
{
    return (StatusingAssignmentsDataSet) base.Invoke("ReadAssignments", new object[] { assnUIDs })[0];
}
А вот DAX

X++:
    Statusing.StatusingDataSet   AssignmentsDat;
    Array                                           guids = new Array(Types::Guid);
    ;

    dataStoreEnum       = ClrInterop::parseClrEnum('NV.Project.DataStoreEnum', 'PublishedStore');

    projUIDLocal = str2guid(#projGuid);
    
    projectDataSet = new  NV.Project.ProjectDataSet();
    projectDataSet = project.ReadProject(projUIDLocal,dataStoreEnum);

    assigmentTable = projectDataSet.get_Assignment();
    assigmentRow = assigmentTable.get_Item(1);

    guids.value(1,assigmentRow.get_ASSN_UID());
    
    AssignmentsDat = statusing.ReadAssignments(guids); // Вот тут ошибка, я уже разные варианты попробовал, 
 statusing

Последний раз редактировалось Dron AKA andy; 25.11.2013 в 17:11. Причина: убрал по просьбе автора
Старый 23.11.2013, 16:15   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Проблема появляется только для этого метода, который принимает Guid[]? Скажем, если временно изменить тип параметра на другой, то ошибка пропадет?
Старый 23.11.2013, 16:21   #7  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Проблема появляется только для этого метода, который принимает Guid[]? Скажем, если временно изменить тип параметра на другой, то ошибка пропадет?
Если вызывать другие методы, которые принимают просто guid или string то все ОК.
Старый 23.11.2013, 16:29   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Так тоже наверное пробовали?
X++:
//Array guids = new Array(Types::Guid);
System.Guid[] guids = new System.Guid[1]();

В качестве эксперимента. Если объявить метод вот так
Код:
public StatusingAssignmentsDataSet ReadAssignments(Object assnUIDs)
И дебагером посмотреть какого типа значение приходит? assnUIDs.GetType()
Старый 23.11.2013, 16:36   #9  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В качестве эксперимента. Если объявить метод вот так
Код:
public StatusingAssignmentsDataSet ReadAssignments(Object assnUIDs)
И дебагером посмотреть какого типа значение приходит? assnUIDs.GetType()
Я не могу код менять это dll, исходников нет. Но так я думаю пройдет.
Два дня я бился с этой проблемой в итоге сделал свою библиотеку в которой вызвал нужные мне методы. А свою библиотеку вызвал в DAX. Но как без этих танцев обойтись очень интересно.

Последний раз редактировалось maldini; 23.11.2013 в 16:40.
Старый 24.11.2013, 20:03   #10  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Забыл уточнить что система DAX 4, видимо в ней нельзя объявить переменную подобную этой, так как в DAX 2009 без проблем.
X++:
System.Guid[]
Старый 24.11.2013, 22:19   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от maldini Посмотреть сообщение
Забыл уточнить что система DAX 4, видимо в ней нельзя объявить переменную подобную этой, так как в DAX 2009 без проблем.
X++:
System.Guid[]
а так?
X++:
System.Type                     type;
System.Object                   guids;

type = System.Type::GetType("System.Guid[]");
guids = System.Activator::CreateInstance(type);
Старый 24.11.2013, 22:59   #12  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
а так?
X++:
System.Type                     type;
System.Object                   guids;

type = System.Type::GetType("System.Guid[]");
guids = System.Activator::CreateInstance(type);
Пишет что ошибка вызова статического метода. Вот засада.

Последний раз редактировалось maldini; 24.11.2013 в 23:15.
Старый 24.11.2013, 23:44   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вот здесь написано что Guid в X++ это тоже самое что и System.Guid в Net http://msdn.microsoft.com/en-us/libr...(v=ax.10).aspx
Что если попробовать просто
X++:
Guid[] guids
Старый 25.11.2013, 00:00   #14  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вот здесь написано что Guid в X++ это тоже самое что и System.Guid в Net http://msdn.microsoft.com/en-us/libr...(v=ax.10).aspx
Что если попробовать просто
X++:
Guid[] guids
так не получится, вот так можно
X++:
Guid  guids[]
но это тоже не помогает, мне надо передать объект с типом Guid[].

Последний раз редактировалось maldini; 25.11.2013 в 00:15.
Старый 25.11.2013, 08:36   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от maldini Посмотреть сообщение
Пишет что ошибка вызова статического метода. Вот засада.
Тогда так пробуйте:
X++:
System.Type                     type;
System.Object                   guids;
;


type = System.Type::GetType("System.Guid");
guids = System.Array::CreateInstance(type, 100);

info(type.get_FullName());
info(guids.ToString());
Старый 25.11.2013, 10:20   #16  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Тогда так пробуйте:
X++:
System.Type                     type;
System.Object                   guids;
;
 
 
type = System.Type::GetType("System.Guid");
guids = System.Array::CreateInstance(type, 100);
 
info(type.get_FullName());
info(guids.ToString());
Да создается System.Guid[] но при вызове функции та же ошибка "Класс не содержит эту функцию." Может проблема в самой функции
Старый 25.11.2013, 10:26   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от maldini Посмотреть сообщение
Да создается System.Guid[] но при вызове функции та же ошибка "Класс не содержит эту функцию." Может проблема в самой функции
Скорее всего. Мне кажется, если бы проблема была в типе входящего параметра, то текст ошибки был бы другой
За это сообщение автора поблагодарили: maldini (1).
Старый 25.11.2013, 10:33   #18  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Скорее всего. Мне кажется, если бы проблема была в типе входящего параметра, то текст ошибки был бы другой
Да нет, я пробовал на простых примерах ввести неправильные параметры, ошибка именно эта, на 4 ке вообще описание ошибки свели к одной "Функция не существует". Даная функция через C# нормально вызывается и работает. Вот пример.

Код:
statusing.ReadAssignments(new Guid[1] { (Guid)row[prjDataSet.Assignment.ASSN_UIDColumn] })
Может на 4-ке нельзя передавать в параметры массив?
Старый 26.11.2013, 13:56   #19  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Четверка не поддерживает объявление массивов через []. Попробуйте statusing присвоить переменной типа ClrObject, и уже у нее вызвать требуемый метод. А статические методы в четверке вызываются через CrInterop::staticInvoke().
__________________
Axapta non erubescit
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
fed: Net requirements update in MRP Module and Working Set of MRP Blog bot DAX Blogs 14 08.05.2012 13:09
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
Передача массива в .Net monk DAX: Программирование 1 02.09.2008 13:55
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31

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

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

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