SharePoint中的SQL Reporting Services报告

在SharePoint环境中,使用SQL Reporting Services报告时,可能会遇到一些需要自定义的场合。本文将介绍一些实用的技巧,这些技巧可以帮助更好地在SharePoint Server 2007和SQL Reporting Services 2005(集成模式)中展示报告。

这些技巧包括接受URL参数来传递报告参数、将报告本身作为URL参数传递、使用默认的master页面以及在新窗口中打开钻取报告等。这些功能并非SharePoint原生报告查看器页面RSViewerPage.aspx所提供的,因此需要进行一些自定义。

为什么要这样做?

可能会需要创建一个包含参数的报告链接,这个链接可以放在快速启动导航中,或者作为文档的一部分。如果没有这些技巧,可能需要为每个报告构建一个特定的页面,并添加一系列的URL字符串过滤Web部件,然后将它们连接到报告。

如何实现

要实现这些功能,首先需要确保Reporting Services已经正确安装并与SharePoint站点集成。Reporting Services需要处于集成模式。

安装方法

这是一个SharePoint解决方案包的安装。以下是命令行示例: stsadm -o addSolution -filename DataQ.SharePoint.RSViewer.wsp stsadm -o deploySolution -name DataQ.SharePoint.RSViewer.wsp -immediate -allowgacdeployment stsadm -o execadmsvcjobs stsadm -o activatefeature -name DataQ.RS -url http://yoursite 请将yoursite替换为站点地址。可以在../DeploymentFiles/文件夹中找到WSP包,或者通过中央管理->操作上传解决方案。安装完成后,将在站点集合级别获得一个名为DataQ: Reporting Services Viewer Page的新功能。

使用方法

该包安装了一个报告查看器页面:~site/_layouts/DataQ.RS/RSViewer.aspx。这个页面对站点集合中的所有网站都是可用的。

可以通过报告项目的下拉菜单(编辑控制按钮或RCB)访问这个页面。创建包含参数的报告链接的好处是可以使用以下语法: http://yoursite/_layouts/DataQ.RS/RSViewer.aspx?report=/reports/YourReport.rdl&p_Parameter=10 规则如下: - 必须通过report参数指定报告。它应该是报告的绝对路径。 - 必须通过URL参数传递每个报告参数,该参数名称前缀为p_。添加了这个p_前缀是因为需要某种方式来指示正在处理报告参数。稍后会在代码注释中看到这一点。

代码解析

RSViewer.aspx实际上是一个使用default.master的SharePoint应用程序页面,并植入了sqlviewer Web部件作为用户控件。原生的Reporting Services查看器页面并不真正使用母版页。是的,可以将Web部件作为用户控件使用。

报告可以通过URL参数作为RDL的相对路径传递,或者通过ListID和ItemID参数对传递。以下是代码序列: if (!Page.IsPostBack) { SPWeb web = SPContext.Current.Web; SPList list; SPListItem report = null; if (Request["ItemId"] != null && Request["ListId"] != null) { list = web.Lists[new Guid(Request["ListId"].ToString())]; if (list != null) { report = list.Items.GetItemById(Convert.ToInt32(Request["ItemId"])); } } else if (Request["report"] != null) { report = web.GetListItem(Request["report"].ToString()); } if (report != null) { // set the window title LiteralPageTitle.Text = report.Title; // set the title in the page LabelPageTitleInTitleArea.Text = report.Title; // set the path to the report m_sqlRsWebPart.ReportPath = SPContext.Current.Site.MakeFullUrl(report.File.ServerRelativeUrl); ReportParameterDefaultCollection parameters = new ReportParameterDefaultCollection(); parameters = m_sqlRsWebPart.OverrideParameters; foreach (string urlParam in Request.QueryString.AllKeys) { // we have to prefix report params with something so we know they are report parameters, and they are destined to be passed to the report if (urlParam != null && urlParam.StartsWith("p_")) { string paramName = urlParam.Substring(2); string paramValue = Request[urlParam].ToString(); Microsoft.Reporting.WebForms.ReportParameter p = new Microsoft.Reporting.WebForms.ReportParameter(paramName, paramValue); parameters.Add(p); } } } } 首先重要的是正确设置m_sqlRsWebPart.ReportPath以指向报告文档。其次是覆盖m_sqlRsWebPart.OverrideParameters集合,以防通过URL传递了任何参数。选择通过在URL参数前加上p_来识别哪个URL参数是报告参数。另一种方法是查询Reporting Services Web服务以获取此报告的可用参数,并查看它们是否出现在URL中。在这里没有这样做。想保持简单。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485