Report Viewer

Having a number of SSRS reports is all well and good, but if the end users can not see the reports it is useless, therefore we need to generate a method of viewing the reports via a small application.

The Report Viewer application will be built using C# .NET 2.0, and is configurable by the Web Services supplied by Reporting Services.
The Reporting Services Web Services is an industry standard way of accessing information via SOAP .

The Web Services supplied by Reporting Services provide an interface in the reporting engine to gain access to the reports and the report inner workings.
By interfacing to the Reporting Services Web Services we can extract the available reports that have been loaded on to the Reporting Services Server.
We can then display a bespoke parameter screen which can capture all that is required before displaying the report, as you can see in Figure 3 - Report Viewer Architecture

See attachment below
Figure 3 - Report Viewer Architecture

When the Report Viewer is loaded it will communicate to the Report Server, which is configurable via the application configuration file, to retrieve a list of available reports and folders.

The reports and folders can then be displayed within the Report Viewer as a list, upon selecting a folder the Report Viewer will then go in to that folder and return a list of reports and folders. It is important to note that only visible objects will be displayed, any objects that have been set to hidden will not be displayed in the Report Viewer. This allows for ancillary objects, like images and data sources, to be hidden from the end users.

Once a report has been selected the parameters for that report are dynamically displayed by the Report Viewer, looking at the parameter list from the Report Server Web Services and generating the required requests.

Once all the parameters have been captured the Report Viewer will make a request to the Report Server via HTML to retrieve the report and pass the parameters, this will allow for the Report Viewer to display the report to the user, who can then elect to either print or export the report is they so desire.

This code is intended to provide viewer for SQL Reporting Services that uses exclusively the SOAP API for rendering. The Viewer will be embedded as a Custom User Controls fragment into the calling form.

This document will help you if you are looking for more control over how you can integrate a report and its parameters into the Report Viewer application that may use different authentication methods than Reporting Services, usually if you want something more than what you already find in the ReportViewer web server control. All prompts for parameters are created dynamically and you can easily apply different formatting or even hide some of them.

Using Report Viewer

Using the Report Viewer is very simple, just supplying the, Report Server WSDL path, the location of the Report Server and if you need to the report folder.

Setting up the application configuration file, follows the Microsoft standard for attaching to Web Services, and providing application parameters, an example of an app.config file is listed below

<add key="ReportServer" value="http://172.24.8.170/ReportServer/" />
<add key="ReportConfiguration" value="%26rc:Parameters=false" />
<add key="ReportURL" value="http://172.24.8.170/ReportServer/Pages/ReportViewer.aspx?{0}%26rs:Command=Render" />
<add key="ReportWebReport" value="true" />
Example C# code for using and calling the Report Viewer:

//Instantiate the object
EH.ReportViewer.Reports r = new EH.ReportViewer.Reports();

//Pass the report folder you wish to start in, if this is not supplied then the root will be used
r.ReportFolder = "/Photonet Reports Project";
//Load a single form, if you leave this out a collection of forms will be displayed
reports.ReportName = ReportName;
//Display the reports
r.DisplayReports();

Key Points

I consider the most interesting point to be the way we can rebuild parameter prompts. This opens the door for customizing these prompts, for example, set a Calendar control for a DateTime parameter, hide some report parameters, or provide values behind the scene.

!!Known Limitations

So far the code does not perform validation. This means that if you submit a blank value for a field that does not accept blank values, the code will not show any validation message.

The Parameter form does expand depending on the number of parameters that are supplied in the report, and depending on your screen size the height may extend beyond the size of the screen.

When a parameter is based from a query it currently is not displayed, as this will be an extension to the currently functionality pf the Report Viewer, and it is currently not required for this release of code.

Last edited Mar 3, 2008 at 4:42 PM by coppermill, version 4