报表生成器3.0与SharePoint列表作为数据源使用相对URL的列表



我正在使用报表生成器3.0创建一个在SharePoint 2010中使用的报表。SQL Server 2008 R2是后端与报表服务在SharePoint集成模式。报表生成器3.0的一个很酷的功能是使用SharePoint列表作为数据源,它的设置非常简单——只要给它SharePoint列表的URL作为连接字符串,它就可以工作了。

我最终想打包这个网站作为一个网站模板,包括生活在它的报告,这意味着URL将需要是相对的,而不是绝对的。例如,不是这样:

http://mainsite/subsite1/lists/mylist

…我需要这样指定:

mylist

…因此,当我将其打包为站点模板并基于该模板创建新站点时,报告将使用新站点的列表而不是指向原始站点的列表URL。我试过"mylist","lists/mylist"等——所有没有指定subsite1/lists/mylist的东西——但到目前为止,除了完整的URL之外,没有任何效果。

是否可以使用相对URL或其他方法,以便每次我基于此网站模板创建新网站时,都不必在报告中手动更改连接字符串?

编辑:我误解了数据源的连接字符串中需要的内容。在连接字符串中不是指向列表的URL ,而是指向站点的URL 。这个问题的概念仍然有效——需要动态设置指向SharePoint列表的数据源的连接字符串

在与一些同事进行头脑风暴后,我们想出了办法。关键是对连接字符串使用表达式。使用我最初的示例,目标是得到以下内容:

http://mainsite/subsite1/

…在连接字符串中,但不对其进行硬编码——根据报表所在的位置使其动态,以便报表可以与站点的其余部分一起打包为站点模板。我最后得到的表达式是:

=Replace(Globals!ReportFolder, "Reports", "")

报表位于一个名为"Reports"的库中,所以是Globals!ReportFolder回报:

http://mainsite/subsite1/Reports

Replace()函数然后取出字符串的"Reports"部分,结果是我想要的连接字符串。

注意事项:

  • 在构建报告时不能测试表达式。我必须将站点URL硬编码到连接字符串中,以便设计人员可以在基于该数据源创建数据集时填充列表的列表。否则,它不会显示可用列表,您必须手动输入所有内容。在设计报告后,我将连接字符串更改为表达式,并且在部署时它可以工作。
  • 测试时,请确保刷新浏览器视图,而不是报告任务栏中的小刷新图标。似乎报告的内置刷新只抓取新数据,但使用手头已有的rdl文件,而刷新浏览器则强制它获取最新的rdl副本和最新的数据。这可能是不言自明的,但它给我带来了一些困惑的几分钟,当它看起来不像我的设计变化做出任何改变,所以希望这将帮助其他人不要经历同样的困惑。

最新更新