Overview
Reporting
Reportistica operativa su route #/<route>/report-viewer.
Screenshot reference (manuale utente)
manual__reporting__01.png: apertura report viewer con rendering report e toolbar operativa.manual__reporting__02.png: esempio runtime con parametri/filtro applicati al report.
Report viewer
Il report-viewer esegue e mostra report Stimulsoft associati alla route metadata corrente.
Feature principali:
- apertura report da list/grid con nome report (
reportName) e parametri opzionali. - rendering dati lato runtime con toolbar viewer (zoom, export, stampa).
- supporto filtro/parametri propagati dalla pagina chiamante.
Riferimento al designer
Per creazione o modifica del report .mrt, vedi la sottosezione
Report designer in Designer & Workflow.
Parametri report (variabili SQL filtrate)
Per filtrare un report su una specifica entita (es. stampa di una singola fattura), il pattern canonico e':
1. Nel `.mrt`: dichiara una Variable nel Dictionary con AllowUseAsSqlParameter = True (Stimulsoft 2026.1+). Usa la variabile come @nomeParam nelle SqlCommand:
SELECT ... FROM fatture_inviate WHERE id = @fattura_id
SELECT ... FROM fatture_inviate_righe WHERE fattura_id = @fattura_id > Trappola: NON usare il pattern legacy <StiDataParameter> block nel DataSource — non e' piu' supportato dalla versione corrente di Stimulsoft e produce ArgumentException: Int32 is not a valid value for Int32. (Parameter 'value') durante report.Load().
2. Nell'URL del viewer: passa il valore via query param parameters (NON come query param diretto):
✅ #/<route>/report-viewer?reportName=Report.mrt¶meters=fattura_id%7C%7Ceq%7C%7C42
❌ #/<route>/report-viewer?reportName=Report.mrt&fattura_id=42 <-- ignorato Sintassi parameters URL-encoded: nome||eq||valore (separati da @ per piu' parametri).
3. Da row action o link UI: usa il callback canonico per costruire l'URL:
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¶meters='
+ encodeURIComponent(params);Setup backend obbligatorio
In appsettings.json dell'app, deve esistere AppSettings.reportQueryTimeout (es. "120"). Senza, ReportViewerController.prepareDataSql lancia int.Parse(null) → 500. Esempio:
"AppSettings": {
"reportQueryTimeout": "120"
}Screenshot

