Зарегистрироваться | Поиск |
Результаты опроса: Нужен ли .Net Аксапте? | |||
Конечно нужен, это ведь дополнительные возможности. | 32 | 84.21% | |
Все что надо можно через DLL делать и не мучиться. | 3 | 7.89% | |
Знал бы прикуп жил бы в Сочи. | 3 | 7.89% | |
Голосовавшие: 38. Вы ещё не голосовали в этом опросе |
|
Опции темы |
18.06.2008, 13:52 | #41 |
Участник
|
Пробую получить список объектов.
X++: static void Mel_RSGetReportParameter2(Args _args) { Microsoft.Dynamics.ReportingServices.ReportingService2005 ReportingServices = new Microsoft.Dynamics.ReportingServices.ReportingService2005(); Microsoft.Dynamics.ReportingServices.CatalogItem catalogItem; Microsoft.Dynamics.ReportingServices.ReportParameter reportParameter; System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials"); System.Exception exception; System.Array ar; System.Uri url = new System.Uri('http://ax-dev/ReportServer'); str name; ; try { ReportingServices.set_WebServiceUrl('http://ax-dev/ReportServer'); ReportingServices.set_Credentials(cred); ReportingServices.ListChildren('/',true); } catch (Exception::CLRError) { info('Ошибка .NET'); exception = CLRInterop::getLastException(); name = exception.ToString(); info (name); } info('Конец'); } Цитата:
Info Сообщение (15:48:06) Ошибка .NET
Info Сообщение (15:48:06) System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Client found response content type of '', but expected 'text/xml'. The request failed with an empty response. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.Dynamics.ReportingServices.ReportingService2005.ListChildren(String Item, Boolean Recursive) --- End of inner exception stack trace --- at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at ClrBridgeImpl.InvokeClrInstanceMethod(ClrBridgeImpl* , ObjectWrapper* objectWrapper, Char* pszMethodName, Int32 argsLength, ObjectWrapper** arguments, Boolean* isException) Info Сообщение (15:48:06) Конец
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
18.06.2008, 14:02 | #42 |
очами вижу
|
С помощью рефлектора можно посмотреть на класс "Microsoft.Dynamics.ReportingServices.Proxy" (который предоставляется в SRSProxy). В нем в функции SetServerUrl есть такая строчка:
X++: if (!url.EndsWith("ReportService2005.asmx")) { url = Path.Combine(url, "ReportService2005.asmx"); } X++: ReportingServices.set_WebServiceUrl('http://ax-dev/ReportServer/ReportService2005.asmx'); |
|
19.06.2008, 08:06 | #43 |
Участник
|
ОЛЕ...ОЛЕ-ОЛЕ-ОЛЕ Россия-молодец
Цитата:
Вроде прорыв, создал массив и сохранил в него значения... и опять руки опускаются( 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; System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials"); System.Exception exception; System.Array ar; str name; int i,arLength; str type; ; 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); name = catalogItem.GetHashCode(); // Также доступны GetType(); toString(); Equals() info (strfmt('%1 - %2',i,name)); } info (name); } catch (Exception::CLRError) { info('Ошибка .NET'); exception = CLRInterop::getLastException(); name = exception.ToString(); info (name); } info('Конец'); } Что делать ума не приложу. Посмотрел в SystemDocumentation ничего по смыслу подходящего нет(
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 09:16 | #44 |
Участник
|
Кстати кто знает что делает метод Equals()? Он вроде есть у всех объектов CLRObject
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 10:38 | #46 |
очами вижу
|
Цитата:
А как ты пользовался SRSProxy? Получал xml? Цитата:
PS. Так как в Аксапте исходники CLRInterop::staticInvoke я посмотреть не могу, не мог бы ты здесь их выложить. Тогда, возможно, некоторые проблемы можно было бы решить теми же методами, как они реализуются разработчиками Аксапты. |
|
19.06.2008, 11:06 | #47 |
Участник
|
Цитата:
Пробовал перевести все через com сделать по аналогии, через Com не могу добраться до статического свойста Credentials... Данный метод находится в закрытой части ядра SystemDocumentation и просмотреть его не так просто? во всяком случае как это сделать я не знаю.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 11:11 | #48 |
Участник
|
Вообще чувствуешь себя как слепой котенок. Тычешься-тычешься в попытках понять как же оно должно работать, натыкаешься на глухие стены... Где же хваленая интеграция с .Net если инструменты для работы с оной неизвестно где искать??? Энумы извлекаются так, статические свойства так, поля получать неизвестно как... вопросов однозначно больше ответов
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 11:30 | #49 |
Участник
|
я бы попробовал через reflection http://msdn.microsoft.com/en-us/libr....getvalue.aspx
|
|
|
За это сообщение автора поблагодарили: RumataEstor (1). |
19.06.2008, 11:32 | #50 |
очами вижу
|
Найти способы доступа к полям из Аксапты не получилось.
Можно попробовать этот массив выгрузить в 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:37 | #51 |
очами вижу
|
Цитата:
Сообщение от 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:38 | #52 |
Участник
|
типа
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 | #53 |
Участник
|
Цитата:
Всем кто помогал покорить .Net огромное спасибо. Чтобы я без вашей помощи делал ума не приложу. Сажусь изучать .Net, не сомневаюсь что он еще пригодится. О сколько нам открытий чудных Готовят сборки от .Net Спасения в советах мудрых За это Вам большой РАХМЕТ.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 12:54 | #54 |
очами вижу
|
Цитата:
Сообщение от KingPeas
Класс, работает, наконец то)))
Всем кто помогал покорить .Net огромное спасибо. Чтобы я без вашей помощи делал ума не приложу. Сажусь изучать .Net, не сомневаюсь что он еще пригодится. О сколько нам открытий чудных Готовят сборки от .Net Спасения в советах мудрых За это Вам большой РАХМЕТ. |
|
19.06.2008, 12:57 | #55 |
Участник
|
Ох рано я обрадовался. Попробовал получить параметры как это делается в примерах
Сначала так 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:04 | #56 |
Участник
|
Цитата:
Так что не судите слишком строго) И потом если оно должно работать, так ведь стоит разбираться, тем более что AX2009 говорят очень связан с .Net
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 13:06 | #57 |
очами вижу
|
Во втором варианте, наверное, должны быть типы "System.Array", так как в декларации написаны массивы:
public ReportParameter[] GetReportParameters(string Report, string HistoryID, bool ForRendering, ParameterValue[] Values, DataSourceCredentials[] Credentials); Параметров действительно 5, метод вроде бы называется верно. Может, у тебя переменная ReportingServices в этот момент уже другое значение принимает? Проверь ее тип с помощью метода GetType(). |
|
19.06.2008, 13:08 | #58 |
очами вижу
|
Цитата:
Сообщение от KingPeas
Рад бы писать, да к сожалению практически кроме MorphX ничем не владею. Стаж работы в качестве программиста скромный около 3 лет и все это время в Аксапте. Потихоньку осваиваю XML, SQL. Приходилось с VBA ковыряться, но там все на порядок проще было по офисным приложениям. Сейчас скорей всего придется VisualBasic .Net изучать. Для себя немного разбирался с HTML и ActionScript для Flash.
Так что не судите слишком строго) И потом если оно должно работать, так ведь стоит разбираться, тем более что AX2009 говорят очень связан с .Net |
|
19.06.2008, 13:18 | #59 |
Участник
|
Цитата:
Ну если бы в этот момент ругалось бы в момент исполнения, а так Аксапта ругается еще на синтаксис, до запуска дело не дошло.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
19.06.2008, 13:39 | #60 |
очами вижу
|
Может, ошибка в типе переменной? Уверен, что ReportingServices типа Microsoft.Dynamics.ReportingServices.ReportingService2005? Уж с методами все должно быть нормально, ведь ListChildren нормально отрабатывает.
|
|
Теги |
.net, отчет, reporting services |
|
|