我有一个提供 SSRS 报告的应用程序。通过以下方式访问给定的报告:
https://reportserver.com/reportname
单击查看报表后,将使用用户定义的参数将回发提交到报表服务器。我需要获取这些用户定义的参数并将它们解析为 URL 字符串。
期望结果: https://reportserver.com/reportname?param1=foo¶m2=bar
我找到了this doc这让我更接近我需要的东西。这个方法应该允许我获取所有可见参数并自己解析它们,但我也需要隐藏参数。
如何构建这个参数字符串?我们在前端使用 JavaScript/jQuery,因此可能可以在 POST 之前获取此客户端,但我也没有找到执行此操作的方法。
最佳答案
我成功了。公平警告:我是 ASP.NET 新手,因此这可能不是一个理想的解决方案。
我向报表查看器控件的代码后面添加了一个事件处理程序。这会查询执行日志,获取用户最近选择的参数。它意味着当单击名为“保存报告”的按钮时触发。如果您尝试使用 Load
或 PreRender
事件处理程序来处理此问题,它将在该行有机会插入数据库之前触发,从而为您提供用户第二个的结果最近的执行参数。
定义按钮(.ascx 文件)
<asp:LinkButton ID="SaveReportButton" runat="server" title="Save this Report"></asp:LinkButton>
将事件处理程序添加到代码隐藏(.ascx.vb 文件)
Protected Sub SaveReportButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SaveReportButton.Click
Dim conn As New SqlConnection(<connection string here>)
Dim cmd As New SqlCommand("SELECT TOP 1 Parameters FROM [ReportServer].[dbo].[ExecutionLogStorage] WHERE <qualify on user, timestamp, etc. here>", conn)
cmd.Parameters.AddWithValue(<query parameter here>)
conn.Open()
Dim result = cmd.ExecuteScalar()
' Prevents NullReferenceException from result.ToString() in case no result is found
If (result IsNot Nothing)
' Redirect based on parameter string retrieved from log
Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri & "?" & result.ToString())
End If
conn.Close()
End Sub
单击按钮时从 JavaScript 调用回发
<li>
<a href=\'javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(<reference SaveReportButton with appropriate arguments>)\' id="SaveReportButton" title="Save Report">
Save Report
</a>
</li>
关于 WebForm_DoPostBackWithOptions()
和 WebForm_PostBackOptions()
的文档很少,但一位同事已经这样做了,所以我效仿为了保持一致性 因为它有效。
关于javascript - 获取 URL 字符串形式的报告参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917744/