I'm very new to SSRS and SharePoint, We deployed the reports in SharePoint location, often some of the Reports doesn't have connection string. For this in order to ensure, I need to get all reports from SharePoint location using c# WPF and check the connection strings of all the reports.
I believe all of the SSRS versions after 2005 have a SOAP web service that can be accessed and provide what you need. C# should be able to read that (or you can render client side if it's faster for you to code). The GetDataSourceContents is the element to look for. Here's the 2008 documentation for that.
You can find Microsoft's full end point specs for 2008 here. There should be a directory with reportservice2008.asmx (or ...2006 for SharePoint if you believe this discussion). Here's the documentation on how to add the service reference to Visual Studio.
Here's a piece of code that i think it might work for you
/// <summary>
/// Handles frequently used functionalities in ReportViewer Controls to display SSRS reports locally.
/// </summary>
public class SSRSReport
{
private static String GetReportServerURL()
{
DataTable datatable = new DataTable();
//Execute the stored procedure to get the Report Server URL from the database.
DBConnect.FillDataTable("GetSSRSReportServerURL", datatable, null);
if (datatable == null || datatable.Rows.Count == 0)
return null;
else
return datatable.Rows[0]["PARAMETER_VALUE"].ToString().Trim();
}
/// <summary>
/// Open the SSRS report based on the name of the report specified.
/// </summary>
/// <param name="reportViewer">ReportViewer
/// object used to render the SSRS report on screen.</param>
/// <param name="reportPath">Name of the Report
/// (.rdl) data uploaded on the server.</param>
public static void DisplayReport(ReportViewer reportViewer, String reportPath)
{
try
{
reportViewer.ProcessingMode = ProcessingMode.Remote;
ServerReport serverreport = reportViewer.ServerReport;
ICredentials credentials = CredentialCache.DefaultCredentials;
ReportServerCredentials rscredentials = serverreport.ReportServerCredentials;
rscredentials.NetworkCredentials = credentials;
serverreport.ReportServerUrl = new Uri(GetReportServerURL());
serverreport.ReportPath = reportPath;
reportViewer.ShowParameterPrompts = false;
reportViewer.ShowPrintButton = true;
reportViewer.Refresh();
reportViewer.SetDisplayMode(DisplayMode.PrintLayout);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Open the SSRS report based on the name of the report and Report Parameters specified.
/// </summary>
/// <param name="reportViewer">ReportViewer
/// object used to render the SSRS report on screen.</param>
/// <param name="reportPath">Name of the Report
/// (.rdl) data uploaded on the server.</param>
/// <param name="reportParameterList">
/// List of Report parameters.</param>
public static void DisplayReport(ReportViewer reportViewer,
String reportPath, List<ReportParameter> reportParameterList)
{
try
{
reportViewer.ProcessingMode = ProcessingMode.Remote;
ServerReport serverreport = reportViewer.ServerReport;
ICredentials credentials = CredentialCache.DefaultCredentials;
ReportServerCredentials rscredentials = serverreport.ReportServerCredentials;
rscredentials.NetworkCredentials = credentials;
serverreport.ReportServerUrl = new Uri(GetReportServerURL());
serverreport.ReportPath = reportPath;
reportViewer.ShowParameterPrompts = false;
reportViewer.ShowPrintButton = true;
if (reportParameterList != null)
{
foreach (ReportParameter param in reportParameterList)
{
serverreport.SetParameters(param);
}
}
reportViewer.Refresh();
reportViewer.SetDisplayMode(DisplayMode.PrintLayout);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Convert the SSRS report on the local report viewer to an Attachment.
/// This can be used to attach the PDF to an email.
/// </summary>
/// <param name="reportViewer">ReportViewer control.</param>
/// <param name="fileName">Name of the PDF data.</param>
/// <returns>PDF File as an Attachment that
/// can be attached to an email using SMTPClient.</returns>
public static Attachment ConvertToPDFAttachment(ReportViewer reportViewer, String fileName)
{
try
{
byte[] data;
if (reportViewer.ServerReport != null)
data = reportViewer.ServerReport.Render("PDF");
else
data = reportViewer.LocalReport.Render("PDF");
Attachment att = new Attachment(new MemoryStream(data), fileName);
return att;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Saves the report from the local reportViewer as PDF.
/// To execute this method, the reportviewer needs to already contain the SSRS report.
/// </summary>
/// <param name="reportViewer">ReportViewer
/// control that displays the report.</param>
/// <param name="filePath">Path of the file
/// to which the report should be stored as PDF.</param>
/// <returns>True,if saved successfully ; False,otherwise.</returns>
public static Boolean SaveAsPDF(ReportViewer reportViewer, String filePath)
{
try
{
byte[] data;
if (reportViewer.ServerReport != null)
data = reportViewer.ServerReport.Render("PDF");
else
data = reportViewer.LocalReport.Render("PDF");
FileStream fs = new FileStream(filePath, FileMode.Create);
fs.Write(data, 0, data.Length);
fs.Close();
return true;
}
catch(Exception)
{
throw;
}
}
/// <summary>
/// Saves the report from the SSRS Report Server as PDF.
/// </summary>
/// <param name="reportViewer">ReportViewer
/// control that displays the report.</param>
/// <param name="filePath">Path of the file
/// to which the report should be stored as PDF.</param>
/// <param name="reportPath">Name of the Report
/// (.rdl) data uploaded on the server.</param>
/// <returns>True,if saved successfully ; False,otherwise.</returns>
public static Boolean SaveAsPDF(ReportViewer reportViewer, String filePath, String reportPath)
{
try
{
DisplayReport(reportViewer, reportPath);
byte[] data;
if (reportViewer.ServerReport != null)
data = reportViewer.ServerReport.Render("PDF");
else
data = reportViewer.LocalReport.Render("PDF");
FileStream fs = new FileStream(filePath, FileMode.Create);
fs.Write(data, 0, data.Length);
fs.Close();
return true;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Saves the report from the SSRS Report Server as PDF.
/// </summary>
/// <param name="reportViewer">ReportViewer
/// control that displays the report.</param>
/// <param name="filePath">Path of the file
/// to which the report should be stored as PDF.</param>
/// <param name="reportPath">Name of the Report
/// (.rdl) data uploaded on the server.</param>
/// <param name="reportParameterList">List of Report parameters.</param>
/// <returns>True,if saved successfully ; False,otherwise.</returns>
public static Boolean SaveAsPDF(ReportViewer reportViewer,
String filePath, String reportPath, List<ReportParameter> reportParameterList)
{
try
{
DisplayReport(reportViewer, reportPath,reportParameterList);
byte[] data;
if (reportViewer.ServerReport != null)
data = reportViewer.ServerReport.Render("PDF");
else
data = reportViewer.LocalReport.Render("PDF");
FileStream fs = new FileStream(filePath, FileMode.Create);
fs.Write(data, 0, data.Length);
fs.Close();
return true;
}
catch (Exception)
{
throw;
}
}
}
how this class can be used:
public class SSRSReportViewer
{
private ReportViewer _reportViewer;
//Display Report with NO parameters.
SSRSReport.DisplayReport(_reportViewer, ReportPath);
//Display Report WITH Parameters.
List<ReportParameter> paramList = new List<ReportParameter>();
paramList.Add(new ReportParameter("param1", param1);
paramList.Add(new ReportParameter("param2", param2);
SSRSReport.DisplayReport(_reportViewer, ReportPath ,paramList);
//Convert the Report to PDF Attachment.
//This Attachment object can be used along with SMTPClient
//object to send the report as a PDF attachment with an email.
Attachment att = SSRSReport.ConvertToPDFAttachment(this._reportViewer, fileName);
//Save Report with NO parameters already displayed on the reportViewer as PDF.
SSRSReport.SaveAsPDF(_reportViewer, filePath);
//Save Report with NO Parameters as PDF without displaying it in the ReportViewer.
SSRSReport.SaveAsPDF(_reportViewer, filePath, ReportPath);
//Save the Report WITH parameters as PDF.
SSRSReport.SaveAsPDF(_reportViewer, filePath, ReportPath, paramList);
}
Source
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With