Зарегистрироваться | Поиск |
Результаты опроса: Нужен ли .Net Аксапте? | |||
Конечно нужен, это ведь дополнительные возможности. | 32 | 84.21% | |
Все что надо можно через DLL делать и не мучиться. | 3 | 7.89% | |
Знал бы прикуп жил бы в Сочи. | 3 | 7.89% | |
Голосовавшие: 38. Вы ещё не голосовали в этом опросе |
|
Опции темы |
19.06.2008, 14:18 | #61 |
Участник
|
Цитата:
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 | #62 |
очами вижу
|
Можно снова попробовать решлекшеном.
X++: ReportingServices.GetType().InvokeMember("GetReportParameters", ClrInterop:: parseClrEnum("System.Reflection.BindingFlags", "InvokeMethod"), null, ReportingServices, [path, null, false, null, null]). |
|
19.06.2008, 15:03 | #63 |
Участник
|
Метод есть, он его предлагает для выбора. А вот что ему не ясно... через рефлекшн попробую
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 15:22 | #64 |
Участник
|
Попробовал, та же ругань. Ругается еще и на 5 параметр, попробовал поэксперементировать с ним и создал массив System.Array но не помогло(
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 15:27 | #65 |
очами вижу
|
А булевы переменные в .NET нормально отправляются? Может, дело в System.Boolean?
PS. Хотя в том же ListChildren используется bool и ничего страшного. Последний раз редактировалось RumataEstor; 19.06.2008 в 15:30. |
|
20.06.2008, 08:20 | #66 |
Участник
|
Цитата:
PHP код:
- PHP код:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
20.06.2008, 09:13 | #67 |
Участник
|
X++: System.Type t2; ; t2 = CLRInterop::Null("System.Array"); info (t2.ToString());
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
20.06.2008, 11:00 | #68 |
очами вижу
|
В схеме ясно написано, что параметров 5, один из которых обязательный. Но ты же работаешь не напрямую с сервисами через SOAP, а используешь .NET обертку, которая предоставляет свой интерфейс. Вот на него и надо смотреть.
Попробуй посмотреть рефлектором на этот метод в сборке. Может быть, в той версии, которая у тебя, этот метод имеет другую сигнатуру либо вообще отличается названием. Если же с этим все нормально, то я даже не знаю, что можно посоветовать. Ведь не может же быть такого, чтобы одни методы виделись, а другие нет. Ведь оба они объявлены public и разницы между ними быть не может. Может, все-таки попробовать сделать все необходимое на C#, а в Аксапте использовать простейшие методы? |
|
20.06.2008, 12:16 | #69 |
Участник
|
Цитата:
PHP код:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
20.06.2008, 12:41 | #70 |
очами вижу
|
Цитата:
Ну, если тебе нравится бег с препятствиями высотой больше твоего роста - то нормально. Я еще с Аксаптой не работал, но уже чувствую, что Visual Studio у меня не будет лежать мертвым грузом. Последний раз редактировалось RumataEstor; 20.06.2008 в 12:45. |
|
20.06.2008, 13:06 | #71 |
Участник
|
Цитата:
Сообщение от RumataEstor
Мне кажется, здесь ты забыл GetType(). Ты получил null типа System.Array и присвоил его переменной типа System.Type. В принципе, такое присвоения вообще должно давать ошибку совместимости типов, так как System.Array ни является наследником System.Type, ни имеет implicit (забыл как по-русски) методов приведения к нему.
PHP код:
Обычно работа в Аксапте не требует прыгать выше головы). Особая нужда возникает только при работе со сторонними приложениями (такими как RS2005 и т.п.) Оно и понятно интеграция никогда не давалась легко. В целом имеющихся в Аксапте инструментов с лихвой хватает для того чтобы реализовать большинство задач учета и анализа. Честно скажу извращаться пришлось только когда приходилось работать во вне Аксапты, то бишь когда выгружали в ворд и делали это через свой механизм выгрузки в XML шаблоны и сейчас когда сближаю RS и DAX. А так 99% задач MorphX берет с легкостью.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
23.06.2008, 07:56 | #72 |
Участник
|
Господа знатоки .Net неужели нет идей как победить коварный метод GetReportParameters? Я уверен все дело в передаваемых параметрах, подобные ошибки были когда пытался передавать неправильные аргументы в другие методы. Но там получить объекты типа URL или Credentials было все же проще, я их создавал. А как здесь создать пустой массив элементов определенного типа не представляю(
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
23.06.2008, 11:04 | #73 |
очами вижу
|
А если создавать объекты типа System.Array? Не CLRInterop::Null, а именно
X++: System.Array params = GetReportParameters("Zzz", "", false, new System.Array(), new System.Array()); Код: public static Array CreateInstance(Type elementType, int length); http://msdn.microsoft.com/en-us/library/zb3cfh7k.aspx Думаю, в твоем случае, это выход. Последний раз редактировалось RumataEstor; 23.06.2008 в 11:09. |
|
24.06.2008, 12:57 | #74 |
Участник
|
Цитата:
Цитата:
Сообщение от RumataEstor
Кстати, у класса System.Array есть статический метод
Код: public static Array CreateInstance(Type elementType, int length); http://msdn.microsoft.com/en-us/library/zb3cfh7k.aspx Думаю, в твоем случае, это выход.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
24.06.2008, 15:00 | #75 |
очами вижу
|
Так как в Аксапте нет метода получить тип без создания объекта typeof(Microsoft.Dynamics.ReportingServices.ParameterValue) (или я плохо искал), то придется создавать экземпляры необходимых классов.
Надеюсь, такой вариант прокатит: X++: Microsoft.Dynamics.ReportingServices.ParameterValue _ParamVal = new Microsoft.Dynamics.ReportingServices.ParameterValue(); System.Type TParamVal = _ParamVal.GetType(); System.Array EmptyParams = CLRInterop::staticInvoke("System.Array", "CreateInstance", TParamVal, 0); Microsoft.Dynamics.ReportingServices.DataSourceCredentials _DSCred = new Microsoft.Dynamics.ReportingServices.DataSourceCredentials(); System.Type TDSCred = _DSCred.GetType(); System.Array EmptyDSCred = CLRInterop::staticInvoke("System.Array", "CreateInstance", TDSCred, 0); System.Array params = ReportingServices.GetReportParameters("Zzz", "", false, EmptyParams, EmptyDSCred); Последний раз редактировалось RumataEstor; 24.06.2008 в 15:54. Причина: Забыл объект указать |
|
24.06.2008, 15:09 | #76 |
Участник
|
У дураков мысли схожи)))) Не обижайся, но сделал все то же самое один в один. Ругается компилятор на эту строчку, даже откомпилировать не дает, сразу ошибку кидает. Ты перед getReportParameters забыл указать ReportingServices? или я опять чего то упустил?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
24.06.2008, 15:53 | #77 |
очами вижу
|
Цитата:
Исправил. |
|
24.06.2008, 15:56 | #78 |
Участник
|
ну вот у него и выскакивает ошибка при компиляции(... хоть бы в момент исполнения, тогда бы можно было посмотреть в чем ошибка, а так даже глянуть то не знаешь как чего аксапте не нравится
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
24.06.2008, 16:01 | #79 |
очами вижу
|
Блин, тогда проще вообще SOAP-ом. Аксапта умеет HTTP запросы отправлять?
|
|
24.06.2008, 16:33 | #80 |
Участник
|
|
|
Теги |
.net, отчет, reporting services |
|
|