因此,我正在使用Telerik报告,创建服务器/客户端概念验证项目,并且我使用ASP.NET WebAPI 2.0和HTML5报告查看器。当我在服务器中有.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 () {
},
});
});
任何可以让我更清楚如何更改此信息的信息,我都会感激。
答案 0 :(得分:4)
所以我不能完全确定使用FileReportResolver是否可以像以前一样使用FileReportResolver,但是我或多或少地想出了如何做到这一点。并没有打破我在其他地方使用trdx文件的情况。
对html页面的更改如下:
旧的,这仍然是如何调用将成为trdx类型的报告。 -
reportSource: { report: "Reports/Warehouse/Facts/Invoice.trdx" },
新的,这就是您通过集成报表查看器引用报表的方式 -
reportSource: { report: "TelerikRESTHost.Reports.Warehouse.Facts.People, TelerikRESTHost" },
第一个参数是[报告名称] .Designer.cs文件(位于顶部)内的命名空间以及您正在寻找的特定命名空间。在我的例子中,报告是People.cs,名称空间如上所示。两者之间的区别在于它们是什么类型的文件,old是.trdx文件而new是.cs文件。第二个参数是文件所在项目的程序集名称。
这里重要的事情是报告源第二个参数 HAS 是项目的程序集名称,这是因为我通过解决方案资源管理器重命名它已经有一段时间了,但这并没有改变程序集名称。
就控制器而言,我必须按如下方式对其进行修改
return new ReportFileResolver(appPath)
.AddFallbackResolver(new ReportTypeResolver());
这显然会尝试首先根据文件名解析它(旧方法),如果它不能这样做,那么它会尝试将其解析为一种类型(新方法)。
我希望这可以帮助别人避免我花时间试图解决这个问题。如果有人能够找到一种简单的方法来组合这些方法,以便客户端不必知道服务器上的文件格式是什么类型,我会将您的答案标记为解决方案(假设它有效),因为那是我一开始就在寻找什么。现在这至少是一个可以接受的工作。