【问题标题】:How to consume Telerik Reports with the HTML5 Report Viewer如何使用 HTML5 报告查看器使用 Telerik 报告
【发布时间】:2014-06-24 23:36:51
【问题描述】:

所以我正在使用 Telerik 报告,创建一个服务器/客户端概念验证项目,并且我正在使用带有 HTML5 报告查看器的 ASP.NET WebAPI 2.0。当我在服务器中有 .trdx 文件时,我已经让它工作了,如果我只想使用独立的报告生成器,然后将文件添加到项目文件夹中,那就没问题了。

但是,我希望能够使用集成的 Visual Studio 报告生成器来制作我的报告。集成生成器的输出当然是 cs 文件,但我不确定如何在客户端调用它们,以便那里的 HTML5 查看器正确解析它们。服务器上的控制器如下。

public class ReportsController : ReportsControllerBase
{
    protected override IReportResolver CreateReportResolver()
    {
        var appPath = HttpContext.Current.Server.MapPath("~/");

        return new ReportFileResolver(appPath);
    }

    protected override ICache CreateCache()
    {
        return Telerik.Reporting.Services.Engine.CacheFactory.CreateFileCache();
    }
}

在客户端请求数据的代码如下。

$(document).ready(function () {
        $("#reportViewer1")
            .telerik_ReportViewer({
                serviceUrl: "http://localhost:XXXXX/api/reports/",
                templateUrl: 'ReportViewer/templates/telerikReportViewerTemplate.html',
                reportSource: { report: "Reports/Accounting/InvoiceSubGroup/Invoice.trdx" },
                viewMode: telerikReportViewer.ViewModes.INTERACTIVE,
                scaleMode: telerikReportViewer.ScaleModes.SPECIFIC,
                scale: 1.0,
                ready: function () {
                },
            });           
    });

任何能让我更清楚如何更改此设置的信息,我将不胜感激。

【问题讨论】:

    标签: c# asp.net html telerik telerik-reporting


    【解决方案1】:

    所以我不完全确定是否可以像以前使用的那样使用 FileReportResolver 来执行此操作,但是我或多或少地想出了一般如何执行此操作并且它不会破坏我的情况我在其他地方使用 trdx 文件。

    对html页面的改动如下:

    老,这仍然是如何调用将是 trdx 类型的报告。 -

    reportSource: { report: "Reports/Warehouse/Facts/Invoice.trdx" },
    

    新,这是您将如何引用通过集成报告查看器生成的报告 -

    reportSource: { report: "TelerikRESTHost.Reports.Warehouse.Facts.People, TelerikRESTHost" },
    

    第一个参数是 [report name].Designer.cs 文件(位于顶部)内的命名空间以及您要查找的特定名称。在我的例子中,报告是 People.cs,命名空间如上所示。两者的区别在于它们是什么类型的文件,旧的是 .trdx 文件,新的是 .cs 文件。第二个参数是文件所在项目的Assembly名称。

    这里重要的是报告源第二个参数 HAS 是项目的程序集名称,自从我通过解决方案资源管理器重命名它以来,这确实让我很困惑很长一段时间,但这不会更改程序集名称。

    就控制器而言,我不得不对其进行如下修改

    return new ReportFileResolver(appPath)
                .AddFallbackResolver(new ReportTypeResolver());
    

    这显然会首先尝试根据文件名解析它(旧方法),如果它不能这样做,那么它将尝试将其解析为一个类型(新方法)。

    我希望这可以帮助其他人避免我花时间试图解决这个问题。如果有人能找到一种简单的方法来组合这些方法,以便客户端不必知道服务器上的文件格式类型,我会将您的答案标记为解决方案(假设它有效),因为那是我的一开始就在找。不过,这至少是目前可以接受的解决方法。

    【讨论】:

    • 你所做的正是serviceclient的官方文档也是这样做的,所以没关系。仅此一条评论:程序集名称不是报告源的第二个参数。您只传递一个字符串作为报告源,并且该字符串必须是您的报告类的AssemblyQualifiedName
    • 刚刚遇到这个问题,需要使用 HTML 5 查看器来执行此操作,这对我来说非常有用,感谢您的回答/更新!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多