|
09.09.2012, 20:15 | #1 |
Участник
|
sumitsaxfactor: Building a simple report – Using Report Data Provider
Источник: http://sumitsaxfactor.wordpress.com/...data-provider/
============== In my previous post, I explained how we can build a simple report using just the AOT queries. Now what if we have some logic that needs to be implemented and cannot be achieved using AOT queries? This is where Report Data Providers plays a significant roles. Let us take the same example of displaying the Customer Id, Name and Balance that was used in post “Build and Deploy Simple Report–Queries”. We can have this report using Report Data Providers as well. For this, we will keep the query and create three more artifacts, RDP, Report and a new Output menu item. First we create a Report Data Provider class named “SKL_SampleReportDP”. Do the following: To create an RDP for a report, we also need a temporary table (if it is Base Provider) or a permanent table (if it is pre process provider). For this sample, we will use CustTmpAccountSum table that is present in base product. Here are the class methods /// /// The SKL_SampleReportDP class is the report data provider class for the /// SKL_SampleSimpleReportQuery report. /// /// /// This is a sample class. Author: Sumit Loya /// [ SRSReportQueryAttribute (querystr(SKL_SampleCustomer))] class SKL_SampleReportDP extends SRSReportDataProviderBase { CustTmpAccountSum tmpAccountSum; } The class declaration contains one attribute “SRSReportQueryAttribute”. This attribute specifies the query that will be used for this report. In case no query is required, this attribute can be removed. There is one other attribute that can be specified on the RDP class and that is SRSReportParameterAttribute. This attribute defines the contract class that will be used to display report parameters. processReport method The processReport method is the entry point for calculating the report data for dataset. Here is the method for our sample class [SysEntryPointAttribute(false)] publicvoid processReport() { this.insertTmpAccountSum(); } insertTmpAccountSum method This is a private method that uses the report query to insert data into the temporary table /// /// This method processes the report query and inserts data into the CustTmpAccountSum temporary table /// privatevoid insertTmpAccountSum() { QueryRun queryRun = new QueryRun(this.parmQuery()); CustTable custTable; while (queryRun.next()) { custTable = queryRun.get(tableNum(custTable)); tmpAccountSum.AccountNum = custTable.AccountNum; tmpAccountSum.Txt = custTable.name(); tmpAccountSum.Balance01 = custTable.openBalanceMST(); tmpAccountSum.insert(); } } getCustTmpAccountSum method This method is mandatory as it returns the table buffer that contains the processed report data. The Dataset uses this buffer to bind the table to the dataset. /// /// This method returns the table buffer that contains processed data /// [SRSReportDataSetAttribute(tableStr(CustTmpAccountSum))] public CustTmpAccountSum getCustTmpAccountSum() { select * from tmpAccountSum; return tmpAccountSum; } After creating the class, go ahead and add a new report the existing report model.
Now using menu item open and run report. You will notice the same dialog The report looks like as shown below: Источник: http://sumitsaxfactor.wordpress.com/...data-provider/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
10.09.2012, 10:13 | #2 |
MCT
|
Простые туторы это кончено здорово в определенном смысле для начала изучения, а вот как быть с печатными формами в ssrs, что-то блогерры в этом случае молчат
__________________
Axapta book for developer |
|
10.09.2012, 12:08 | #3 |
Участник
|
А что не так с печатными формами? Делаются так же как и обычные репорты, диалог с параметрами можно скрыть.
|
|
10.09.2012, 12:23 | #4 |
MCT
|
Ну например та же ТОРГ 12 это либо куча вложенных subreport или логика вынесенная в библиотеку, выделение определенным шрифтом и конкатенация строк.
__________________
Axapta book for developer |
|
10.09.2012, 13:37 | #5 |
Участник
|
subreport кстати аксаптовской библиотекой не поддерживаются.
При добавлении их в отчет он просто начинает валиться. По поводу ТОРГ12. В том виде, в каком она была прежде в Reporting Service ее не сделаешь. Т..е. это ограничение самого движка Reporting Service. в нем никак не получится реализовать такие необходимые вещи как печать итогов-подитогов по странице с раздвижкой строк, требование что на каждой странице должна быть хотя бы одна строка данных и т.д. Для этого надо управлять выводом отчета(то что раньше делалось на ExecuteSection отчета SalesInvoice), а Reporting Service позволяет только задать фиксированную разметку отчета. Думаю те люди которые принимали решение о переводе всего на Reporting Service были просто не в курсе наших ТОРГ12 |
|
10.09.2012, 14:00 | #6 |
Участник
|
См. также сравнение SSRS и стандартных аксаптовских отчетов:
Creating SSRS-Reports in Dynamics AX 2012 – What’s no longer possible in AX-reports (Part I) What’s no longer possible in AX-reports (Part II) What’s no longer possible in AX-reports (Part III) |
|
|
За это сообщение автора поблагодарили: trud (2), MikeR (3). |
10.09.2012, 18:35 | #7 |
Участник
|
Я не в курсе что такое ТОРГ12, думаю разработчики SSRS тоже.
1.Печать итогов, подитогов по странице - без проблем, нужно правильно создать группы и печатать итоги по этим группам. 2. На каждой странице хоть одна строка? Как наполните темповую таблицу, которая будет дасорсом для репорта, так и выведется. Что мешает добивать "фейковые" записи? 3. Управлять выводом? Можно скрывать/показывать какие-то части репорта в зависимости от условий(т.е. управлять видимостью элементов не только через visible = true/false, а использовать условия). Ну и т.д. Последний раз редактировалось greench; 10.09.2012 в 18:40. |
|
10.09.2012, 20:03 | #8 |
Участник
|
Цитата:
Группы тут не особо помогут Хотя да, в каком то ограниченном виде, например жестко зафиксировав число строк на странице и отключив возможность авто увеличения высоты строк можно и группами сделать. Просто раньше то можно было сделать без таких ограничений Последний раз редактировалось trud; 10.09.2012 в 20:24. |
|
10.09.2012, 19:08 | #9 |
Участник
|
Помнится, локальный MS предварительно говорил, что не все печатные формы для русской локализации получится сделать в SSRS. Официально локализация еще не выпущена, но вполне возможно, что часть форм останется (появится) только в виде шаблонных форм MS Office.
__________________
Ivanhoe as is.. |
|
11.09.2012, 10:17 | #10 |
Участник
|
В базовых репортах в 2012 хватает мелких багов. Если есть разница между тем сколько страниц на экране и на принтере/в pdf, то скорее всего разработчики забыли указать размер страницы. Это очень распространенная ошибка.
|
|
|
|