Overview

Reporting

Operational reporting on route #/<route>/report-viewer.

Screenshot Reference (User Manual)

  • manual__reporting__01.png: report viewer opening with report rendering and operational toolbar.
  • manual__reporting__02.png: runtime example with parameters/filter applied to the report.

Report Viewer

The report-viewer executes and displays Stimulsoft reports associated with the current metadata route.

Main features:

  • report opening from list/grid with report name (reportName) and optional parameters.
  • runtime data rendering with viewer toolbar (zoom, export, print).
  • filter/parameter support propagated from the calling page.

Designer Reference

For report .mrt creation or modification, see the subsection

Report designer in Designer & Workflow.

Report parameters (filtered SQL variables)

To filter a report on a specific entity (e.g. printing a single invoice), the canonical pattern is:

1. In the `.mrt`: declare a Variable in the Dictionary with AllowUseAsSqlParameter = True (Stimulsoft 2026.1+). Use the variable as @paramName in SqlCommands:

Snippet 1SQL
   SELECT ... FROM fatture_inviate WHERE id = @fattura_id
   SELECT ... FROM fatture_inviate_righe WHERE fattura_id = @fattura_id

> Pitfall: do NOT use the legacy <StiDataParameter> block in the DataSource — it is no longer supported by the current Stimulsoft version and produces ArgumentException: Int32 is not a valid value for Int32. (Parameter 'value') during report.Load().

2. In the viewer URL: pass the value via the parameters query param (NOT as a direct query param):

Snippet 2text
   ✅ #/<route>/report-viewer?reportName=Report.mrt&parameters=fattura_id%7C%7Ceq%7C%7C42
   ❌ #/<route>/report-viewer?reportName=Report.mrt&fattura_id=42   <-- ignored

parameters URL-encoded syntax: name||eq||value (separated by @ for multiple parameters).

3. From a row action or UI link: use the canonical callback to build the URL:

Snippet 3js
   const recordId = (record && record.id && record.id.value) ?? (record && record.id);
   const params = 'fattura_id||eq||' + recordId;
   window.location.hash = '#/<route>/report-viewer?reportName=Report.mrt&parameters='
                       + encodeURIComponent(params);

Required backend setup

In the app's appsettings.json, the AppSettings.reportQueryTimeout setting must exist (e.g. "120"). Without it, ReportViewerController.prepareDataSql throws int.Parse(null) → 500. Example:

Snippet 4JSON
"AppSettings": {
  "reportQueryTimeout": "120"
}

Screenshot

reporting / report viewer filter
reporting / report viewer filter
reporting / report viewer main
reporting / report viewer main