|
|
#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.
|
|
|
|
|
#62 |
|
очами вижу
|
Можно снова попробовать решлекшеном.
X++: ReportingServices.GetType().InvokeMember("GetReportParameters", ClrInterop:: parseClrEnum("System.Reflection.BindingFlags", "InvokeMethod"), null, ReportingServices, [path, null, false, null, null]). |
|
|
|
|
#63 |
|
Участник
|
Метод есть, он его предлагает для выбора. А вот что ему не ясно... через рефлекшн попробую
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#64 |
|
Участник
|
Попробовал, та же ругань. Ругается еще и на 5 параметр, попробовал поэксперементировать с ним и создал массив System.Array но не помогло(
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#65 |
|
очами вижу
|
А булевы переменные в .NET нормально отправляются? Может, дело в System.Boolean?
PS. Хотя в том же ListChildren используется bool и ничего страшного. Последний раз редактировалось RumataEstor; 19.06.2008 в 15:30. |
|
|
|
|
#66 |
|
Участник
|
Цитата:
PHP код:
- PHP код:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#67 |
|
Участник
|
X++: System.Type t2;
;
t2 = CLRInterop::Null("System.Array");
info (t2.ToString());
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#68 |
|
очами вижу
|
В схеме ясно написано, что параметров 5, один из которых обязательный. Но ты же работаешь не напрямую с сервисами через SOAP, а используешь .NET обертку, которая предоставляет свой интерфейс. Вот на него и надо смотреть.
Попробуй посмотреть рефлектором на этот метод в сборке. Может быть, в той версии, которая у тебя, этот метод имеет другую сигнатуру либо вообще отличается названием. Если же с этим все нормально, то я даже не знаю, что можно посоветовать. Ведь не может же быть такого, чтобы одни методы виделись, а другие нет. Ведь оба они объявлены public и разницы между ними быть не может. Может, все-таки попробовать сделать все необходимое на C#, а в Аксапте использовать простейшие методы? |
|
|
|
|
#69 |
|
Участник
|
Цитата:
PHP код:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#70 |
|
очами вижу
|
Цитата:
Ну, если тебе нравится бег с препятствиями высотой больше твоего роста - то нормально. Я еще с Аксаптой не работал, но уже чувствую, что Visual Studio у меня не будет лежать мертвым грузом. Последний раз редактировалось RumataEstor; 20.06.2008 в 12:45. |
|
|
|
|
#71 |
|
Участник
|
Цитата:
Сообщение от RumataEstor
Мне кажется, здесь ты забыл GetType(). Ты получил null типа System.Array и присвоил его переменной типа System.Type. В принципе, такое присвоения вообще должно давать ошибку совместимости типов, так как System.Array ни является наследником System.Type, ни имеет implicit (забыл как по-русски) методов приведения к нему.
PHP код:
Цитата:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#72 |
|
Участник
|
Господа знатоки .Net неужели нет идей как победить коварный метод GetReportParameters? Я уверен все дело в передаваемых параметрах, подобные ошибки были когда пытался передавать неправильные аргументы в другие методы. Но там получить объекты типа URL или Credentials было все же проще, я их создавал. А как здесь создать пустой массив элементов определенного типа не представляю(
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#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. |
|
|
|
|
#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.
|
|
|
|
|
#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. Причина: Забыл объект указать |
|
|
|
|
#76 |
|
Участник
|
У дураков мысли схожи)))) Не обижайся, но сделал все то же самое один в один. Ругается компилятор на эту строчку, даже откомпилировать не дает, сразу ошибку кидает. Ты перед getReportParameters забыл указать ReportingServices? или я опять чего то упустил?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#77 |
|
очами вижу
|
Цитата:
Исправил. |
|
|
|
|
#78 |
|
Участник
|
ну вот у него и выскакивает ошибка при компиляции(... хоть бы в момент исполнения, тогда бы можно было посмотреть в чем ошибка, а так даже глянуть то не знаешь как чего аксапте не нравится
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
|
|
|
|
|
#79 |
|
очами вижу
|
Блин, тогда проще вообще SOAP-ом. Аксапта умеет HTTP запросы отправлять?
|
|
|
|
|
#80 |
|
Участник
|
|
|
|
| Теги |
| .net, отчет, reporting services |
|
|
|