Как получить все отчеты SSRS из URL-адреса Sharepoint?

Я очень новичок в SSRS и SharePoint. Мы развернули отчеты в местоположении SharePoint, часто в некоторых из отчетов нет строки подключения. Для этого, чтобы обеспечить, мне нужно получить все отчеты из местоположения SharePoint с помощью С# WPF и проверить строки подключения всех отчетов.

Ответ 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 и т.д.). Позвольте службе отчетности выполнить эту работу за вас. Не хотите экспортировать, пропустите этот параметр, чтобы открыть службу отчетов в навигационном проводнике.