在我的项目中,我有一个SSRS(2005)的网络参考。我想显示可以将用户直接带到呈现报告的链接。我知道我可以提供这样的链接:
http://server/ReportServer/Pages/ReportViewer.aspx?/path/to/report&rs:Command=Render&rc:parameters=false&rs:format=HTML4.0
问题是如何从网络服务获取该网址?如果报告采用参数是否有办法为Web服务提供值并让它为我格式化URL?
我知道我可以自己构建网址,但我不喜欢重新发明轮子。
答案 0 :(得分:7)
关于SSRS如何运作以及你想用多少时间投资于它,有几点需要考虑。
予。你可以遍历根,但我非常怀疑你的意思。从根目录,您可以添加项目,无论它们是目录还是报告。另外,您可以将参数直接添加到Rest URI以呈现报告,也可以输出值。例如:
地址根目录的主要部分:
http:// <server>/ReportServer/Pages/ReportViewer.aspx?
目录路径:
%2fTest
报告路径(标记为同名lol)
%2fTest
该怎么办? (渲染)
&rs:Command=Render
放入一个paremeter并执行它(是的,我也称我的参数Test!)
&Test=Value
把它们放在一起:
http:// <servername>/ReportServer/Pages/ReportViewer.aspx?%2fTest%2fTest&rs:Command=Render&Test=Value
II。你有一个数据库,你可以查询遍历的东西,但我相信MS不会很好地记录它。通常它是一个名为&#39; ReportServer&#39;的SQL Server数据库。在你安装SSRS的任何服务器上。一般来说,大多数项目都在表格中.dbo.Catalog&#39;用&#39; Type&#39; 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)
我在这里导出了另一个帖子:Programmatically Export SSRS report from sharepoint using ReportService2010.asmx;但你可能也会获得信息。 ONCE您已经创建了代理类(或者引用了Web服务),您可以像这样在.NET中执行代码。这些服务可以实现所有的神奇功能,所以如果没有它们,你就无法在SSRS中真正建模。基本上我创建了一个你通过&#39; SERVER&#39;你需要引用类似&#39; http:// / ReportServer&#39;。
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" } };
}
}
答案 1 :(得分:1)
ListChildren是要走的路。当您在许多文件夹中有报告时,您始终可以将第二个参数设置为true以返回所有目录项。
Dim items As CatalogItem() = rs.ListChildren(reportPath, True)