Зарегистрироваться | Поиск |
Результаты опроса: Нужен ли .Net Аксапте? | |||
Конечно нужен, это ведь дополнительные возможности. | 32 | 84.21% | |
Все что надо можно через DLL делать и не мучиться. | 3 | 7.89% | |
Знал бы прикуп жил бы в Сочи. | 3 | 7.89% | |
Голосовавшие: 38. Вы ещё не голосовали в этом опросе |
|
Опции темы |
|
19.06.2008, 09:16 | #1 |
Участник
|
Кстати кто знает что делает метод Equals()? Он вроде есть у всех объектов CLRObject
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 10:38 | #3 |
очами вижу
|
Цитата:
А как ты пользовался SRSProxy? Получал xml? Цитата:
PS. Так как в Аксапте исходники CLRInterop::staticInvoke я посмотреть не могу, не мог бы ты здесь их выложить. Тогда, возможно, некоторые проблемы можно было бы решить теми же методами, как они реализуются разработчиками Аксапты. |
|
19.06.2008, 11:06 | #4 |
Участник
|
Цитата:
Пробовал перевести все через com сделать по аналогии, через Com не могу добраться до статического свойста Credentials... Данный метод находится в закрытой части ядра SystemDocumentation и просмотреть его не так просто? во всяком случае как это сделать я не знаю.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 11:11 | #5 |
Участник
|
Вообще чувствуешь себя как слепой котенок. Тычешься-тычешься в попытках понять как же оно должно работать, натыкаешься на глухие стены... Где же хваленая интеграция с .Net если инструменты для работы с оной неизвестно где искать??? Энумы извлекаются так, статические свойства так, поля получать неизвестно как... вопросов однозначно больше ответов
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 11:30 | #6 |
Участник
|
я бы попробовал через reflection http://msdn.microsoft.com/en-us/libr....getvalue.aspx
|
|
|
За это сообщение автора поблагодарили: RumataEstor (1). |
19.06.2008, 11:37 | #7 |
очами вижу
|
Цитата:
Сообщение от belugin
я бы попробовал через reflection http://msdn.microsoft.com/en-us/libr....getvalue.aspx
X++: Microsoft.Dynamics.ReportingServices.CatalogItem catalogItem; //... str path = catalogItem.GetType().GetField("Path").GetValue(catalogItem); |
|
19.06.2008, 11:32 | #8 |
очами вижу
|
Найти способы доступа к полям из Аксапты не получилось.
Можно попробовать этот массив выгрузить в XML X++: System.Array ar = ReportingServices.ListChildren('/',true); System.IO.StringWriter w = new System.IO.StringWriter(); System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ar.GetType(), "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices"); ser.Serialize(w, ar); w.Flush(); str result = w.ToString(); Последний раз редактировалось RumataEstor; 19.06.2008 в 11:39. |
|
19.06.2008, 11:38 | #9 |
Участник
|
типа
X++: System.Type t;
System.Reflection.FieldInfo f;
Object o;
;
t = x.GetType();
f = t.GetField("field");
o = f.GetValue(x);
info(o.toString());
} |
|
|
За это сообщение автора поблагодарили: KingPeas (1). |
19.06.2008, 12:11 | #10 |
Участник
|
Цитата:
Всем кто помогал покорить .Net огромное спасибо. Чтобы я без вашей помощи делал ума не приложу. Сажусь изучать .Net, не сомневаюсь что он еще пригодится. О сколько нам открытий чудных Готовят сборки от .Net Спасения в советах мудрых За это Вам большой РАХМЕТ.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 12:54 | #11 |
очами вижу
|
Цитата:
Сообщение от KingPeas
Класс, работает, наконец то)))
Всем кто помогал покорить .Net огромное спасибо. Чтобы я без вашей помощи делал ума не приложу. Сажусь изучать .Net, не сомневаюсь что он еще пригодится. О сколько нам открытий чудных Готовят сборки от .Net Спасения в советах мудрых За это Вам большой РАХМЕТ. |
|
19.06.2008, 13:04 | #12 |
Участник
|
Цитата:
Так что не судите слишком строго) И потом если оно должно работать, так ведь стоит разбираться, тем более что AX2009 говорят очень связан с .Net
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 13:08 | #13 |
очами вижу
|
Цитата:
Сообщение от KingPeas
Рад бы писать, да к сожалению практически кроме MorphX ничем не владею. Стаж работы в качестве программиста скромный около 3 лет и все это время в Аксапте. Потихоньку осваиваю XML, SQL. Приходилось с VBA ковыряться, но там все на порядок проще было по офисным приложениям. Сейчас скорей всего придется VisualBasic .Net изучать. Для себя немного разбирался с HTML и ActionScript для Flash.
Так что не судите слишком строго) И потом если оно должно работать, так ведь стоит разбираться, тем более что AX2009 говорят очень связан с .Net |
|
19.06.2008, 12:57 | #14 |
Участник
|
Ох рано я обрадовался. Попробовал получить параметры как это делается в примерах
Сначала так X++: ar2 = ReportingServices.GetReportParameters( '/ABCD_New/ABCD_New', null, false, null,null); X++: ar2 = ReportingServices.GetReportParameters( '/ABCD_New/ABCD_New', CLRInterop::Null("System.String"), false, CLRInterop::Null("Microsoft.Dynamics.ReportingServices.Microsoft.Dynamics.ReportingServices.DataSourceCredentials"), CLRInterop::Null("Microsoft.Dynamics.ReportingServices.CatalogItem"));
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 13:06 | #15 |
очами вижу
|
Во втором варианте, наверное, должны быть типы "System.Array", так как в декларации написаны массивы:
public ReportParameter[] GetReportParameters(string Report, string HistoryID, bool ForRendering, ParameterValue[] Values, DataSourceCredentials[] Credentials); Параметров действительно 5, метод вроде бы называется верно. Может, у тебя переменная ReportingServices в этот момент уже другое значение принимает? Проверь ее тип с помощью метода GetType(). |
|
19.06.2008, 13:18 | #16 |
Участник
|
Цитата:
Ну если бы в этот момент ругалось бы в момент исполнения, а так Аксапта ругается еще на синтаксис, до запуска дело не дошло.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 13:39 | #17 |
очами вижу
|
Может, ошибка в типе переменной? Уверен, что ReportingServices типа Microsoft.Dynamics.ReportingServices.ReportingService2005? Уж с методами все должно быть нормально, ведь ListChildren нормально отрабатывает.
|
|
19.06.2008, 14:18 | #18 |
Участник
|
Цитата:
X++: Microsoft.Dynamics.ReportingServices.ReportingService2005 ReportingServices = new Microsoft.Dynamics.ReportingServices.ReportingService2005(); X++: info (ReportingServices.ToString()); Microsoft.Dynamics.ReportingServices.ReportingService2005 так что ошибка непонятно где( Может у кого есть возможность в 2009 посмотреть код, там вроде описание необходимых параметров есть, возможно и ошибки более детальные выдаются... Вот результирующий код X++: static void RSGetReportParameter2(Args _args) { Microsoft.Dynamics.ReportingServices.ReportingService2005 ReportingServices = new Microsoft.Dynamics.ReportingServices.ReportingService2005(); Microsoft.Dynamics.ReportingServices.CatalogItem catalogItem; Microsoft.Dynamics.ReportingServices.ItemTypeEnum itemTypeEnum; Microsoft.Dynamics.ReportingServices.ReportParameter reportParameter; SRSItemTypeEnum ItemType; System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials"); System.Exception exception; System.Array ar, ar2, arEmpty; System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.Uri url = new System.Uri('http://ax-dev/ReportServer'); str name, path; int i, j, arLength, arLength2, typeElement; str type; anytype getFieldValue(CLRObject _object, str _fieldName) { System.Type t; System.Reflection.FieldInfo fieldInfo; ; t = _object.GetType(); fieldInfo = t.GetField(_fieldName); return fieldInfo.GetValue(_object); } ; try { ReportingServices.set_WebServiceUrl('http://ax-dev/ReportServer/ReportService2005.asmx'); ReportingServices.set_Credentials(cred); ar = ReportingServices.ListChildren('/',true); arLength = ar.get_Length(); for (i=0; i< arLength; i++) { catalogItem = ar.GetValue(i); path = getFieldValue(catalogItem,"Path"); name = getFieldValue(catalogItem,"Name"); typeElement = getFieldValue(catalogItem,"Type"); ItemType = typeElement; info (strfmt('%1 - %2 (%3)',ItemType, path, name)); ar2 = ReportingServices.GetReportParameters(path, null, false, null, null); arLength2 = ar2.get_Length(); for (j = 0; j < arLength2; j++) { reportParameter = ar2.GetValue(j); name = getFieldValue(reportParameter,"Name"); info(strFmt('--Параметр %1',name)); } } } catch (Exception::CLRError) { info('Ошибка .NET'); exception = CLRInterop::getLastException(); name = exception.ToString(); info (name); } info('Конец'); }
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 14:39 | #19 |
очами вижу
|
Можно снова попробовать решлекшеном.
X++: ReportingServices.GetType().InvokeMember("GetReportParameters", ClrInterop:: parseClrEnum("System.Reflection.BindingFlags", "InvokeMethod"), null, ReportingServices, [path, null, false, null, null]). |
|
19.06.2008, 15:03 | #20 |
Участник
|
Метод есть, он его предлагает для выбора. А вот что ему не ясно... через рефлекшн попробую
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
Теги |
.net, отчет, reporting services |
|
|