5.2 KiB
title | description | type | page_title | slug | res_type |
---|---|---|---|---|---|
How to display a report via InstanceReportSource in the HTML5 Viewer | Using InstanceReportSource to display reports in the HTML5 Viewer. | how-to | Preview a report in the report viewer through an InstanceReportSource | how-to-display-a-report-via-instancereportsource-in-the-html5-viewer | kb |
Environment
Product | Progress® Telerik® Reporting |
Report Viewer | HTML5 Report Viewer |
Description
The [HTML5 Viewer]({% slug telerikreporting/using-reports-in-applications/display-reports-in-applications/web-application/html5-report-viewer/overview %}) and [Reporting REST service]({% slug telerikreporting/using-reports-in-applications/host-the-report-engine-remotely/telerik-reporting-rest-services/overview %}) use client-server technology, different than the MVC model. Whole data objects cannot be sent in a request to the server. Even if the content is serialized, it may reach technology limitations in the size of requests. The HTML5 viewer sends short string messages describing which report, what parameters and rendering format to be used on the server. Reports are processed and rendered on the server.
The available MVC and WebForms wrappers of the HTML5 Viewer let you specify which report to be displayed though the viewer's ReportSource.Reportand ReportSource.Parameters, in code in a declarative manner.
- When you use a client-side TypeReportSource (Report = TypeReportSource.TypeName and Parameters = TypeReportSource.Parameters). The type name is an assembly qualified name of a report class.
- When you use a client-side UriReportSource (Report = UriReportSource.Uri and Parameters=UriReportSource.Parameters). The URI is a relative path to a file on the server where the Reporting REST service is hosted. The relative path is mapped to the folder specified by the service's ReportFileResolver.
The HTML5 Javascript widget lets you specify directly the reportSource.report as string, and the reportSource.parameters as key-value pairs.
The InstanceReportSource is generally used alongisde a custom ReportSourceResolver as it is a great approach for updating the report's/a report item's DataSource at runtime. The ObjectDataSource and the JsonDataSource are the data source components usually used when such scenarios occur.
Solution
The following is an example of how to update a TRDP report's DataSource with a new JsonDataSource. The example code could used in a custom ReportSourceResolver's Resolve method. This method is called whenever the engine needs to create a ReportSource instance based on the parameter named report.
Report report;
var reportPackager = new Telerik.Reporting.ReportPackager();
var reportSource = new Telerik.Reporting.UriReportSource();
reportSource.Uri = "someReport.trdp";
using (var sourceStream = File.OpenRead(reportSource.Uri))
{
report = reportPackager.Unpackage(sourceStream);
}
report.DataSource = new JsonDataSource() { Source = ... };
// For example, if instead a report item, such as a table, needs to have its DataSource updated
// Table item = (Table)report.Items.Find("table1", true).FirstOrDefault();
// item.DataSource = new JsonDataSource() { Source = ... };
return new InstanceReportSource() { ReportDocument = report };
Notes
Each HTML5 Viewer provides means to let you send a custom string and parameters collection, in case of using a [custom resolver]({%slug telerikreporting/using-reports-in-applications/host-the-report-engine-remotely/telerik-reporting-rest-services/rest-service-report-source-resolver/overview%}) for the reporting rest service. Such resolver is required if you need to create/customize a report before displaying it.
After creating/modifying the report on the server, you can return an InstanceReportSource instance from the resolver's Resolve method.
See Also
[How to Set ReportSource for Report Viewers.]({%slug telerikreporting/using-reports-in-applications/display-reports-in-applications/how-to-set-reportsource-for-report-viewers%})
[How to Implement a Custom Report Source Resolver]({%slug telerikreporting/using-reports-in-applications/host-the-report-engine-remotely/telerik-reporting-rest-services/rest-service-report-source-resolver/how-to-implement-a-custom-report-source-resolver%})