日期:2014-05-17  浏览次数:20674 次

SSRS加外壳问题,如何获取发布到SSRS服务器上的报表的路径?
如题,如何获取发布到SSRS服务器上的报表的路径?想自已做一个登录界面,登录后,把报表名称重新组织一一个树上,点树的节点,对应一个SSRS上报表路径,如何获取到已发布报表的路径?

------解决方案--------------------
讲个大体思路,如果有对报表管理器的database 有访问权限的话,那么在报表管理器的database 中找个到表
[ReportServer$DBINstanceName].[dbo].[Catalog],跟据这个表的数据parentID,path等字段内容生成上下层的树结构。 至于路径那么就需要catalog中的path字段数据和报表管理器的地址来拼接。 也就是一些字符串替换拼接的工作。
比如
http://localhost:8080/Reports/Pages/Folder.aspx?+拼凑好报表地址。
SQL code

SELECT TOP 1000 [ItemID]
      ,[Path]
      ,[Name]
      ,[ParentID]
      ,[Type]
      ,[Content]
      ,[Intermediate]
      ,[SnapshotDataID]
      ,[LinkSourceID]
      ,[Property]
      ,[Description]
      ,[Hidden]
      ,[CreatedByID]
      ,[CreationDate]
      ,[ModifiedByID]
      ,[ModifiedDate]
      ,[MimeType]
      ,[SnapshotLimit]
      ,[Parameter]
      ,[PolicyID]
      ,[PolicyRoot]
      ,[ExecutionFlag]
      ,[ExecutionTime]
      ,[SubType]
      ,[ComponentID]
  FROM [ReportServer$DBINstanceName].[dbo].[Catalog]

------解决方案--------------------
////报表服务器webservice操作类
ReportingService2010 _rs = new ReportingService2010(); //负责管理服务器的接口
 _rs.Credentials = new System.Net.NetworkCredential(reportViewerUserName, reportViewerPassword, reportViewerDomain);
_rs.Url = String.Format("{0}/{1}", Common.ReadConfig.ReportServerUrl(), Common.EnumClass.ReportService2010.ToString() + ".asmx");

CatalogItem[] items;
items = _rs.ListChildren(Common.CommonClass.GetReportFileFolderPath(Common.ReadConfig.ReportProjectName()), true);
foreach (var item in items)
{
if (item.TypeName == "Report")
{
sb.Append("<li>");
sb.Append("<a href='Report/" + item.Name + "/" + "001' target='_blank'>" + item.Name + "</a>");
sb.Append("</li>");
}
}
this.myReportList.Text = sb.ToString();

自己参考吧,调用的webservice