Tempo.Reporting.Abstractions 2.8.3

dotnet add package Tempo.Reporting.Abstractions --version 2.8.3
                    
NuGet\Install-Package Tempo.Reporting.Abstractions -Version 2.8.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Tempo.Reporting.Abstractions" Version="2.8.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Tempo.Reporting.Abstractions" Version="2.8.3" />
                    
Directory.Packages.props
<PackageReference Include="Tempo.Reporting.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Tempo.Reporting.Abstractions --version 2.8.3
                    
#r "nuget: Tempo.Reporting.Abstractions, 2.8.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Tempo.Reporting.Abstractions@2.8.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Tempo.Reporting.Abstractions&version=2.8.3
                    
Install as a Cake Addin
#tool nuget:?package=Tempo.Reporting.Abstractions&version=2.8.3
                    
Install as a Cake Tool

Tempo.Reporting.Abstractions

Contracts and JSON models for Tempo Reporting. This package has no Blazor or ASP.NET dependency, so API projects, workers, MCP hosts, and shared DTO libraries can reference it without pulling UI assets.

What It Contains

  • Report definition records: page setup, bands, parameters, data sets, styles, and polymorphic report elements.
  • Canonical JSON serialization through ReportDefinitionJsonSerializer.
  • FluentValidation validators for report definitions and parameters.
  • Report execution context and data-provider contracts.
  • In-memory definition store for demos, tests, and lightweight MCP hosts.
  • Report Server DTOs shared by remote clients and server endpoints.

Report Definition JSON

ReportDefinitionJsonSerializer uses camelCase JSON, string enums, and the polymorphic element discriminator property type.

{
  "schemaVersion": 1,
  "id": "sales-summary",
  "name": "Sales summary",
  "pageSetup": {
    "pageSize": { "width": 595.28, "height": 841.89, "unit": "point" },
    "orientation": "portrait",
    "margins": { "left": 36, "top": 36, "right": 36, "bottom": 36 }
  },
  "dataSets": [
    {
      "name": "Orders",
      "source": { "name": "northwind" },
      "query": "orders/recent",
      "fields": [
        { "name": "Customer", "dataType": "string" },
        { "name": "Total", "dataType": "number" }
      ]
    }
  ],
  "bands": {
    "detail": {
      "kind": "detail",
      "height": 28,
      "elements": [
        {
          "type": "textBox",
          "id": "customer",
          "x": 0,
          "y": 0,
          "width": 220,
          "height": 20,
          "expression": "=Fields.Customer"
        }
      ]
    }
  }
}

The package includes docs/report-definition.schema.json in the NuGet package. Use it for AI authoring guidance, editor validation, and contract documentation. Runtime validation should still go through ReportDefinitionValidator, because it can apply semantic rules that JSON Schema cannot express well.

Element Discriminators

The current schema version (ReportDefinition.CurrentSchemaVersion == 1) supports:

  • textBox
  • image
  • shape
  • line
  • table
  • chart
  • subReport

RDL Import

RdlReportImporter (namespace Tempo.Reporting.Abstractions.Definitions.Rdl) maps SSRS / Telerik RDL XML onto ReportDefinition. Elements are matched by local name, so the SSRS 2008 / 2010 / 2016 schema namespaces and Telerik-namespaced RDL all parse without a hardcoded namespace.

var result = new RdlReportImporter().Import(rdlXml);   // also accepts a Stream
if (result.HasErrors) { /* result.Errors -> block; nothing is persisted */ }
var json = ReportDefinitionJsonSerializer.Serialize(result.Definition);

The body is resolved as a direct Report/Body (RDL 2008) or Report/ReportSections/ReportSection/Body (RDL 2010/2016, the shape Report Builder emits). Multi-section reports import the first section and say so.

Mapped: report name/description, page size and margins (in/cm/mm/pt/pc/px converted to points), ReportParameters, DataSources/DataSets (query, command text, fields, query-parameter bindings), and the body report items Textbox, Tablix/Table, Chart (including the Stacked subtypes), Image, Rectangle and Line.

Nothing is dropped silently. Every construct outside the supported subset produces an RdlImportDiagnostic: subreports, matrices, lists, gauges, maps, custom report items, custom code and CodeModules, embedded image bytes, page headers/footers, report variables, custom properties, additional report sections, per-item Visibility/Action, tablix row and column grouping, unmapped chart types (imported as a column chart), data-set Filters/SortExpressions, calculated-field expressions, and data-set-backed parameter defaults/valid values.

The importer never invents content: an RDL textbox with no value is skipped with a diagnostic rather than backfilled with its designer-generated name. Where the definition model is stricter than RDL the importer repairs and reports — a hidden parameter with no default gets a null default and is marked optional, and a multi-value parameter is coerced to List. RDL Nullable is not the same as "optional", so that mapping is diagnosed too.

Malformed XML or a non-Report root returns an Error diagnostic rather than throwing. Full RDL fidelity is out of scope — imported reports should be reviewed in the designer.

Minimal Host Contract

public sealed class OrdersDataProvider : IReportDataProvider
{
    public Task<ReportDataSetResult> GetDataAsync(
        string dataSetName,
        ReportDataQuery query,
        IReadOnlyDictionary<string, ReportParameterValue> parameters,
        ReportExecutionContext context)
    {
        // Return declared fields plus streamed rows for the requested data set.
    }
}

Use ReportExecutionContext to carry tenant, user, culture, and cancellation information across data providers, validators, engine processing, and server endpoints.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Tempo.Reporting.Abstractions:

Package Downloads
Tempo.Reporting.Engine

Tempo Reporting processing engine with expression evaluation, parameter resolution, layout, snapshots, PDF/PNG rendering, and CSV/XLSX export primitives.

Tempo.Blazor.Mcp

Model Context Protocol (MCP) tools for designing and editing Tempo.Blazor wireframes, diagrams, editor documents and reports with an LLM. Ships tools + storage abstractions only; the host application maps them onto its own MCP server.

Tempo.Blazor.Reporting

Blazor reporting components for Tempo Reporting: report viewer, parameter panel, explorer, lightweight designer, embedded sources, and remote Report Server integration.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.8.3 43 7/26/2026
2.8.1 42 7/26/2026
2.8.0 50 7/25/2026
2.7.1 57 7/24/2026
2.7.0 55 7/24/2026
2.6.1 65 7/23/2026
2.6.0 62 7/23/2026
2.5.5 77 7/22/2026
2.5.4 72 7/22/2026
2.5.3 97 7/21/2026
2.5.3-ci-20260721185803 102 7/21/2026
2.5.2 97 7/21/2026
2.5.1 166 7/19/2026
2.4.0 162 7/19/2026
2.3.10-ci-20260719120426 149 7/19/2026
2.3.10-ci-20260719052650 157 7/19/2026
2.3.9-preview 140 7/17/2026
2.3.9-ci-20260719043811 161 7/19/2026
2.3.9-ci-20260717060118 141 7/17/2026
2.3.8-ci-20260717035306 141 7/17/2026
Loading failed