Зарегистрироваться | Сообщения за день | Поиск | Все разделы прочитаны |
Результаты опроса: Нужен ли .Net Аксапте? | |||
Конечно нужен, это ведь дополнительные возможности. | 32 | 84.21% | |
Все что надо можно через DLL делать и не мучиться. | 3 | 7.89% | |
Знал бы прикуп жил бы в Сочи. | 3 | 7.89% | |
Голосовавшие: 38. Вы ещё не голосовали в этом опросе |
|
Опции темы |
05.06.2008, 13:57 | #1 |
Участник
|
Покорить .NET в DAX чтобы сделать ручным ReportingServices
Здравствуйте уважаемые.
Обращаюсь с таким вопросом: Надумал в DAX организовать увязку некоторых свойств для настройки отчетов на ReportingServer. Сразу прошу не надо обсуждать зачем нам это надо, так надо) Суть в том что не знаю как получить список доступных отчетов, список параметров в отчете и т.д. После копания в документации закралась мысль что все это можно осуществлять через .NET. Опять же копаемся в документации находим примеры как работать с .Net наподобие вот этого: X++: static void MyFirstCLR(Args _args) { MyFirstCLR.MyClass mc; str s; int res; ; mc = new MyFirstCLR.MyClass(); s = mc.sayRocks(); print s; res = mc.average(20,22); print res; pause; } [/color] X++: Microsoft.ReportingServices parm = new Microsoft.ReportingServices(); Код: Переменная не относится к типу CLASS. X++: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel obj = new
Microsoft.ReportingServices.ReportProcessing.ReportObjectModel.ObjectModel(); Код: Класс не содержит эту функцию.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
09.06.2008, 11:13 | #2 |
Участник
|
Люди добрые, что же никто не работал с .Net? В документации по RS я нашел нужную сборку, но как ее подключить если ее нет в списке по умолчанию не знаю
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
09.06.2008, 12:04 | #3 |
очами вижу
|
К сожалению, я не работал с ReportingServices, но у вас, по-моему, проблем более общая.
Не очень понятно, что вы собственно хотите сделать. Для начала, необходимо подключить нужную сборку. Как мне кажется, если вы хотите работать с ReportServices, то вам нужны сборки типа "Microsoft.ReportingServices.*", справку по которым вы можете найти по адресу http://msdn.microsoft.com/en-us/library/bb326309.aspx Если же вы хотите работать с "Microsoft.ReportViewer.*", то вам, наверное, следует смотреть на пространства имен "Microsoft.ReportViewer.WebForms" или "Microsoft.ReportViewer.WinForms", в которых вы можете найти классы "Microsoft.Reporting.WebForms.ReportViewer" и "Microsoft.Reporting.WinForms.ReportViewer" соответственно. По ним справку можно найти здесь: http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx Сборки в этом случае уже "Microsoft.ReportViewer.WinForms.dll" и "Microsoft.ReportViewer.WebForms.dll" |
|
|
За это сообщение автора поблагодарили: KingPeas (1). |
09.06.2008, 12:23 | #4 |
очами вижу
|
Насколько я понял, в аксапте отображать .NET контролы отображать пока нереально, так что, если вы хотите показывать отчет в Аксапте, то следует использовать "Microsoft.Reporting.WebForms.ReportViewer".
UPD. В принципе, можно создать обычную System.Windows.Forms.Form, на которую поместить Microsoft.Reporting.WinForms.ReportViewer. Будет выглядеть как обычное окно, только снаружи от окна Аксапты. Последний раз редактировалось RumataEstor; 09.06.2008 в 12:44. |
|
09.06.2008, 13:13 | #5 |
Участник
|
можно написать свою ActiveX обертку. Пример http://erpkb.com/Axapta/JelementUpra...l'zovanija
|
|
11.06.2008, 21:11 | #6 |
Британский учённый
|
Цитата:
Сообщение от RumataEstor
Насколько я понял, в аксапте отображать .NET контролы отображать пока нереально, так что, если вы хотите показывать отчет в Аксапте, то следует использовать "Microsoft.Reporting.WebForms.ReportViewer".
UPD. В принципе, можно создать обычную System.Windows.Forms.Form, на которую поместить Microsoft.Reporting.WinForms.ReportViewer. Будет выглядеть как обычное окно, только снаружи от окна Аксапты. Я это делал для 4-ки. Кстати в 5-ке много чего нового добавили в BI и отчеты. Но я на практике еще не пробовал. Делал и форму как Вы говорите, но неудобно, если что то поменять нужно. Да и ограничения на фильтры. Думаю можно сделать, что то универсальное чтобы умело параметры читать, показывать и обрабатывать их в генерируемых контролах, но это имхо через чур Я с SSRS поработал только месяц. Вещь неплохая для некоторых решений. Плохо что не всегда можно через Perspectives сделать отчет, особенно если нужно много фильтров или они мудренные. Приходится тогда делать в VS. Но если хорошие навыки SQL и немного опыта, то получается быстрее и нагляднее делать чем в АХ.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
12.06.2008, 14:33 | #7 |
Участник
|
Спасибо всем за активное участие, вот только ушли куда то в сторону от обсуждения)
Попробую все таки объяснить чего я добиваюсь. В VS сделал отчет, достаточно сложный с большим числом параметров. На исполнение он запускается с различным сочетанием этих параметров. В итоге идеально подходит механизм управляемых подписок используемый службой RS2005. Для генерации отчетов по подписке используется таблица из аксапты. В ней хранятся все необходимые данные для запуска отчета. Все это уже отлажено и работает. Кстати вывод в аксапту тоже реализован через ReportViewer(все благодаря помощи на форуме, в том числе уважаемого belugin-а), но это только для случаев запуска одного, а не нескольких отчетов одновременно. Для заполнения подписок, а также для генерации отчетов используется наследник RunBase. Делал это с умыслом, пользователи получают знакомый интерфейс для генерации отчета (добавились только два поля в каком формате отчет, и сгенерировать его или добавить в подписку). Таким образом все отчеты которые переводим на RS изменяем свойство Extends на новый класс и перекрываем пару методов определяющие в какой параметр чего сохранять. Думаю еще переделаю, пока работает так. Добавление в подписку сводится просто к добавлению записи в таблицу аксапты, которую использует RS2005 для обработки управляемых подписок. Теперь непосредственно над чем я сейчас бьюсь). Нашел в AOT класс SRSProxy. Он через COM позволяет получить данные о сервере отчетов и список его элементов. Таким образом я могу получить такую информацию как список всех отчетов на сервере. Создал две таблицы: Первая содержит связь между кодом класса (который добавляет данные в таблицу параметров подписки в аксапте) и путем к отчету(уникальный путь на RS2005) для которого создаются подписки в аксапте; Вторая таблица должна содержать привязку между полями таблицы параметров подписки в аксапте и названиями параметров в самом отчете на RS2005. Получаем этакую настроечную таблицу. Планирую что в дальнейшем потихоньку и другие отчеты будут перетаскиваться на RS. Таким образом пытаюсь получить хоть какую то гибкость в настройке связей между параметрами подписок в аксапте и параметрами в отчетах на RS. И вот тут то и встает вопрос как мне получить список параметров отчета на RS2005? В документации по SQL BOL содержит несколько примеров для получения данных. Вот шаги которые я для себя уяснил: 1) Получить новый экземпляр ReportingService 2) Указать путь к серверу и права 3) Найти отчет 4) получить коллекцию параметров 5) перебрать параметры и получить нужную информацию. Сколько не копался в сборках .NET не нашел ни одного метода как пройти даже первый шаг. Так что надеюсь на вашу помощь.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
12.06.2008, 17:05 | #8 |
Британский учённый
|
Уточните пожалуйста, как Вы хотите реализовать задачу, только средствами Аксапты или в стороннем приложение?
Приложил пример кода на C#, не уверен что тоже самое можне реализовать напрямую в Аксапте.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. Последний раз редактировалось Link; 12.06.2008 в 17:30. |
|
|
За это сообщение автора поблагодарили: KingPeas (1). |
12.06.2008, 18:15 | #9 |
очами вижу
|
Цитата:
Сообщение от KingPeas
И вот тут то и встает вопрос как мне получить список параметров отчета на RS2005? В документации по SQL BOL содержит несколько примеров для получения данных. Вот шаги которые я для себя уяснил:
1) Получить новый экземпляр ReportingService 2) Указать путь к серверу и права 3) Найти отчет 4) получить коллекцию параметров 5) перебрать параметры и получить нужную информацию. Сколько не копался в сборках .NET не нашел ни одного метода как пройти даже первый шаг. Так что надеюсь на вашу помощь. Из представленных выше примеров видно, что описание параметров отчета можно получить из объекта класса ServerReport, который вручную создать невозможно. Поэтому, чтобы получить список параметров необходимо:
Еще хочу заметить, что для использования ReportViewer нужна сборка Microsoft.ReportViewer.WebForms.dll Последний раз редактировалось RumataEstor; 12.06.2008 в 18:19. |
|
12.06.2008, 18:27 | #10 |
Британский учённый
|
Цитата:
Сообщение от RumataEstor
Из представленных выше примеров видно, что описание параметров отчета можно получить из объекта класса ServerReport, который вручную создать невозможно. Поэтому, чтобы получить список параметров необходимо:
1. Создать Microsoft.Reporting.WebForms.ReportViewer. 2. Установить его свойства на ваш отчет: .ProcessingMode = ProcessingMode.Remote; .ServerReport.ReportServerUrl = new Uri("http://ваш ури"); .ServerReport.ReportPath = "/ваш путь отчета". 3. Получить список параметров с помощью метода ServerReport.GetParameters(). Возможно ситуация поменялась в 5.0, где интеграция более тесная. Или может как то через веб сервисы можно получать.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
12.06.2008, 19:05 | #11 |
очами вижу
|
Лично я не вижу связи между .NET классами и версией Axapta. В Axapta может поменяться способ использования сборок (например, вводом ключевого слова using и необязательностью полного квалификатора класса), но никак не интерфейс предоставляемый сборкой.
|
|
12.06.2008, 19:17 | #12 |
Британский учённый
|
Имелось в виду возможность реализации тех примеров, что я приложил, напрямую в DAX 4.0.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
12.06.2008, 19:48 | #13 |
очами вижу
|
Цитата:
То, что в C# можно написать Код: using Microsoft.Reporting.WebForms; ... var report = new ReportViewer(); Код: Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer(); |
|
12.06.2008, 20:13 | #14 |
Британский учённый
|
Цитата:
Сообщение от RumataEstor
Опять же, не вижу разницы, из C# их использовать или из Аксапты. Подключил сборку, создал объект нужного класса и получил результат.
То, что в C# можно написать Код: using Microsoft.Reporting.WebForms; ... var report = new ReportViewer(); Код: Microsoft.Reporting.WebForms.ReportViewer report = new Microsoft.Reporting.WebForms.ReportViewer();
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
12.06.2008, 20:35 | #15 |
очами вижу
|
Цитата:
|
|
13.06.2008, 09:04 | #16 |
Участник
|
Ура у меня заработало) Спасибо всем за помощь, а особенно:
Цитата:
Сообщение от RumataEstor
...
Поэтому, чтобы получить список параметров необходимо:
Еще хочу заметить, что для использования ReportViewer нужна сборка Microsoft.ReportViewer.WebForms.dll X++: static void RSGetReportParameter(Args _args) { Microsoft.Reporting.WebForms.ReportViewer ReportViewer = new Microsoft.Reporting.WebForms.ReportViewer(); Microsoft.Reporting.WebForms.ProcessingMode ProcessingMode; Microsoft.Reporting.WebForms.ServerReport ServerReport; Microsoft.Reporting.WebForms.ReportParameterInfoCollection ParameterCollection; Microsoft.Reporting.WebForms.ReportParameter ReportParameter; System.Uri url = new System.Uri('http://ax-dev/ReportServer'); int i; int parmNum; str name; ; //ReportViewer.set_ProcessingMode(?*?); Как установить не знаю по умолчанию Local ServerReport = ReportViewer.get_ServerReport(); ServerReport.set_ReportServerUrl(url); ServerReport.set_ReportPath('/ABCD_New/ABCD_New'); ParameterCollection = ServerReport.GetParameters(); parmNum = ParameterCollection.get_Count(); info (strfmt('Всего параметров: %1', parmnum)); for (i = 0; i < parmNum; i++) { ReportParameter = ParameterCollection.get_Item(i); name = ReportParameter.get_Name(); info (strFmt("%1 - %2",i,name)); } info('Конец списка'); }
Насколько это критично если я использую не Remote а Local подключение? И есть идеи как его установить?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
|
За это сообщение автора поблагодарили: iCloud (2). |
13.06.2008, 13:08 | #17 |
очами вижу
|
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.
По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например Код: Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1; |
|
13.06.2008, 13:22 | #18 |
Участник
|
Цитата:
Сообщение от RumataEstor
Да, совсем забыл, что в Аксапте нет свойств и их необходимо использовать как методы. Но вы и сами с этим разобрались.
По поводу перечислений. Перечисление - на самом деле число. Обычно, класса System.Int32. Перечисления поддерживают явное приведение типов, например Код: Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1; X++: ReportViewer.set_ProcessingMode(1);
X++: ReportViewer.set_ProcessingMode(ProcessingMode); Как я писал ранее в Аксапте нет доступных методов для его установки
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ. |
|
13.06.2008, 13:27 | #19 |
Британский учённый
|
ИМХО лучше не мучаться, написать dll и уже ее подключить в Аксапту.
Это и в будуещем пригодиться.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: RumataEstor (1). |
13.06.2008, 13:44 | #20 |
очами вижу
|
Можно попробовать использовать явное приведение типов (хотя не уверен, что в Аксапте такое пройдет).
Код: Microsoft.Reporting.WebForms.ProcessingMode remoteMode = (Microsoft.Reporting.WebForms.ProcessingMode)1; Последний раз редактировалось RumataEstor; 13.06.2008 в 13:47. |
|
Теги |
.net, отчет, reporting services |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|