---
title: SAIF.Presentation.Web.Core.Infragistics111 architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Core.Infragistics111
reference_type: package
---

# SAIF.Presentation.Web.Core.Infragistics111 architecture

`SAIF.Presentation.Web.Core.Infragistics111` is the top-most assembly of the presentation package's build chain: it supplies the WebForms page/master-page base classes, the application-level MVC-triad extensions, control-manipulation and mail/download utilities, and the menu navigation/authorization context that every SAIF Business Online screen is built on. It is also the ILMerge host that consolidates the sibling presentation assemblies into the single shipped `SAIF.Presentation.Web.Infragistics111.dll`.

## Responsibilities
- Provide the WebForms page (`AppViewPageBase`) and master-page (`AppViewMasterPageBase`) base classes that every consuming application screen inherits, adding session keep-alive, control back-color reset, grid preference persistence and hover-help wiring on top of the MVC-style `ViewPageBase`.
- Extend the framework MVC triad for application use through `clsAppControllerBase` and `clsAppModelBase` (write-status enum, standard user messages, mail-request fields, grid customizer collection).
- Resolve per-user menu authorization and navigation state (`NavigationContext`), bridging the presentation layer to the Oracle-backed `SAIF.Business.Menu` collections.
- Offer stateless presentation utility services — control manipulation (`Utilities.clsControlManager`), string cleaning (`Utilities.clsStringUtilities`), and mail/file-download helpers (`Utilities.clsMailMessage`) — reused across the presentation stack.
- Merge the sibling presentation assemblies (`SAIF.Presentation`, `SAIF.Presentation.Web.Binding.Infragistics111`, `SAIF.Presentation.Web.Controls.V2`, `SAIF.Presentation.Web.Controls.Infragistics111`, `SAIF.Presentation.Web.Controls.V2.Menu`, `SAIF.Presentation.Web.MVC`, `SAIF.Business.Menu`, `SAIF.Presentation.Web.Controls.AJAX.Infragistics111`) into the single deployed `SAIF.Presentation.Web.Infragistics111.dll` via `postbuild.bat`/ILMerge.

## Component boundaries
- **Page/master lifecycle layer** (`AppViewPageBase`, `AppViewMasterPageBase`): sits atop every consuming application's WebForms page hierarchy; extends `SAIF.Presentation.Web.MVC.ViewPageBase`.
- **MVC triad extension layer** (`clsAppControllerBase`, `clsAppModelBase`): extends `SAIF.Presentation.Web.MVC`'s `clsControllerBase` / `clsModelBase` with application-level conventions.
- **Presentation utility layer** (`Utilities.clsControlManager`, `Utilities.clsStringUtilities`, `Utilities.clsMailMessage`, `clsNestedMaster`): stateless static helper services with no dependency on the page hierarchy beyond the `AppViewPageBase` parameter accepted by `StreamDownloadFile`.
- **Navigation/authorization context layer** (`NavigationContext`): the only type in the library that reaches a database; composes `SAIF.Business.Menu` collections over an Oracle data layer (`clsMSOracleDataLayer`, DB user `MENU`) to answer "what menu items is this user authorized to see, and where am I now". No direct SQL is issued by this library — all statement execution is delegated to `SAIF.Business.Menu`.

## Interaction model
- Consuming application pages inherit `AppViewPageBase`, which on `Init`/`Load` wires session keep-alive (`CallSessionPing`, gated by `AppGlobal.EnvironmentService.IsClientExternal`*) and control back-color reset (`Utilities.clsControlManager.ResetBackColor`).
- `AppViewMasterPageBase`-derived master pages compose the standard SAIF chrome, delegating menu rendering to `SAIFMenu` / `SAIFMenuTop` (`SAIF.Presentation.Web.Controls.V2.Menu`) and banner rendering to `BannerControl` (`SAIF.Presentation.Web.Controls.V2`).
- `NavigationContext` is constructed once per session bootstrap with the authenticated user name; it opens `clsMSOracleDataLayer("MENU", …)` and loads `clsMenuAuthorizedItemCollection` (`SAIF.Business.Menu`), then answers all subsequent navigation questions from the in-memory authorized set (no further database access).
- `clsMailMessage` calls the legacy `SAIFMail.clsSAIFMessage` SOAP service, whose endpoint URL is resolved per call from `AppGlobal.EnvironmentService.GetConfigSetting("LegacyMailWebServiceUrl")`.
- Preference persistence for grid column/sort/size state flows through `m_controller.Model.Preferences` (`SAIF.Framework.Preferences`, package `SAIF.BOF.Framework`), reached transitively via `SAIF.Presentation`'s `clsPreferences`.

## Architecture diagram
The following diagram shows how a consuming application page flows through this library's components.

```mermaid
flowchart TD
	A["Consuming app page<br>(inherits AppViewPageBase)"] --> B["AppViewPageBase<br>Page_Init / Page_Load"]
	B --> C["CallSessionPing()<br>registers PingSession.js"]
	B --> D["clsControlManager.ResetBackColor(Me)"]
	A --> E["Preference operations<br>Apply/Save/ClearPreferences"]
	E --> F["m_controller.Model.Preferences<br>(SAIF.Framework.Preferences)"]
	A --> G["AppViewMasterPageBase<br>chrome accessors"]
	G --> H["SAIFMenu / SAIFMenuTop / BannerControl<br>(Controls.V2 + V2.Menu)"]
	A --> I["NavigationContext"]
	I --> J["clsMSOracleDataLayer<br>MENU_ENVIRONMENT, DB user MENU"]
	J --> K["SAIF.Business.Menu collections<br>(authorized menu items)"]
	A --> L["clsMailMessage.SendMail"]
	L --> M["SAIFMail.clsSAIFMessage<br>legacy mail SOAP service"]
```

## Sequence diagram
The following diagram shows the primary menu-authorization bootstrap sequence.

```mermaid
sequenceDiagram
	participant Page as Consuming page
	participant Nav as NavigationContext
	participant DAL as clsMSOracleDataLayer
	participant Menu as SAIF.Business.Menu
	Page->>Nav: New(inUser)
	Nav->>DAL: New("MENU", MENU_ENVIRONMENT)
	DAL-->>Nav: IDataPortalInfo
	Nav->>Menu: clsMenuAuthorizedItemCollection.GetMenuAuthorizedItems(dpi, user)
	Menu-->>Nav: Authorized item collection
	Page->>Nav: IsMenuItem / GetCurrentPage / GetItem
	Nav-->>Page: In-memory lookup result (no further DB access)
```

## Design constraints
- The library targets .NET Framework 4.6.1 WebForms and is bound to Infragistics 11.1 control assemblies for grid-preference and control-manipulation behavior.
- `NavigationContext` never re-validates that the supplied user name matches the authenticated identity — callers (`SAIF.Presentation.Web.MVC`, `SAIF.Presentation.Web.Controls.V2.Menu`) are responsible for supplying a trusted identity value.*
- The Oracle environment name (`MENU_ENVIRONMENT`) is read via raw `ConfigurationManager.AppSettings` rather than the framework environment service, so it must be independently maintained in every hosting application's `web.config`.
- This library is the ILMerge host; its `postbuild.bat` step couples the build/release process of eight other libraries to this project's build.
- No local business rules are enforced beyond UI/session conventions (session-ping gating, control back-color rules); menu authorization rules themselves are enforced by `SAIF.Business.Menu`.

> **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)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Configuration](configuration.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

## Sources
- `SAIF.Presentation.Web.Core.Infragistics111/AppViewPageBase.aspx.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/AppViewMasterPageBase.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/clsAppControllerBase.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/clsAppModelBase.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/clsControlManager.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/clsMailMessage.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/NavigationContext.vb`
- `SAIF.Presentation.Web.Core.Infragistics111/postbuild.bat`
