【发布时间】:2017-07-09 01:42:03
【问题描述】:
telerik 报告 2014 年第二季度 SP1 (8.1.14.804)
我使用默认的 ReportTypeResolver 实现了一个 asp.net mvc 4 web api 报告服务器。报表是使用vs2010报表设计器设计的,所以报表id是“class,dll”。
报告工作正常,但它使用的是设计器中定义的“测试”报告参数,而不是客户端发送的参数。我可以在 fiddler 中看到正在传递给服务的参数,但它们并未应用于报告。
报告控制器如下所示:
Public Class ReportsController
Inherits ReportsControllerBase
Protected Overrides Function CreateCache() As Interfaces.ICache
Return CreateFileCache()
End Function
Protected Overrides Function CreateReportResolver() As IReportResolver
Return New ReportTypeResolver
End Function
End Class
html5 小部件:
$("#reportViewer1").telerik_ReportViewer({
serviceUrl: "http://server/api/reports",
templateUrl: "telerikReportViewerTemplate-8.1.14.804.html",
reportSource: {
report: "Reports.ItemReport, Reports",
parameters: {
CultureID: "en",
mydata: "some_data"
}
}
});
我认为它应该是“自动的”,但由于它不是我怀疑我需要向服务器控制器添加一些东西以某种方式将客户端参数获取到报告中。
由于我使用的是旧版本,因此文档与我所拥有的不完全匹配,而且在许多情况下,这些文档都非常不足。
现在我正在使用为 silverlight 应用程序设计和工作的报告,并不是说服务器端对此有任何关心,但在 silverlight 中,我通过拦截 ReportViewer1_RenderBegin 事件并获取 getReportParams 对象来传递参数。
问:如何将客户端参数传递给报表?
编辑:
好的,我发现如果我创建一个自定义报表解析器,将报表对象序列化为 xml,然后更改它们传递给报表的参数...问题是我不知道如何获取客户端值。
这是一个肮脏的测试实现:
Public Class CustomReportResolver
Implements IReportResolver
Public Function Resolve(reportId As String) As ReportSource Implements IReportResolver.Resolve
Dim rpt As New Reports.ItemReport
Dim sb As New StringBuilder
Using xmlWriter As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(sb)
Dim xmlSerializer As New Telerik.Reporting.XmlSerialization.ReportXmlSerializer()
xmlSerializer.Serialize(xmlWriter, rpt)
End Using
Dim reportSource As New Telerik.Reporting.XmlReportSource()
'down and dirty replace of ReportTitle parameter...
reportSource.Xml = sb.ToString.Replace("<String>Report</String>", "<String>Foo-Bar</String>")
Return reportSource
End Function
End Class
【问题讨论】:
-
我开始认为自定义解析器不是执行此操作的地方,尽管可以通过一些技巧将参数附加到报告 ID...因为客户端查看器有必须是预期使用的技术的 params 集合,我认为它应该是自动的,所以我一定有问题......
标签: asp.net-web-api telerik-reporting