---
title: SAIF.Presentation operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF Documentation Team
last_reviewed: 2026-08-17
library: SAIF.Presentation
reference_type: package
---

# SAIF.Presentation operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Load preferences for current user](operations/load-preferences.md) | Populate the in-memory preference cache for the authenticated user | Constructing a `clsPreferences` instance | `inUserID`, `inApplication` (optional `preferencesRootDirectory`, ignored) | Populated `_Preferences` list | [BR-PREF-005](business-rules.md#br-pref-005-fixed-oracle-database-user) | N/A | N/A |
| [Read a preference value](operations/read-preference.md) | Retrieve a stored preference value by key/scope | Consumer accesses the `Item` indexer | Key, optional scope, optional explicit application/page | Preference value (`Object`) or `Nothing` | [BR-PREF-001](business-rules.md#br-pref-001-preference-scoping-by-application-and-page), [BR-PREF-002](business-rules.md#br-pref-002-preference-key-case-normalization) | N/A | N/A |
| [Write or clear a preference value in memory](operations/write-preference.md) | Add, remove, or clear preference key-value pairs before saving | Consumer calls `Add`, `Remove`, `Clear`, or `Delete` | Key, value, optional scope | Mutated in-memory `_Preferences` collection | [BR-PREF-001](business-rules.md#br-pref-001-preference-scoping-by-application-and-page), [BR-PREF-002](business-rules.md#br-pref-002-preference-key-case-normalization) | N/A | N/A |
| [Persist preferences](operations/save-preferences.md) | Write accumulated in-memory preference changes to the Oracle-backed store | Consumer calls `Save()` | None (uses in-memory `_Preferences` and `m_DPI`) | `Boolean` (always `False`); persisted rows in the Oracle preference store | [BR-PREF-003](business-rules.md#br-pref-003-save-scoped-to-current-application), [BR-PREF-004](business-rules.md#br-pref-004-save-return-value-is-unreliable) | N/A | N/A |

## Process flow diagram
The following diagram visualizes the primary operational flow across operations.

```mermaid
flowchart TD
	Start([Consumer constructs clsPreferences]) --> Load[Load preferences for current user]
	Load --> Read[Read a preference value]
	Load --> Write[Write or clear a preference value in memory]
	Write --> Save[Persist preferences via Save]
	Save --> Decision{Exception thrown?}
	Decision -->|Yes| EndErr([ApplicationException propagated])
	Decision -->|No| EndOk([Preferences persisted<br>return value always False])
```

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Load preferences for current user](operations/load-preferences.md) | N/A (delegated to `PreferenceData`, external library)** | N/A | Read |
| [Persist preferences](operations/save-preferences.md) | N/A (delegated to `PreferenceData`, external library)** | N/A | Write |

## Failure and edge-case behavior
- `Load()` performs no error handling; exceptions from the Oracle data layer or `PreferenceData` propagate uncaught to the caller.
- `Save()` wraps all persistence calls in a `Try/Catch` and rethrows any exception as `ApplicationException("Unable to save preferences.", ex)`; its `Boolean` return value is always `False` and cannot be used to detect success ([BR-PREF-004](business-rules.md#br-pref-004-save-return-value-is-unreliable)).
- `Delete()` clears preference items across **all** loaded application groups for the user, not just the current application — broader in effect than `Clear()`*.

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Configuration](configuration.md)
- [API reference](api/index.md)

## Sources
- SAIF.Presentation\clsPreferences.vb
