23.11.2013, 10:00 | #1 |
Участник
|
Передача массива в Net
Коллеги, нужна помощь.
Есть некий метод класса написанного на C#, данный метод принимает массив guid[]. Вопрос в том как из DAX передать такой параметр в этот метод, я уже все перепробовал не хочет он понимать. |
|
23.11.2013, 10:09 | #2 |
Участник
|
В каком месте у вас начинаются поблемы? на стороне аксапты или на стороне дотнета?
Через NetBusinessConnector получить CLRObject, созданный в Аксапте |
|
23.11.2013, 12:13 | #3 |
Участник
|
На стороне DAX. Попробовал все варианты, все время пишет "Класс не содержит этой функии"
Последний раз редактировалось maldini; 23.11.2013 в 12:37. |
|
23.11.2013, 15:24 | #4 |
Участник
|
Выложите пример неработающего кода
|
|
23.11.2013, 15:39 | #5 |
Участник
|
Вот пример кода на C#
X++: public StatusingAssignmentsDataSet ReadAssignments(Guid[] assnUIDs) { return (StatusingAssignmentsDataSet) base.Invoke("ReadAssignments", new object[] { assnUIDs })[0]; } 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 |
Участник
|
Проблема появляется только для этого метода, который принимает Guid[]? Скажем, если временно изменить тип параметра на другой, то ошибка пропадет?
|
|
23.11.2013, 16:21 | #7 |
Участник
|
|
|
23.11.2013, 16:29 | #8 |
Участник
|
Так тоже наверное пробовали?
X++: //Array guids = new Array(Types::Guid); System.Guid[] guids = new System.Guid[1](); В качестве эксперимента. Если объявить метод вот так Код: public StatusingAssignmentsDataSet ReadAssignments(Object assnUIDs) |
|
23.11.2013, 16:36 | #9 |
Участник
|
Цитата:
Два дня я бился с этой проблемой в итоге сделал свою библиотеку в которой вызвал нужные мне методы. А свою библиотеку вызвал в DAX. Но как без этих танцев обойтись очень интересно. Последний раз редактировалось maldini; 23.11.2013 в 16:40. |
|
24.11.2013, 20:03 | #10 |
Участник
|
Забыл уточнить что система DAX 4, видимо в ней нельзя объявить переменную подобную этой, так как в DAX 2009 без проблем.
X++: System.Guid[] |
|
24.11.2013, 22:19 | #11 |
Участник
|
Цитата:
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; 24.11.2013 в 23:15. |
|
24.11.2013, 23:44 | #13 |
Участник
|
Вот здесь написано что 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 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Вот здесь написано что Guid в X++ это тоже самое что и System.Guid в Net http://msdn.microsoft.com/en-us/libr...(v=ax.10).aspx
Что если попробовать просто X++: Guid[] guids X++: Guid guids[] Последний раз редактировалось maldini; 25.11.2013 в 00:15. |
|
25.11.2013, 08:36 | #15 |
Участник
|
|
|
25.11.2013, 10:20 | #16 |
Участник
|
Да создается System.Guid[] но при вызове функции та же ошибка "Класс не содержит эту функцию." Может проблема в самой функции
|
|
25.11.2013, 10:26 | #17 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: maldini (1). |
25.11.2013, 10:33 | #18 |
Участник
|
Цитата:
Код: statusing.ReadAssignments(new Guid[1] { (Guid)row[prjDataSet.Assignment.ASSN_UIDColumn] }) |
|
26.11.2013, 13:56 | #19 |
Читатель
|
Четверка не поддерживает объявление массивов через []. Попробуйте statusing присвоить переменной типа ClrObject, и уже у нее вызвать требуемый метод. А статические методы в четверке вызываются через CrInterop::staticInvoke().
|
|
|
|