【问题标题】:SSRS Scheduled Subscription hyperlinks not workingSSRS 计划订阅超链接不起作用
【发布时间】:2016-05-13 17:08:16
【问题描述】:

我目前正在使用 Reporting Services 2014。我使用以下代码能够在 sharepoint 站点本身上使用 javascript 弹出窗口。该代码还通过 iif 语句处理导出到 Excel 链接 评估是否正在站点上查看 RenderFormat 或者它是否是另一种格式(Excel、Word、PDF 等)。 iif 语句使用将 ReportServerURL 替换为适当站点的变量。使用网站上的链接以及从网站导出到 Excel 时,一切正常。

当我设置发送报告的 Excel 文件的预定订阅时,会出现问题。 ReportSerURL 与上述情况不同。我们有两个站点在预定订阅 Excel 文件中使用 http://gsp1/ReportServerhttp://gsp2/ReportServer

这是我目前用于在网站上使用超链接并从网站导出到 Excel 的代码。有没有一种方法可以让我也加入一些逻辑来处理预定的订阅文件?

SSRS URL 操作(使用下面的变量)

=iif(
(Globals!RenderFormat.Name = "RPL"), 
"javascript:void(window.open('"+ Variables!RxDrill.Value + "&rv:ParamMode=Hidden&rv:Toolbar=None&rv:HeaderArea=None&rp:StoreKey=" + Fields!StoreKey.Value.ToString + " &rp:RxNumber=" + Fields!RX.Value.ToString + "&rp:RefillNumber=" + Fields!RefillNumber.Value.ToString + "', 'RXOVERVIEW','width=1335,height=450,location=no'))",
Variables!RxDrill.Value + "&rp%3aStoreKey=" & Fields!StoreKey.Value & "&rp%3aRxNumber=" & Fields!RX.Value & "&rp%3aRefillNumber=" & Fields!RefillNumber.Value & "&rs%3aParameterLanguage=")

变量

=Replace(Globals!ReportServerUrl,"/_vti_bin","/_layouts/15") + "/RSViewerPage.aspx?rv:RelativeReportUrl=/SSRS%20Library/Rx Transaction Detail.rdl"

这是我目前在尝试打开订阅 Excel 电子邮件文件中的链接时遇到的错误。

我删除了一个 [&ReportServerUrl] 文本框,发现预定订阅中的路径与浏览器中的路径或导出到 Excel 期间的路径不同。我发现订阅使用了 2 个可能的 ReportServerURL。 http://gsp1/ReportServerhttp://gsp2/ReportServer。在浏览器中它总是https://abc.myinfocenter.net/_vti_bin/ReportServer,但是从上面的变量代码中可以看到_vti_bin 被替换了。

【问题讨论】:

  • 让我看看我是否理解您的问题,当您通过浏览器查看报告时,报告中的链接指向正确的钻取报告并正确呈现所需的报告。当您通过订阅收到 Excel 版本的报告时,报告中的链接无法正常工作。当您单击 Excel 文件中的这些链接时,会发生什么?你得到什么错误?请使用此信息修改您的问题。
  • 没错,链接在浏览器中工作正常,当我将报告导出到 Excel 时,它们也能正常工作。问题是当我收到作为订阅的 excel 文件时。我会继续修改我的问题,因为我无法在评论中放置屏幕截图

标签: vba excel reporting-services ssrs-2014


【解决方案1】:

问题似乎在于,当您通过 sharepoint 加载报表时,您正在使用 Globals!ReportServerUrl 值检索 sharepoint 服务器信息。但是,如果订阅在不同的 SSRS 服务器上,您将检索不同的服务器值:生成订阅的服务器。当您通过 SharePoint 网站访问报表时,SharePoint 知道它在哪个服务器上,并且可以告诉 SSRS。但是,当您直接在 SSRS 服务器上生成报告时,SSRS 服务器甚至不知道 SharePoint 网站是否存在。

为了解决这个问题,您需要告诉 SSRS 服务器 SharePoint 网站的 URL。您可以将 SharePoint URL 硬编码到变量或其他地方的表达式中,但这有点难以维护。我建议通过以下方式解决这个问题,使维护更容易和更透明:

  1. 在您的报表中创建一个名为 SharePointURL 的新参数。将默认值设置为https://abc.myinfocenter.net/_vti_bin/ReportServer 或在浏览器中正确生成报告时的任何值。您将其作为参数执行的原因是,如果您的 SharePoint 网站发生更改,则更易于维护。将此参数设置为隐藏或内部。

  2. 更改变量的表达式以包含 SharePointURL 参数。

新的变量表达式:

=Replace(IIF(Globals!RenderFormat.Name = "RPL",Globals!ReportServerUrl,Parameters!SharePointURL.Value),"/_vti_bin","/_layouts/15") + "/RSViewerPage.aspx?rv:RelativeReportUrl=/SSRS%20Library/Rx Transaction Detail.rdl"

希望这能解决您的问题。

【讨论】:

  • 非常感谢您的快速回复。我最初尝试在过去创建一个参数来确定是使用 javascript 作为弹出窗口(在浏览器中)还是简单地从导出到 Excel 导航到新选项卡。该新参数在安排订阅时会导致错误。对不起,我不记得手头的错误描述。我最终将该代码更改为变量。有什么理由我不能做你上面所说的作为另一个变量而不是作为参数吗?
  • 我实际上从未使用过变量,但我想你可以。请记住,隐藏参数不需要默认值。但是,如果它们有一个默认值,那么这就是订阅将使用的值。此外,对于隐藏参数,我不相信订阅会给您更改值的选项。
  • 不幸的是,RenderFormat 不允许用作变量。我收到以下错误消息:“报表‘正文’的变量表达式引用全局变量 RenderFormat,这对于这种类型的报表项表达式无效。我还应该提到,我们对两个单独的报表项使用相同的 SSRS 解决方案生产站点,所以不仅有 abc 站点还有 def 站点
  • 另一种解决方案是构建参考或查找表。我正在为我的组织做这件事。每当一台服务器查找另一台服务器时,我都会查询一个表并说出我在哪个框架/应用程序中以及我正在寻找哪个框架/应用程序以及环境(即 TEST 或 PROD),它会返回 URL 或我存储的任何其他值。
  • 非常感谢,我走了这条路,经过缓慢的启动,我能够让它工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多