如何通过SSRS Web服务获取报告URL?

JC *_*ord 3 reporting-services

在我的项目中,我有一个SSRS(2005)的网络参考.我想显示可以将用户直接带到呈现报告的链接.我知道我可以提供这样一个链接:

http://server/ReportServer/Pages/ReportViewer.aspx?/path/to/report&rs:Command=Render&rc:parameters=false&rs:format=HTML4.0

问题是如何从Web服务获取该URL?如果报告采用参数是否有办法为Web服务提供值并让它为我格式化URL?

我知道我可以自己构建URL,但我不喜欢重新发明轮子.

dja*_*azz 7

关于SSRS如何运作以及您希望多长时间投资于其中,可以考虑一些事情.

I.你可以遍历根,但我非常怀疑你的意思.从根目录,您可以添加项目,无论它们是目录还是报告.另外,您可以将参数直接添加到Rest URI以呈现报告,也可以输出值.例如:

地址根的主要部分:

http:// <server>/ReportServer/Pages/ReportViewer.aspx?
Run Code Online (Sandbox Code Playgroud)

目录路径:

%2fTest
Run Code Online (Sandbox Code Playgroud)

报告的路径(标记为同名lol)

%2fTest
Run Code Online (Sandbox Code Playgroud)

该怎么办?(渲染)

&rs:Command=Render
Run Code Online (Sandbox Code Playgroud)

放入一个paremeter并执行它(是的我也调用了我的参数Test!)

&Test=Value
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

http:// <servername>/ReportServer/Pages/ReportViewer.aspx?%2fTest%2fTest&rs:Command=Render&Test=Value
Run Code Online (Sandbox Code Playgroud)

II.你有一个数据库,你可以查询遍历的东西,但我相信MS不会很好地记录它.通常,它是在您安装SSRS的任何服务器上名为"ReportServer"的SQL Server数据库.通常,大多数项目都在"dbo.Catalog"表中,"Type"为2,用于报告.您可以从那里获取他们的信息甚至参数.

III.你想全力以赴,深入研究.NET并直接与服务商谈?你也可以那样做.你需要这两个主要服务:

 A: http://<Server Name>/reportserver/reportservice2010 (gets info on existing items on server)

 B: http:// <Server Name>reportserver/reportexecution2005 (gets info for in code creating reports to types directly in code)
Run Code Online (Sandbox Code Playgroud)

我在这里导出了另一个线程:使用ReportService2010.asmx以编程方式从sharepoint导出SSRS报告 ; 但你可能也会获得信息.ONCE您已经创建了代理类(或者引用了Web服务),您可以像这样在.NET中执行代码.这些服务可以完成所有的魔术,所以如果没有它们,你就无法在SSRS中真正建模.基本上我创建了一个类,你传递'SERVER',你需要引用像'http:///ReportServer'这样的类.

private ReportingService2010 _ReportingService = new ReportingService2010();
        private ReportExecutionService _ReportingExecution = new ReportExecutionService();

        private string _server { get; set; }

        public ReaderWriter(string server)
        {
            _server = server;
            _ReportingService.Url = _server + @"/ReportService2010.asmx";
            _ReportingService.Credentials = System.Net.CredentialCache.DefaultCredentials;

            _ReportingExecution.Url = _server + @"/ReportExecution2005.asmx";
            _ReportingExecution.Credentials = System.Net.CredentialCache.DefaultCredentials;
        }

public List<ItemParameter> GetReportParameters(string report)
        {
            try
            {
                return _ReportingService.GetItemParameters(report, null, false, null, null).ToList();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Getting Parameter info threw an error:\n " + ex.Message);
                return new List<ItemParameter> { new ItemParameter { Name = "Parameter Not Found" } };
            }
        }

        public List<CatalogItem> GetChildInfo(string dest)
        {
            try
            {
                return _ReportingService.ListChildren("/" + dest, false).ToList();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Getting Child info of location threw an error:\n\n" + ex.Message);
                return new List<CatalogItem> { new CatalogItem { Name = "Path Does Not exist", Path = "Path Does not exist" } };
            }
        } 
Run Code Online (Sandbox Code Playgroud)