---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.MVC
reference_type: package
---

# Configuration settings

`SAIF.Presentation.Web.MVC` is the most configuration-dependent library in this repository. It reads nine runtime settings through three distinct channels: the SAIF framework environment service (`AppGlobal.EnvironmentService.GetConfigSetting`, including two well-known `EnvironmentConfigKeys` constants that resolve database connections), the classic `System.Configuration.ConfigurationManager.AppSettings` collection (five keys covering error routing, trace logging, and view-state persistence), and a `System.Diagnostics.TraceSwitch` bound to the host `<system.diagnostics><switches>` section. Because it is a class library, it ships none of these values itself — its own `app.config` contains only a `Newtonsoft.Json` binding redirect, so every hosting web application must declare them.

## Configuration retrieval methods

| Method | Class / Interface | Namespace | Usage pattern |
| --- | --- | --- | --- |
| `GetConfigSetting(String)` — qualified | `AppGlobal.EnvironmentService` | `SAIF.Framework.Security` (package `SAIF.BOF.Framework`) | Called inline with an `EnvironmentConfigKeys` constant; the returned value is handed to the connection factory (`clsConnection.getConnection`) or to `clsMSOracleDataLayer` |
| `GetConfigSetting(String)` — unqualified | `EnvironmentService` (imported via `Imports SAIF`) | `SAIF.Framework.Security` | Single call with a string-literal key in `clsControllerBase.HandleErrors` |
| `ConfigurationManager.AppSettings.Item(String)` | `System.Configuration.ConfigurationManager` | `System.Configuration` | Used both fully qualified (`HandleErrors`) and unqualified through `Imports System.Configuration.ConfigurationManager` (`clsControllerBase.New`), each guarded by an `IsNothing` check before conversion |
| `ConfigurationManager.AppSettings.Get(String)` | `System.Configuration.ConfigurationManager` | `System.Configuration` | Fully-qualified call whose result is parsed with `Boolean.TryParse` in `ViewPageBase.PageStatePersister` |
| `New TraceSwitch(displayName, description, defaultSwitchValue)` | `System.Diagnostics.TraceSwitch` | `System.Diagnostics` | Shared field initialized once per app domain; the switch level is supplied by the host `<system.diagnostics><switches>` section, defaulting to `Error` |

No `GetSecureConfigSetting`, `SystemHashUtil.ComputeHash`, `DbConnectionManager`, `WebConfigurationManager`, or `<connectionStrings>` usage appears in live code.

## Environment API settings

Settings retrieved via `IEnvironmentService` (centralized environment configuration service).

| Setting key | Method | Data type | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- | --- |
| `netFrameworkSqlServer`† (`EnvironmentConfigKeys.NetFrameworkSqlServer`) | `GetConfigSetting` | String | Resolves the SQL Server instance used to persist, retrieve, and delete cross-application context rows | `clsContext.clsContextRepository` (`Delete`, `Retrieve`, `Save`) | SAIF.Presentation.Web.MVC/clsContext.vb |
| `oracleDatabase`† (`EnvironmentConfigKeys.OracleDatabase`) | `GetConfigSetting` | String | Resolves the Oracle database used to load a user's authorized menu items under schema `MENU` | `NavigationContext.New(inUser As String)` | SAIF.Presentation.Web.MVC/NavigationContext.vb |
| `policymanagement.supportemaillist` | `GetConfigSetting` | String | Support distribution list e-mailed for every framework-handled error | `clsControllerBase.HandleErrors` | SAIF.Presentation.Web.MVC/clsControllerBase.vb |

`EnvironmentConfigKeys` is defined in `SAIF.Framework.Security` in the `SAIF.BOF.Framework` package, not in this repository; its literal values are `NetFrameworkSqlServer = "netFrameworkSqlServer"` and `OracleDatabase = "oracleDatabase"`†. `policymanagement.supportemaillist` is a string literal with no indirection. The SQL Server key is re-read on every context-repository operation rather than cached; the support e-mail list is read on every framework-handled error with no guard for a missing value.*

## AppSettings (Web.config)

Settings retrieved via `ConfigurationManager.AppSettings`.

| Setting key | Default value | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- |
| `ErrorPageName` | Not declared in this repository; code falls back to `http://saifonline/weberror/processerror.aspx` for callers matching `10.*.*.*`, otherwise `https://saifonline.saif.com/weberror/processerror.aspx` | Absolute URL of the central error page used by [Central error handling](operations/central-error-handling.md) ([BR-MVC-025](business-rules.md#br-mvc-025-the-error-page-falls-back-by-network-zone-when-unconfigured)) | `clsControllerBase.HandleErrors` | SAIF.Presentation.Web.MVC/clsControllerBase.vb |
| `TraceLogging` | Not declared; when absent, the block is skipped and `clsLogTrace.IsEnabled` keeps its framework default | Diagnostic toggle for framework trace logging | `clsControllerBase.New` | SAIF.Presentation.Web.MVC/clsControllerBase.vb |
| `PageTraceOn` | Not declared; only evaluated when `TraceLogging` or `TraceUser` is present, otherwise `clsLogTrace.PageOutputEnabled` keeps its framework default | Diagnostic toggle that writes trace output into the rendered page | `clsControllerBase.New` | SAIF.Presentation.Web.MVC/clsControllerBase.vb |
| `TraceUser` | Not declared; when absent, `clsLogTrace.TraceUser` is left unset | Names a specific user to trace | `clsControllerBase.New` | SAIF.Presentation.Web.MVC/clsControllerBase.vb |
| `EXT_VIEWSTATE_SESSION` | Not declared; `Boolean.TryParse` leaves the local `False` when missing or unparsable | Moves view state into session storage for external/all users ([BR-MVC-030](business-rules.md#br-mvc-030-view-state-may-be-moved-into-session-for-externalall-users)) | `ViewPageBase.PageStatePersister` | SAIF.Presentation.Web.MVC/ViewPageBase.aspx.vb |

All five keys are accessed in code but declared in no config file in this repository — they are supplied by the hosting application's `web.config`. The library's own `app.config` contains only an assembly binding redirect and declares no `<appSettings>` element. `TraceLogging` and `PageTraceOn` are converted with `CBool` inside a `Try` block whose `Catch` deliberately swallows all exceptions, so an unparsable trace value silently disables the remaining trace configuration; `EXT_VIEWSTATE_SESSION` uses `Boolean.TryParse` instead. `TraceUser` is assigned as a string with no format validation. `ErrorPageName` must be an absolute URL — it is concatenated with `?MSG=…&Return=…` and passed to `Response.Redirect`.

A tenth setting, `SAIFTracingSwitch`, is read through `System.Diagnostics.TraceSwitch` rather than `AppSettings`: it is bound to the host `<system.diagnostics><switches>` section, defaults to `Error`, and controls `TraceInfo`/`TraceWarning` emission around unauthorized-user redirection (`clsControllerBase`, shared field `TracingSwitch`, SAIF.Presentation.Web.MVC/clsControllerBase.vb).

## Database connection configuration

Connection strings and database provider settings consumed by this library.

| Connection name | Provider | Retrieval method | Purpose | Source |
| --- | --- | --- | --- | --- |
| Cross-application context store | SQL Server (`System.Data.SqlClient.SqlConnection` opened by the framework factory `clsConnection.getConnection`) | `netFrameworkSqlServer`† plus fixed arguments database `APPM`, application tag `NETFRAMEWORK` | Persists, retrieves, and deletes rows in the [Context](database-tables.md#context) table that carry context between SAIF applications | SAIF.Presentation.Web.MVC/clsContext.vb |
| Menu authorization data layer | Oracle (`SAIF.Framework` `clsMSOracleDataLayer`) | `oracleDatabase`† plus hard-coded schema/user `MENU` | Loads the user's authorized menu items via `clsMenuAuthorizedItemCollection.GetMenuAuthorizedItems`, backing all `NavigationContext` page-authorization answers | SAIF.Presentation.Web.MVC/NavigationContext.vb |

Fixed (non-configurable) connection parameters — SQL Server database `APPM`, application tag `NETFRAMEWORK`, and Oracle schema/user `MENU` — are hard-coded literals; only the server/environment portion is configurable. No `DbConnectionManager` call, no `<connectionStrings>` entry, and no credential material exists in this repository — credential resolution is delegated to `clsConnection` and `clsMSOracleDataLayer` in the framework package.*

## Secure settings

No secure configuration is retrieved. `SAIF.HashUtil` is a package reference of the project, but no `SystemHashUtil.ComputeHash` or `GetSecureConfigSetting` call appears in live code — database credentials are obtained inside the framework connection factory rather than through a secure-config lookup here.*

## Transitive configuration (from dependencies)

Settings required at runtime by referenced libraries or packages, not directly consumed by this library's code.

| Setting key | Method | Source dependency | Dependency type | Purpose |
| --- | --- | --- | --- | --- |
| `oracleDatabase`† (`EnvironmentConfigKeys.OracleDatabase`) | `GetConfigSetting` | SAIF.Presentation | Project Reference | `clsPreferences.Load` builds its Oracle preference data layer (schema/user `CLM`) from this key; `clsModelBase.Pre_Init` constructs `clsPreferences`. The key is already required directly by this library, so it adds no new host requirement, but it is consumed under a **different** schema (`CLM` vs. `MENU`) |

`SAIF.Business.Menu` was scanned and requires no additional configuration: no `IEnvironmentService`, `ConfigurationManager.AppSettings`, or `DbConnectionManager` usage appears in its live code — it obtains its data portal from the caller (`IDataPortalInfo` passed in by `NavigationContext`) rather than reading configuration itself. Package-level transitive configuration for `SAIF.BOF.Framework` (`SAIF.Framework`, `SAIF.Framework.Preferences`), `SAIF.Framework.Common`, `SAIF.HashUtil`, and `SAIF.Web.API.Clients` could not be fully confirmed — whether those packages read additional keys internally is not determinable from this repository.**

## Configuration dependencies

| Dependency | Type | Required at | Impact if missing |
| --- | --- | --- | --- |
| `netFrameworkSqlServer`† | Environment service setting | Request (any context save/retrieve/delete) | Context repository operations fail; cross-application hand-off breaks |
| `oracleDatabase`† | Environment service setting | Request (first request of a session) | `NavigationContext` construction fails; menu authorization cannot be established |
| `policymanagement.supportemaillist` | Environment service setting | Request (error handling) | Support notification e-mail cannot be sent; a missing value risks a secondary failure inside `HandleErrors`* |
| `ErrorPageName` | AppSettings key | Request (error handling) | Falls back to the hard-coded `10.*.*.*` heuristic to choose an intranet or public error page |
| `TraceLogging` / `PageTraceOn` / `TraceUser` | AppSettings keys | Startup (controller construction) | Diagnostic tracing keeps its framework default (effectively off); an unparsable value silently disables the rest of trace configuration |
| `EXT_VIEWSTATE_SESSION` | AppSettings key | Request (view-state persistence) | View state is not moved into session storage; defaults to standard page-based persistence |
| `SAIFTracingSwitch` | `<system.diagnostics><switches>` section | Startup (app domain) | Trace switch defaults to `Error`, the least verbose level |
| `Context` (SQL Server, database `APPM`) | Database table | Request (cross-application navigation) | [Persist context rows](operations/persist-context-rows.md), [Retrieve and consume context rows](operations/retrieve-context-rows.md) fail |
| Oracle `MENU` schema | Database schema | Request (first request of a session) | [Load the user's authorized menu](operations/load-authorized-menu.md) fails; no page can be authorized |

## Notes
- The value format expected for `netFrameworkSqlServer` and `oracleDatabase` (server name, logical environment name, or full connection string) is decided inside `clsConnection.getConnection` and `clsMSOracleDataLayer` in the framework package.**
- Whether the framework environment service supplies defaults, throws, or returns empty for an unknown key is not observable from this repository — this determines whether missing settings fail fast or fail late.**
- Which hosting applications declare `EXT_VIEWSTATE_SESSION` as `True`, and whether `PageTraceOn` is ever enabled outside development, cannot be determined here.**
- The `Context` table's owning schema on the `APPM` database is not stated in code — only the database and application tag are passed to the connection factory.**

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

## Sources
- SAIF.Presentation.Web.MVC/clsContext.vb
- SAIF.Presentation.Web.MVC/clsControllerBase.vb
- SAIF.Presentation.Web.MVC/NavigationContext.vb
- SAIF.Presentation.Web.MVC/ViewPageBase.aspx.vb
- SAIF.Presentation.Web.MVC/ViewControlBase.ascx.vb
- SAIF.Presentation.Web.MVC/clsModelBase.vb
- SAIF.Presentation.Web.MVC/clsFactoryBase.vb
- SAIF.Presentation.Web.MVC/clsOnlineContext.vb
- SAIF.Presentation.Web.MVC/app.config
- SAIF.Presentation.Web.MVC/packages.config
- SAIF.Presentation.Web.MVC/SAIF.Presentation.Web.MVC.vbproj
- SAIF.Presentation.Web.MVC/My Project/Settings.settings
