Adapting NavigateToReport Action for Custom ReportSource Resolvers
Environment
| Product | Reporting |
| Version | 20.1.26.520 and later |
Description
The article is relevant only to Custom ReportSource Resolvers extending the
UriReportSourceResolver.
After upgrading to the 2026 Q2 (20.1.26.520) release, NavigateToReport actions no longer pass the report name or path in the ResolveReport(string report) method of the UriReportSourceResolver as before. Instead, the method now receives a hash-based string. This change ensures better security, but may break existing implementations of custom ReportSource resolvers overriding the ResolveReport method.
This knowledge base article also answers the following questions:
- How to adjust a custom ReportSource resolver for the NavigateToReport action after the 2026 Q2 (20.1.26.520) changes?
- Why does
UriReportSourceResolver.ResolveReportmethod returnnullfor the NavigateToReport action? - How to use subfolders in a custom ReportSource resolver?
Solution
To adapt your custom ReportSource resolver for the changes:
-
Understand Changes when Resolving Report's Path in NavigateToReport Action:
- The
reportargument in theResolveReportmethod now represents a hash-based string. - The hash-to-URI mapping is managed by the Reporting REST Service's storage.
- The
-
Update the Custom ReportSource Resolver:
- Use the base
UriReportSourceResolver.ResolveReport(report)method to resolve the hashed string. - Ensure your base UriReportSourceResolver is configured with the correct
reportsPath.
Example:
CSharppublic class CustomUriReportSourceResolver: UriReportSourceResolver { public CustomUriReportSourceResolver(string reportsPath): base(reportsPath) { } protected override ReportSource ResolveReport(string report) { var reportResolvedPath = base.ResolveReport(report); return reportResolvedPath; } } - Use the base
-
Set the Correct
reportsPath:- Ensure the
reportsPathincludes the root folder containing all report files. - If reports are in subfolders, the
reportSource.reportpassed from the viewer or the action must include the subfolder name.
- Ensure the
-
Handle Subfolders:
- Ensure subfolder name is part of the
reportSource.reportin the viewer, orUriReportSource.Uriin the NavigateToReport action. - For example, use
SubfolderName/ReportName.trdpinstead of justReportName.trdp.
- Ensure subfolder name is part of the
-
Troubleshooting
base.ResolveReportReturning Null:- If
base.ResolveReport(report)returnsnull, the hash-to-URI mapping is not available in the Reporting REST Service Storage. - Ensure that the
reportsPathreceived by the UriReportSourceResolver constructor, when concatenated with thereportSource.reportpassed from the viewer, or from the NavigateToReport action, matches the expected path to your reports.
- If