【问题标题】:SSRS with Custom Web UI带有自定义 Web UI 的 SSRS
【发布时间】:2009-09-15 03:08:57
【问题描述】:

是否可以创建自定义 Web 前端来运行 SSRS 报告?

我们有一个现有的跨浏览器 Web 前端来收集报告输入(对于非 SSRS 平台),我们希望希望继续使用 SSRS。它包括已经在内部开发的特定领域的 UI 控件,没有什么能比 SSRS 的 OOTB 更接近。

我们不需要对类型感知控件进行动态呈现——尽管我认为 RDL 可以帮助告诉我们报告采用哪些参数(及其类型)——但我们需要的不仅仅是Report Manager 给我们的.

本质上,我们希望自定义/替换报告管理器生成的输入收集 UI。我们还需要一些品牌推广。完全废弃报告管理器(我的意思是外部)并通过我们自己的 ASP.NET 应用程序直接与 SSRS Web 服务交互会更容易吗?

我是报告领域的新手,我找不到任何相关信息。我们使用的是 SQL Server 2005 Reporting Services。

【问题讨论】:

  • 嗨,你是怎么得到这个结果的,我正在尝试做类似的事情,但我必须在后面的代码中提供tenantId,否则可能会将安全数据泄露给经过身份验证但错误的客户端,有什么想法吗 ?谢谢

标签: asp.net reporting-services reportingservices-2005


【解决方案1】:

是的,这是可能的。 2 多年前,当我们对 OOTB 的参数选择感到不满时,我们实施了类似的解决方案。

基本上我们有一个用户与之交互的自定义​​ ASP.NET 应用程序。当第一页加载时,它会显示该用户可用的报告列表(从 ASP.NET 应用程序通过 Web 服务和身份模拟与 SSRS 通信,以便对列表进行安全调整)。如果自定义 ASP.NET 应用程序与报表服务器位于不同的服务器上,则需要在此处使用 Kerberos。

用户选择报告后,将显示参数选择屏幕(仍在自定义 ASP.NET 应用程序中)。当他们选择参数并单击“生成报告”时,一些 JavaScript 将每个参数的输入标签动态添加到 HTML 表单(对用户隐藏),然后执行 HTTP POST 到 SSRS Web 服务器。

然后,我们使用 OOTB 报告查看器来显示报告,但它托管在框架中,因此屏幕顶部允许将用户包含在自定义 Web 应用程序中。这使他们可以快速返回并更改参数。

我们采用这种方法是因为我们拥有一个全球性组织,但我们的应用是集中托管的 - 我们希望为所有用户提供尽可能好的性能。我们发现报告查看器在性能方面非常好,但是 OOTB 提供的 OOTB 参数选择对于高延迟的连接来说很糟糕 - 大量回发和传输的流量过多。

另一个技巧 - 我们将参数“隐藏”在报表中,这样参数就不会显示在报表查看器中。

编辑:我们最初使用 SSRS 2005 进行了此操作,最近升级到 SSRS 2008 并减少了麻烦。

【讨论】:

  • 澄清一下:发出 HTTP POST 的表单只是针对 iframe?是否有任何资源可以帮助您解决这个问题(书籍、文档等)?我认为 SSRS Web 服务层是从自定义应用程序生成报告的更“标准”方式,而不是 HTTP POST。知道这个技巧很有趣。
  • 这是关于通过 URL 参数访问报告的 MSDN 文章 - msdn.microsoft.com/en-us/library/ms155391.aspx 我们最终执行 HTTP POST(应用相同的命令)的原因是为了避免出现大量选定参数和 1024(? ) URL 长度限制。我只是仔细检查了一下,我们的表单在另一个隐藏的框架中,所以定位它自己的框架,我们只是在发布表单时调整框架的大小。我们使用 Web 服务获取可供用户使用的报表列表,并使用本地报表查看器来显示报表。然后用户可以正常与之交互。
【解决方案2】:

如果我对您的理解正确,您会希望使用 ReportViewer 来呈现报告。

无论如何,您都可以实现输入收集,然后只需将输入作为参数传递给报告:

//the report classes are in the namespace: Microsoft.Reporting.WebForms
Collection<ReportParameter> paramList = new Collection<ReportParameter>();
string reportPath = ApplicationInfo.ScorecardReportPath;
paramList.Add(new ReportParameter("UID", "5"));

ReportViewer1.ProcessingMode = ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://servername/ReportServer");
ReportViewer1.ServerReport.ReportPath = reportPath;
ReportViewer1.ServerReport.SetParameters(paramList);
ReportViewer1.ServerReport.Refresh();

ReportViewer 是一个可以拖放到页面上的控件:

<rsweb:ReportViewer id="ReportViewer1" runat="server" documentmapwidth="175px" 
font-names="Verdana" font-size="8pt" promptareacollapsed="true" width="100%"
zoommode="Percent" zoompercent="100"/>

我已使用这种方法将报表查看器嵌套在母版页中包含的页面中。它允许显示菜单/页眉/页脚。

【讨论】:

    【解决方案3】:

    我们所做的是构建了一个 UI 来收集标准和格式(PDF、XLS 等)数据,并使用SSRS Web Services 来触发报告。

    它使我们能够完全按照您所说的在报告中使用您自己的 UI 和品牌。

    您基本上将 RDL 名称和一组报告参数传递给 Web 服务,它会返回 HTML(或您指定的任何格式)。

    一些问题包括在使用 SSRS 的列排序时必须重写 URL,如果要支持 PDF/Doc/XLS/等,则必须设置自己的 mime 类型...

    【讨论】:

    • 这个 UI 相对静态吗?即,输入控件是“硬编码”还是根据报告的参数动态创建的?好奇...
    • 每个报表都有自己的一组输入控件(有些报表比其他报表需要更多的条件)。所以我们所做的是创建了一个自定义控件来管理每个自定义 aspx 页面和 SSRS 之间的所有通信。这样,创建报表所需的只是定义输入、输入数据的收集以及将这些数据传递到我们的自定义 Reporting Services 控件中。我们的每个报告都是一个新的 aspx 页面,有自己的一组输入控件。根据用户的访问权限和配置显示/隐藏一些输入控件。
    【解决方案4】:

    如果您不想使用 ASP.Net,另一种在 SSRS 上创建品牌外观的方法。使用子报表作为标题并在报表之间进行导航。

    http://mybinote.blogspot.se/2012/03/branding-ssrs-and-make-it-look-like.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多