---
title: ReportBase
summary: API reference for ReportBase.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-24
library: SAIF.Services.Printing
reference_type: package
---

# ReportBase

`ReportBase` is the reusable `IReport` implementation in this library. It stores report state, delegates xPression transport work to `clsPrint`, applies output-profile conventions, and records failures in `ErrorDetail` instances instead of re-throwing them from render and distribute operations.

## Purpose
- Provide a base implementation of the `IReport` workflow.
- Centralize report rendering, printing, distribution, saving, and error handling logic.

## Context
- Namespace: `SAIF.Services.Printing.Reporting`
- Assembly/package: `SAIF.Services.Printing`

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `XpressoEnvironments` | `Public Enum XpressoEnvironments` | Enumerates xPression environment labels tracked by the class. See [XpressoEnvironments](XpressoEnvironments.md). |
| `New` | `Public Sub New()` | Creates an instance using `AppGlobal.EnvironmentService`. |
| `New` | `Public Sub New(envSvc As EnvironmentServiceBase)` | Creates an instance using a supplied environment service. |
| `XpressoEnvironment` | `Public Property XpressoEnvironment() As XpressoEnvironments` | Gets or sets the xPression environment label stored by the report. |
| `Errors` | `Public ReadOnly Property Errors() As IList(Of ErrorDetail)` | Returns the mutable collection of processing errors. |
| `xPrint` | `Public ReadOnly Property xPrint() As clsPrint` | Lazily creates and returns the `clsPrint` transport helper. |
| `ReportPackage` | `Public Property ReportPackage() As String` | Gets or sets the xPression package name used for rendering and distribution. |
| `DestinationFileName` | `Public Property DestinationFileName() As String` | Gets or sets the path used by `Save`. |
| `OutputProfile` | `Public Property OutputProfile() As String` | Gets or sets the current xPression output profile. |
| `ReportFile` | `Public ReadOnly Property ReportFile() As Byte()` | Returns the cached rendered report bytes. |
| `ReportXml` | `Public ReadOnly Property ReportXml() As XDesignXDocument` | Returns the current report XML document. |
| `Create` | `Public Overridable Function Create(Optional overwrite As Boolean = False) As XDesignXDocument` | Clears the error list and returns the current report XML document. |
| `Render` | `Public Function Render(Optional overwrite As Boolean = False) As Boolean` | Renders the report through `clsPrint.previewDocument` and caches the resulting bytes. |
| `Print` | `Public Function Print(printer As String, Optional overwrite As Boolean = False) As Boolean` | Renders if needed, assigns the printer, and prints the cached bytes. |
| `Distribute` | `Public Function Distribute(Optional overwrite As Boolean = False) As Boolean` | Creates report XML if needed, then distributes the report through `clsPrint`. |
| `Save` | `Public Function Save(Optional overwrite As Boolean = False) As Boolean` | Renders if needed and writes the cached bytes to `DestinationFileName`. |
| `SetDefaultProfile` | `Public Sub SetDefaultProfile()` | Sets `OutputProfile` to the standard PDF profile constant. |
| `SetDraftProfile` | `Public Sub SetDraftProfile()` | Sets `OutputProfile` to the draft watermark PDF profile constant. |

## Behavioral notes
- `Render` enforces [BR-003](../../business-rules.md#br-003-report-rendering-selects-the-default-printer-by-execution-platform) by resolving a default printer from `clsSecurityPrincipal`.
- `Render`, `Print`, and `Save` follow [BR-004](../../business-rules.md#br-004-rendered-bytes-are-reused-until-overwrite-is-requested) by reusing cached bytes unless overwrite is requested.
- `SetDefaultProfile` and `SetDraftProfile` enforce [BR-005](../../business-rules.md#br-005-output-profiles-switch-between-standard-and-draft-pdf-modes).
- `Render` and `Distribute` catch exceptions and append `ErrorDetail` instances to `Errors` instead of propagating the exception directly.

## Constraints and usage notes
- Derived classes or callers must ensure that `ReportPackage` and `ReportXml` are populated before render or distribution operations run.
- `Save` only writes a file when `DestinationFileName` is populated and the file does not already exist, unless overwrite is requested.
- `Create` does not build XML by itself; it returns the current `m_reportXml` value after clearing prior errors.

## Sources
- `Services\SAIF.Services.Printing\Reporting\ReportBase.vb`
