2

我正在使用 Report Builder 3.0 创建用于 SharePoint 2010 的报表。SQL Server 2008 R2 是 SharePoint 集成模式下 Reporting Services 的后端。Report Builder 3.0 的一项很酷的功能是使用 SharePoint 列表作为数据源,其设置非常简单——只需将 SharePoint 列表的 URL 作为连接字符串即可。

我最终想将此站点打包为站点模板,包括其中的报告,这意味着 URL 需要是相对的而不是绝对的。因此,例如,而不是这个:

http://mainsite/subsite1/lists/mylist

...我需要指定如下内容:

mylist

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

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

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

4

1 回答 1

2

在与一些同事进行头脑风暴后,我们想通了。关键是对连接字符串使用表达式。使用我原来的例子,目标是得到这个:

http://mainsite/subsite1/

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

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

该报告位于一个名为“Reports”的库中,因此 Globals!ReportFolder 返回:

http://mainsite/subsite1/Reports

Replace() 函数然后取出字符串的“报告”部分,结果就是我想要的连接字符串。

需要注意的事项:

  • 您无法在构建报表时测试表达式。我必须将站点 URL 硬编码到连接字符串中,以便设计人员在基于该数据源创建数据集时填充列表列表。否则它不会显示可用列表,您必须手动输入所有内容。在设计报告后,我将连接字符串更改为表达式,并且在部署时它起作用了。
  • When testing make sure to refresh your browser view instead of the little refresh icon in the report's task bar. Seems like the report's built-in refresh only grabs new data but uses the rdl file it already has on hand, whereas refreshing the browser forces it to get the latest copy of the rdl as well as latest data. That's probably self-explanatory, but it caused me some confusion for a few minutes when it didn't look like my design changes made any difference, so hopefully this will help others not go through the same confusion.
于 2011-04-12T23:05:13.390 回答