Sunday 25 September 2011

Copy SSRS Report using ReportingService

Copy SSRS Report using ReportingService.CreateCatalogItem() method


This post explains about programmatically copying a existing SSRS report (which is deployed on the report server) using Reporting Services Web service.
PreRequisite : You must have SSRS(SQL Server Reporting Services) installed so that you can use Reporting web services provided by SSRS.

Step 1: Add Reference to Web Service()
The first thing you need to do is add a Web reference to the Reporting Services Web service in your development project that points to your report server. 
To do so right-click on your project in Visual Studio and choose Add Service reference... .Then Click on Advanced  and then "Add Web Reference.." 

Provide report server URL (in my case http://localhost/reportserver/ReportService2010.asmx). If you have a remote report server, simply change the URL of the Web reference. The end point for any Reporting Services Web service is http://servername/reportserver/ReportService2010.asmx.
Provide service reference name(i provided "ExecutionService" as reference name) and click on Add.

Step 2: Using  ReportingService.CreateCatalogItem method To create new Report
 Here i am going to copy a report named "EmployeeReport" (deployed at report server in TestReports folder) and create a new copied report from it named "CopiedEmployeeReport" inside "TestSSRSProject" folder....
//create proxy object
ReportingService.ReportingService2010 rs = new ReportingService.ReportingService2010();
//set credentials and URL for reporting service.
rs.Credentials = Net.CredentialCache.DefaultNetworkCredentials;

//Provide path of report to be copied(source report)
string _reportPath = "";
_reportPath = "/TestReports/EmployeeReport";

//Report definition of report to be copied..
Byte[] reportDefinition = null;
reportDefinition = rs.GetItemDefinition(_reportPath);
ReportingService.DataSource[] ds = null;
ds = rs.GetItemDataSources(_reportPath);

ReportingService.Warning[] warnings = null;

//Create new report from report definition obtained in previous step and set datasource.
ReportingService.CatalogItem copiedReport = rs.CreateCatalogItem("Report", "CopiedEmployeeReport", "/TestSSRSProject", false, reportDefinition, null, warnings);

rs.SetItemDataSources("/TestSSRSProject/CopiedEmployeeReport", ds);
Similarly you can create a new report using rs.CreateCatalogItem() method..
Let me know if you need any help...