Я очень новичок в SSRS и SharePoint. Мы развернули отчеты в местоположении SharePoint, часто в некоторых из отчетов нет строки подключения. Для этого, чтобы обеспечить, мне нужно получить все отчеты из местоположения SharePoint с помощью С# WPF и проверить строки подключения всех отчетов.
Как получить все отчеты SSRS из URL-адреса Sharepoint?
Ответ 1
Я считаю, что все версии SSRS после 2005 года имеют веб-службу SOAP, к которой можно получить доступ, и предоставить то, что вам нужно. С# должен иметь возможность читать это (или вы можете отображать на стороне клиента, если это быстрее для вашего кода). GetDataSourceContents - это элемент, который нужно искать. Ниже приведена документация 2008 года.
Вы можете найти спецификации полной конечной точки Microsoft для 2008 здесь. Должен быть каталог с reportervice2008.asmx(или... 2006 для SharePoint, если вы считаете это обсуждение). Ниже представлена документация о том, как добавить ссылку на службу в Visual Studio.
Ответ 2
Вот фрагмент кода, который, я думаю, может сработать для вас
/// <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;
}
}
}
как можно использовать этот класс:
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);
}
Ответ 3
, как уже было сказано, проще использовать webservice:
- case 1: вы хотите перечислить весь отчет
- используйте функцию "CatalogItem()"
- в любом месте, и вы можете выбрать пользователя
- case 2: вы точно знаете, какой отчет для запуска или пользователя выбрали (например, нажав элемент), чтобы отобразить
- тогда это простой вызов:
http://YOUR_REPORTING_SERVER_URL?/PATH_TO_SPECIFIC_REPORT/REPORT_NAME&rs:Command=Render&rs:Format=EXCEL&ADDITIONNAL_PARAMETER1=VALUE
- тогда это простой вызов:
Примечание: rs: Формат здесь настроен для экспорта Excel (вы также можете определить pdf и т.д.). Позвольте службе отчетности выполнить эту работу за вас. Не хотите экспортировать, пропустите этот параметр, чтобы открыть службу отчетов в навигационном проводнике.