Telerik Berichte ver Q2 2014 SP1 angewendet wird (8.1.14.804)Telerik Html5 Report Viewer Client-Seite Parameter nicht
I Implementiert eine asp.net Mvc 4 Web api Berichtsserver den Standard ReportTypeResolver verwenden. Berichte werden mit dem vs2010-Berichtsdesigner erstellt, daher ist die Berichts-ID die "Klasse, DLL".
Der Bericht funktioniert einwandfrei, verwendet jedoch die im Designer definierten Berichtsparameter 'test' und nicht die vom Client gesendeten Parameter. Ich kann die Parameter sehen, die in Fiddler an den Service übergeben werden, aber sie werden nicht auf den Bericht angewendet.
Die reportscontroller sieht wie folgt aus:
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
Das html5 widget:
$("#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"
}
}
});
Ich dachte, es sollte "automatisch" sein, aber da es nicht ich vermute, muss ich etwas zum Server-Controller hinzufügen, um irgendwie den Client-Parameter zum Bericht zu bekommen.
Da ich eine ältere Version verwende, stimmen die Dokumente nicht genau mit dem, was ich habe, und die Dokumente sind in vielen Fällen verlockend unzureichend.
Jetzt verwende ich Berichte, die für eine Silverlight-App entworfen und bearbeitet wurden, nicht, dass die Server-Seite sich darum kümmert, aber in silverlight habe ich die Parameter übergeben, indem ich das ReportViewer1_RenderBegin-Ereignis abgefangen und das getReportParams-Objekt abgerufen habe.
F: Wie kann ich clientseitige Parameter an den Bericht übergeben?
EDIT:
OK, ich herausgefunden, wenn ich einen benutzerdefinierten Bericht Resolver erstellen, die der Bericht Objekt als XML serialisiert und dann die Parameter ändern, sie an den Bericht übergeben zu tun bekommen ... Problem ist, ich weiß nicht, wie man die clientseitigen Werte bekommt.
Hier ist ein schmutziges Testimplementierung:
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
Ich fange die benutzerdefinierte Resolver zu denken ist nicht der Ort, dies zu tun, obwohl es dort durch ein Trick getan werden könnte, um die params des Berichts-ID anhängen. ..wenn der Client-Viewer eine Params-Sammlung hat, die MUSS die beabsichtigte Technik sein sollte, und ich denke, es sollte automatisch sein, also muss ich etwas falsch haben ... – kpg