Программный экспорт отчета SSRS из sharepoint с использованием ReportService2010.asmx

Я должен программно экспортировать отчеты ssrs, чтобы преуспеть, добавлен сервис ссылки на

Http:/siteurl/_vti_bin/ReportServer/ReportService2010.asmx

Http:/siteurl/_vti_bin/ReportServer/ReportExecution2005.asmx

Может кто-нибудь предоставить рабочий блог

1 ответ

Я делаю это для моей работы с VS 2012 .NET 4.5 для автоматизации создания отчетов для отчетов в формате PDF.

О. Для простоты использования компилирование собственного прокси-класса проще, чем обращение к веб-службе каждый раз, поскольку вы можете забыть имя службы.

Из командной строки Visual Studio:

    wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2010" http://<Server Name>/reportserver/reportservice2010.asmx?wsdl

ссылка: http://msdn.microsoft.com/en-us/library/ms155134(v=sql.105).aspx (вам нужны службы: ReportExecution2005 и ReportService2010, только если вы хотите получить информацию и выполнить. Если вы только хотите для рендеринга нужно просто ReportExecution2005)

Б. Как только вы создадите свой прокси-класс, поместите его в проект библиотеки для повторного использования IMHO. Создайте, возможно, несколько классов-оболочек для записи и несколько серверов в файле конфигурации, на которые вы можете ссылаться, если у вас несколько сред.

C. Напишите некоторый код, ссылающийся на библиотеку, и создайте первый отчет на C#:

    using System;
    using System.IO;
    using System.Web.Services.Protocols;
    using myNamespace.MyReferenceName;  // YOUR PROXY PROJECT 

    class Sample
    {
    static void Main(string[] args)
    {
        ReportExecutionService rs = new ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rs.Url = "http://myserver/reportserver/ReportExecution2005.asmx";

        // Render arguments
        byte[] result = null;
        string reportPath = "/AdventureWorks Sample Reports/Employee Sales Summary";
        string format = "MHTML";
        string historyID = null;
        string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

        // Prepare report parameter.
        ParameterValue[] parameters = new ParameterValue[3];
        parameters[0] = new ParameterValue();
        parameters[0].Name = "EmpID";
        parameters[0].Value = "288";
        parameters[1] = new ParameterValue();
        parameters[1].Name = "ReportMonth";
        parameters[1].Value = "6"; // June
        parameters[2] = new ParameterValue();
        parameters[2].Name = "ReportYear";
        parameters[2].Value = "2004";

        DataSourceCredentials[] credentials = null;
        string showHideToggle = null;
        string encoding;
        string mimeType;
        string extension;
        Warning[] warnings = null;
        ParameterValue[] reportHistoryParameters = null;
        string[] streamIDs = null;

        ExecutionInfo execInfo = new ExecutionInfo();
        ExecutionHeader execHeader = new ExecutionHeader();

        rs.ExecutionHeaderValue = execHeader;

        execInfo = rs.LoadReport(reportPath, historyID);

        rs.SetExecutionParameters(parameters, "en-us"); 
        String SessionId = rs.ExecutionHeaderValue.ExecutionID;

        Console.WriteLine("SessionID: {0}", rs.ExecutionHeaderValue.ExecutionID);


        try
        {
            result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

            execInfo = rs.GetExecutionInfo();

            Console.WriteLine("Execution date and time: {0}", execInfo.ExecutionDateTime);


        }
        catch (SoapException e)
        {
            Console.WriteLine(e.Detail.OuterXml);
        }
        // Write the contents of the report to an MHTML file.
        try
        {
            FileStream stream = File.Create("report.mht", result.Length);
            Console.WriteLine("File created.");
            stream.Write(result, 0, result.Length);
            Console.WriteLine("Result written to the file.");
            stream.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }
    }

Взято отсюда: http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render(v=sql.105).aspx

D. (необязательно): вы можете захотеть обновить WebService на хост-серверах SSRS. По умолчанию он перезагружается каждые 12 часов, что делает первый отчет после этого медленным. Вы можете обновить эти службы, просто совершая веб-вызов каждые 10 часов или около того на конечной точке службы по адресу http:// (servername)/ReportServer. Я использую инструмент Visual Cron, который может настраивать автоматизированные задачи, вы также можете попытаться изменить конфигурацию службы SSRS, создать собственную службу поддержки активности и т. Д. В основном вам просто нужно либо изменить настройку, либо поговорить с ней, чтобы сохранить это открыто.

Другие вопросы по тегам