版本Q2 2014 SP1(8.1.14.804)Telerik的Html5的報告觀察者客戶端的參數沒有被應用
我實現使用默認ReportTypeResolver一個asp.net MVC 4網頁API報告服務器Telerik的報告。報告是使用vs2010報告設計器設計的,因此報告ID是「class,dll」。
該報告工作正常,但它使用的是設計人員定義的「測試」報告參數,而不是客戶端發送的報告參數。我可以看到參數傳遞給服務在提琴手,但他們不適用於報告。
的reportscontroller看起來是這樣的:
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對象來傳遞參數。
問:如何將客戶端參數傳遞給報表?
編輯:
OK,我想通了,如果我創建一個自定義報告解析,序列化的報告對象爲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
我開始覺得定製解析器是不是要做到這一點的地方,雖然也可以通過一些技巧也做了PARAMS附加到報告ID。 ..因爲客戶端查看器有一個PARMS集合,必須是使用的預期技術,我認爲它應該是自動的,所以我必須有一些錯誤... – kpg