This page captures business rules enforced by SAIF.Presentation's sole public type, clsPreferences. All persistence is delegated to SAIF.Framework.Preferences.PreferenceData; no rule in this library involves SQL or database tables owned by this repository.
BR-PRES-001: Preference store scoped to one application¶
Field
Value
Statement
A preference store is always scoped to one application name supplied at construction.
Trigger
clsPreferences construction
Enforcement
clsPreferences.vb (Initialize)
Outcome
All reads and writes filter on that application.
Source
SAIF.Presentation/clsPreferences.vb
BR-PRES-002: Preference access uses the fixed Oracle user CLM¶
Field
Value
Statement
Preference data is always read as the fixed Oracle user CLM, against the database named by the framework OracleDatabase configuration key.
Trigger
Load
Enforcement
clsPreferences.vb (Load)
Outcome
Preference access runs under a dedicated, environment-resolved account.
Source
SAIF.Presentation/clsPreferences.vb
BR-PRES-003: Effective user identity comes from the data portal¶
Field
Value
Statement
The effective user identity for preference storage is the data portal's UserID, not the user ID passed to the constructor.
Trigger
Load, Save
Enforcement
clsPreferences.vb
Outcome
Preferences follow the authenticated data-portal identity.
Source
SAIF.Presentation/clsPreferences.vb
BR-PRES-004: All preferences loaded eagerly on construction¶
Field
Value
Statement
All of a user's preferences (every application, every page) are loaded eagerly on construction.
Trigger
Load
Enforcement
clsPreferences.vb (Load)
Outcome
Subsequent reads incur no database round trips.
Source
SAIF.Presentation/clsPreferences.vb
BR-PRES-005: User ID trimmed and lower-cased for lookup¶
Field
Value
Statement
The user ID used for the preference lookup is trimmed and lower-cased.
Trigger
Load
Enforcement
clsPreferences.vb (Load)
Outcome
Case and whitespace differences do not split a user's preferences.
Save() always returns False even on success — the result local is never assigned True before the (unreachable) trailing trace call. Callers checking the boolean return value of Save() cannot rely on it to detect failure; failures are instead signaled by the ApplicationException described in BR-PRES-024.*
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.