AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Результаты опроса: Нужен ли .Net Аксапте?
Конечно нужен, это ведь дополнительные возможности. 32 84.21%
Все что надо можно через DLL делать и не мучиться. 3 7.89%
Знал бы прикуп жил бы в Сочи. 3 7.89%
Голосовавшие: 38. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2008, 13:46   #21  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от Link Посмотреть сообщение
ИМХО лучше не мучаться, написать dll и уже ее подключить в Аксапту.
Это и в будуещем пригодиться.
Похоже, это наименее болезненный способ. Как я успел выяснить, с делегатами в Аксапте еще хуже, чем с перечислениями. Хоть в данном случае они и не требуются, но выработается общий подход.
Старый 13.06.2008, 14:05   #22  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Thumbs up
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Можно попробовать использовать явное приведение типов (хотя не уверен, что в Аксапте такое пройдет).
Код:
Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1;
Этот способ не работает.

Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Нашел на просторах инета такую фразу: "I do know 4.0 has ClrInterop:: parseClrEnum". Попробуйте использовать его для получения требуемого значения.
А вот так
X++:
Microsoft.Reporting.WebForms.ProcessingMode                 ProcessingMode = ClrInterop::parseClrEnum("Microsoft.Reporting.WebForms.ProcessingMode", "Remote");
инициализируется и в дальнейшем легко устанавливается
X++:
ReportViewer.set_ProcessingMode(ProcessingMode);
Таким образом сообща таки победили .NET

А по поводу dll - я ничего против них не имею, но у них есть неприятное свойство их надо таскать за софтом, при работе на нескольких серверах и множестве клиентских станций бывает очень неудобно. Не дай бог забудешь добавить или перенести.

ЕЩЕ РАЗ ВСЕМ СПАСИБО!!!
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 13.06.2008, 14:19   #23  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
А для делегатов в этом классе нет никаких волшебных функций?
Старый 13.06.2008, 14:24   #24  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
А для делегатов в этом классе нет никаких волшебных функций?
Стыдно признаваться, но я не знаю кто такие делегаты
А класс можно найти в аксапте по адресу АОТ / SystemDocumentation / Classes
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 13.06.2008, 14:30   #25  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 492 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Цитата:
Сообщение от KingPeas Посмотреть сообщение
А по поводу dll - я ничего против них не имею, но у них есть неприятное свойство их надо таскать за софтом, при работе на нескольких серверах и множестве клиентских станций бывает очень неудобно. Не дай бог забудешь добавить или перенести.
Вообщем то можно настроить через
SysFileDeployment, я бы так и делал дабы сэкономить время. Мало ли что понадобится сделать в будующем. Если таки прийдется добавлять dll, то будет жалко потраченного времени.
А с серьезными интеграциями без dll-ок трудно обойтись.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 13.06.2008, 14:33   #26  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от KingPeas Посмотреть сообщение
Стыдно признаваться, но я не знаю кто такие делегаты
А класс можно найти в аксапте по адресу АОТ / SystemDocumentation / Classes
Делегаты - это указатели на функции (методы объектов либо статические функции). Используются для реакции на события. Многие объекты предоставляют пользователю события (event), на которые можно подписываться с помощью соответствующего делегата.

Например, нажатие кнопки в .NET - это событие, на которое можно подписаться любому объекту (не только форме).

Посмотрел справку, действительно, ничего для этого механизма в Аксапте не предусмотренно. Печально . Интересно, как реализованы эти CLRInterop:: parseClrEnum и CLRInterop::staticInvoke, но смогу посмотреть на это еще не скоро - мы еще Аксапту не купили
Старый 13.06.2008, 14:46   #27  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Post
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Делегаты - это указатели на функции (методы объектов либо статические функции). Используются для реакции на события. Многие объекты предоставляют пользователю события (event), на которые можно подписываться с помощью соответствующего делегата.

Например, нажатие кнопки в .NET - это событие, на которое можно подписаться любому объекту (не только форме).

Посмотрел справку, действительно, ничего для этого механизма в Аксапте не предусмотренно. Печально ...
Понял о чем речь) Ну что же, в том же ReportViewer попадались на глаза методы с префиксом add_Load, add_Init, add_Back и так далее) Так что думаю поддержка есть) Возможно только не у всех и не для всего. Пока нет особой потребности разбираться с ними, но думаю в будущем обязательно пригодится)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 17.06.2008, 09:51   #28  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Друзья еще один вопросик. Получил доступ к параметрам отчета через ReportViewer(.net), для списка доступных отчетов пользуюся классом SRSProxy(DAX). Вот только обращение к SRSProxy приводит к тому что нужно дожидаться соединения с сервером. После того как соединение установлено все работает очень быстро. То же самое с подключением к ReportViewer, сначала надо подождать, а потом можно работать спокойно. Нельзя ли это как то перевести на одни рельсы, чтобы не подключаться через два разных подключения? Среди доступных методов в ReportViewer не нашел способа как считать список узлов в каталогах. Не хочется делать все это через dll, кто знает модель RS подскажите где искать.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 17.06.2008, 12:50   #29  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Каким образом ты пользуешься SRSProxy? Я просто не знаю, какие методы определения доступных отчетов он предоставляет.

Сейчас нарыл в справке вот такую функцию:
http://msdn.microsoft.com/en-us/libr...arameters.aspx
Единственное, чего я не понял в приведенном в справке примере - это указания сервера SRS.

Как ни странно, у меня этот класс (Microsoft.SqlServer.ReportingServices2005.ReportingService2005) находится в сборке "Microsoft.ReportingServices.Diagnostics.dll".
Старый 17.06.2008, 13:09   #30  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Каким образом ты пользуешься SRSProxy? Я просто не знаю, какие методы определения доступных отчетов он предоставляет.

Сейчас нарыл в справке вот такую функцию:
http://msdn.microsoft.com/en-us/libr...arameters.aspx
Единственное, чего я не понял в приведенном в справке примере - это указания сервера SRS.
Справка мне эта в BOL попадалась. В примерах все понятно как использовать, вот только в аксапте на эту сборку попасть я не могу(
А сервер SRSProxy - это аксаптовская оболочка для опубликования моделей на сервере отчетов.
// declare class members
COM reportingServicesProxy;
а вот так он инициализируется
#define.ProxyClass("Microsoft.Dynamics.ReportingServices.Proxy")
reportingServicesProxy = new COM(#ProxyClass);
любопытно что это очень напоминает .Net

Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Как ни странно, у меня этот класс (Microsoft.SqlServer.ReportingServices2005.ReportingService2005) находится в сборке "Microsoft.ReportingServices.Diagnostics.dll".
Сборку нашел, а метода в нем такого в аксе нет доступного
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 17.06.2008, 13:35   #31  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Сейчас открыл сборку "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   #32  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
У объекта класса 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   #33  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
У объекта класса [b]Microsoft.Dynamics.ReportingServices.ReportingService2005, то инициализация будет только одна.
Ну просто замечательно)
Можно только поинтересоваться, ты до этого выкладывал картинку где было видно всю подноготную объекта сборки. Через какую прогу можно такое сделать? Главная проблема в том что не известно какой тип данных возвращает тот или иной метод и какие параметры требуются для передачи. ну и т.п.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 18.06.2008, 08:31   #34  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
У объекта класса
public Microsoft.Dynamics.ReportingServices.CatalogItem[ ] ListChildren(string Item, bool Recursive)
кто-нибудь в курсе как в аксапте получать объект массив элементов (CatalogItem[ ])? Сам элемент для обработки доступен в сборке, а вот как получить массив объектов пока не догадываюсь?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 18.06.2008, 10:45   #36  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от KingPeas Посмотреть сообщение
Можно только поинтересоваться, ты до этого выкладывал картинку где было видно всю подноготную объекта сборки. Через какую прогу можно такое сделать? Главная проблема в том что не известно какой тип данных возвращает тот или иной метод и какие параметры требуются для передачи. ну и т.п.
В Visual Studio есть инструмент "Object Browser" (находится в меню "View" -> "Object Browser"). В нем можно указать "Custom Component Set" и указать список интересующих тебя сборок/библиотек.
С его помощью можно лишь увидеть интерфейсы, предоставляемые этими библиотеками. Реализацию можно (не всегда) увидеть с помощью Рефлектора:
Цитата:
Сообщение от belugin Посмотреть сообщение
сборки расковыриваются рефлектором - http://www.aisto.com/roeder/dotnet/
Старый 18.06.2008, 10:49   #37  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от KingPeas Посмотреть сообщение
кто-нибудь в курсе как в аксапте получать объект массив элементов (CatalogItem[ ])? Сам элемент для обработки доступен в сборке, а вот как получить массив объектов пока не догадываюсь?
Я так понимаю, проблема в указании типа переменной, в которую необходимо поместить возвращаемое ListChildren значение?
Может, попробовать тип "CLRObject"? Это же тоже классы и у них должны быть методы (get_Length, GetValue).

Любой типизированный .NET массив - наследник от System.Array, поэтому можно пользоваться методами родителя. Неясность одна - как в Аксапте использовать приведение типов.

PS. Похоже, для приведения типов можно использовать CLRInterop::getAnyTypeForObject и CLRInterop::getObjectForAnyType .

Последний раз редактировалось RumataEstor; 18.06.2008 в 11:25.
Старый 18.06.2008, 12:00   #38  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Есть еще одна проблема.
Когда пытаешься получить значение
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";
Первый шаг пройден. Теперь застрял на втором шаге при определении прав. Объект System.Net.CredentialCache существует, но методов для получения текущих установок нет.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 18.06.2008, 12:18   #39  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
У тебя не получается получить "System.Net.CredentialCache.DefaultCredentials"?

System.Net.CredentialCache - это класс, DefaultCredentials - это его статическое свойство.
Попробуй
System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials");
Старый 18.06.2008, 12:42   #40  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
System.Net.CredentialCache - это класс, DefaultCredentials - это его статическое свойство.
Попробуй
System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials");
Действительно так заработало) Еще раз огромное спасибо) теперь буду массивы мучать, пока не проходится)))
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Теги
.net, отчет, reporting services

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
jinx: Microsoft Dynamics AX - X++ und .NET (CLR) Arrays Blog bot DAX auf Deutsch 0 03.03.2009 03:08
Dynamics AX: Vista, IIS 7 and .Net BC Blog bot DAX Blogs 0 14.06.2007 10:00
Dynamics AX: .Net BC Custom App, One Step Back! [Connection] Blog bot DAX Blogs 0 07.06.2007 22:41
Что сделать, чтобы связанные Data Source обновились? Maxim Gorbunov DAX: Программирование 4 11.04.2005 17:40
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:06.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.