Handling errors occurring in a Custom Resolver used by a Reporting REST Service
Environment
Product | Progress® Telerik® Reporting |
Report Viewer | HTML5-based Report Viewers |
Description
Handling errors occurring in a Custom Resolver used by a Reporting REST Service. In this article, we will explain how to handle errors that fire due to errors with the report's processing and errors that cause the report processing to not start altogether.
Solution
In general, a .CS Type Report has an Error event which fires due to problems with the report processing. Such errors can be handled in the report's Error event or/and in the HTML5 Viewer's error event.
For example:
//the report
public partial class ReportTest : Telerik.Reporting.Report
{
public ReportTest()
{
//
// Required for telerik Reporting designer support
//
InitializeComponent();
this.Error += new Telerik.Reporting.ErrorEventHandler(this.rptTest_Error);
}
private void rptTest_Error(object sender, ErrorEventArgs eventArgs)
{
eventArgs.Cancel = true;
throw new Exception("Manually cancelled.");
}
}
'the report
Public Partial Class ReportTest
Inherits Telerik.Reporting.Report
Public Sub New()
'
' Required for telerik Reporting designer support
'
InitializeComponent()
End Sub
Private Sub ReportCatalog_Error(sender As Object, eventArgs As Telerik.Reporting.ErrorEventArgs) Handles MyBase.Error
eventArgs.Cancel = True
Throw New Exception("Manually cancelled.")
End Sub
End Class
The HTML5 Viewer:
//the client
$(document).ready(function () {
$("#reportViewer1")
.telerik_ReportViewer({
serviceUrl: "api/reports/",
templateUrl: 'ReportViewer/templates/telerikReportViewerTemplate.html',
reportSource: {
report: "Telerik.Reporting.Examples.CSharp.ReportCatalog, CSharp.ReportLibrary",
parameters: { }
},
viewMode: telerikReportViewer.ViewModes.INTERACTIVE,
scaleMode: telerikReportViewer.ScaleModes.SPECIFIC,
scale: 1.0,
error: function (e, args) {
//hide the yellow message box
$('.trv-error-pane').toggle();
//display the error message with via custom UI
alert("Error!");
}
});
});
If you use a custom resolver for your Reporting REST Service, the report processing will not be started. Such errors can be caught and handled in the first request sent by the HTML5 Viewer to the Reporting REST service e.g. ReportsControllerBase.GetParameters method - the request for information about the report's parameter.
For example:
public override System.Net.Http.HttpResponseMessage GetParameters(string clientID, ClientReportSource reportSource)
{
try {
return base.GetParameters(clientID, reportSource);
} catch (Exception ex) {
throw new Exception("Report resolving error.");
}
}
Public Overrides Function GetParameters(clientID As String, reportSource As ClientReportSource) As System.Net.Http.HttpResponseMessage
Try
Return MyBase.GetParameters(clientID, reportSource)
Catch ex As Exception
Throw New Exception("Report resolving error.")
End Try
End Function
The above lines will override the default behavior of the ReportsControllerBase.GetParameters method (the Reporting REST service).
The error will be returned to the HTML5 Viewer(client), where it can be handled further in the viewer's error event. Without additional handling, the error will appear in an yellow message box in the viewer's page area.
Note
The HTML5 Viewer's error event can't be used for handling errors that are result of issues on connecting to the Reporting REST Service.