Зарегистрироваться | Поиск |
Результаты опроса: Нужен ли .Net Аксапте? | |||
Конечно нужен, это ведь дополнительные возможности. | 32 | 84.21% | |
Все что надо можно через DLL делать и не мучиться. | 3 | 7.89% | |
Знал бы прикуп жил бы в Сочи. | 3 | 7.89% | |
Голосовавшие: 38. Вы ещё не голосовали в этом опросе |
|
Опции темы |
|
13.06.2008, 14:19 | #1 |
очами вижу
|
А для делегатов в этом классе нет никаких волшебных функций?
|
|
13.06.2008, 14:24 | #2 |
Участник
|
Стыдно признаваться, но я не знаю кто такие делегаты
А класс можно найти в аксапте по адресу АОТ / SystemDocumentation / Classes
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
13.06.2008, 14:33 | #3 |
очами вижу
|
Цитата:
Например, нажатие кнопки в .NET - это событие, на которое можно подписаться любому объекту (не только форме). Посмотрел справку, действительно, ничего для этого механизма в Аксапте не предусмотренно. Печально . Интересно, как реализованы эти CLRInterop:: parseClrEnum и CLRInterop::staticInvoke, но смогу посмотреть на это еще не скоро - мы еще Аксапту не купили |
|
13.06.2008, 14:46 | #4 |
Участник
|
Цитата:
Сообщение от RumataEstor
Делегаты - это указатели на функции (методы объектов либо статические функции). Используются для реакции на события. Многие объекты предоставляют пользователю события (event), на которые можно подписываться с помощью соответствующего делегата.
Например, нажатие кнопки в .NET - это событие, на которое можно подписаться любому объекту (не только форме). Посмотрел справку, действительно, ничего для этого механизма в Аксапте не предусмотренно. Печально ...
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
17.06.2008, 09:51 | #5 |
Участник
|
Друзья еще один вопросик. Получил доступ к параметрам отчета через ReportViewer(.net), для списка доступных отчетов пользуюся классом SRSProxy(DAX). Вот только обращение к SRSProxy приводит к тому что нужно дожидаться соединения с сервером. После того как соединение установлено все работает очень быстро. То же самое с подключением к ReportViewer, сначала надо подождать, а потом можно работать спокойно. Нельзя ли это как то перевести на одни рельсы, чтобы не подключаться через два разных подключения? Среди доступных методов в ReportViewer не нашел способа как считать список узлов в каталогах. Не хочется делать все это через dll, кто знает модель RS подскажите где искать.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
17.06.2008, 12:50 | #6 |
очами вижу
|
Каким образом ты пользуешься SRSProxy? Я просто не знаю, какие методы определения доступных отчетов он предоставляет.
Сейчас нарыл в справке вот такую функцию: http://msdn.microsoft.com/en-us/libr...arameters.aspx Единственное, чего я не понял в приведенном в справке примере - это указания сервера SRS. Как ни странно, у меня этот класс (Microsoft.SqlServer.ReportingServices2005.ReportingService2005) находится в сборке "Microsoft.ReportingServices.Diagnostics.dll". |
|
17.06.2008, 13:09 | #7 |
Участник
|
Цитата:
Сообщение от RumataEstor
Каким образом ты пользуешься SRSProxy? Я просто не знаю, какие методы определения доступных отчетов он предоставляет.
Сейчас нарыл в справке вот такую функцию: http://msdn.microsoft.com/en-us/libr...arameters.aspx Единственное, чего я не понял в приведенном в справке примере - это указания сервера SRS. А сервер SRSProxy - это аксаптовская оболочка для опубликования моделей на сервере отчетов. // declare class members COM reportingServicesProxy; а вот так он инициализируется #define.ProxyClass("Microsoft.Dynamics.ReportingServices.Proxy") reportingServicesProxy = new COM(#ProxyClass); любопытно что это очень напоминает .Net Сборку нашел, а метода в нем такого в аксе нет доступного
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
17.06.2008, 13:35 | #8 |
очами вижу
|
Сейчас открыл сборку "Program Files/Microsoft Dynamics AX/40/Client/Bin/Microsoft.Dynamics.ReportingServices.DLL"
В ней есть класс "Microsoft.Dynamics.ReportingServices.ReportingService2005". Я так понимаю, у объекта Proxy ты используешь метод ListChildren? Последний раз редактировалось RumataEstor; 17.06.2008 в 13:38. |
|
17.06.2008, 13:58 | #9 |
очами вижу
|
У объекта класса Microsoft.Dynamics.ReportingServices.ReportingService2005 есть методы:
public void set_WebServiceUrl(string Value) public Microsoft.Dynamics.ReportingServices.CatalogItem[ ] ListChildren(string Item, bool Recursive) public Microsoft.Dynamics.ReportingServices.ReportParameter[ ] GetReportParameters(string Report, string HistoryID, bool ForRendering, Microsoft.Dynamics.ReportingServices.ParameterValue[ ] Values, Microsoft.Dynamics.ReportingServices.DataSourceCredentials[ ] Credentials) Если не пользоваться SRSProxy, а сразу создавать Microsoft.Dynamics.ReportingServices.ReportingService2005, то инициализация будет только одна. Последний раз редактировалось RumataEstor; 17.06.2008 в 14:02. |
|
|
За это сообщение автора поблагодарили: KingPeas (1). |
18.06.2008, 07:30 | #10 |
Участник
|
Цитата:
Можно только поинтересоваться, ты до этого выкладывал картинку где было видно всю подноготную объекта сборки. Через какую прогу можно такое сделать? Главная проблема в том что не известно какой тип данных возвращает тот или иной метод и какие параметры требуются для передачи. ну и т.п.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
18.06.2008, 08:31 | #11 |
Участник
|
кто-нибудь в курсе как в аксапте получать объект массив элементов (CatalogItem[ ])? Сам элемент для обработки доступен в сборке, а вот как получить массив объектов пока не догадываюсь?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
18.06.2008, 10:49 | #12 |
очами вижу
|
Цитата:
Может, попробовать тип "CLRObject"? Это же тоже классы и у них должны быть методы (get_Length, GetValue). Любой типизированный .NET массив - наследник от System.Array, поэтому можно пользоваться методами родителя. Неясность одна - как в Аксапте использовать приведение типов. PS. Похоже, для приведения типов можно использовать CLRInterop::getAnyTypeForObject и CLRInterop::getObjectForAnyType . Последний раз редактировалось RumataEstor; 18.06.2008 в 11:25. |
|
18.06.2008, 12:00 | #13 |
Участник
|
Есть еще одна проблема.
Когда пытаешься получить значение X++: ar = ReportingServices.ListChildren('/',true); Цитата:
The request failed with HTTP status 401: Unauthorized.
Код: rs = new ReportingService(); // Установим Credentials для текущего залогиненого юзера rs.Credentials = System.Net.CredentialCache.DefaultCredentials; // Установим URL для нашего this.rs.Url = this.labelGet.Text + "/ReportService.asmx";
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
18.06.2008, 08:58 | #14 |
Участник
|
сборки расковыриваются рефлектором - http://www.aisto.com/roeder/dotnet/
|
|
18.06.2008, 10:45 | #15 |
очами вижу
|
Цитата:
Сообщение от KingPeas
Можно только поинтересоваться, ты до этого выкладывал картинку где было видно всю подноготную объекта сборки. Через какую прогу можно такое сделать? Главная проблема в том что не известно какой тип данных возвращает тот или иной метод и какие параметры требуются для передачи. ну и т.п.
С его помощью можно лишь увидеть интерфейсы, предоставляемые этими библиотеками. Реализацию можно (не всегда) увидеть с помощью Рефлектора: Цитата:
Сообщение от belugin
сборки расковыриваются рефлектором - http://www.aisto.com/roeder/dotnet/
|
|
18.06.2008, 12:18 | #16 |
очами вижу
|
У тебя не получается получить "System.Net.CredentialCache.DefaultCredentials"?
System.Net.CredentialCache - это класс, DefaultCredentials - это его статическое свойство. Попробуй System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials"); |
|
18.06.2008, 12:42 | #17 |
Участник
|
Цитата:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
18.06.2008, 13:52 | #18 |
Участник
|
Пробую получить список объектов.
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 | #19 |
очами вижу
|
С помощью рефлектора можно посмотреть на класс "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 | #20 |
Участник
|
ОЛЕ...ОЛЕ-ОЛЕ-ОЛЕ Россия-молодец
Цитата:
Вроде прорыв, создал массив и сохранил в него значения... и опять руки опускаются( 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. |
|
Теги |
.net, отчет, reporting services |
|
|