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

# SAIF.Presentation.Web.Core.Infragistics103 architecture

This library provides the base-class layer for the "AppMVCBase" web-forms application pattern* used by SAIF web applications built on Infragistics 10.3 controls. It sits directly above the framework-level MVC abstractions in `SAIF.Presentation.Web.MVC`/`SAIF.Presentation` (`clsControllerBase`, `clsModelBase`, `ViewPageBase`) and is intended to be subclassed by individual application projects, whose screens define their own Controller/Model/Page/MasterPage deriving from the base classes defined here.

## Responsibilities
- Own page/master-page lifecycle concerns for consuming applications: session keep-alive ("ping"), grid column/sort/size preference persistence (via `SAIF.Framework.Preferences`), focus-control JavaScript generation for Infragistics editors, hover-help configuration, and grid-row validation-error highlighting (`AppViewPageBase`, `AppViewMasterPageBase`).
- Extend the framework's `clsControllerBase`/`clsModelBase` with SAIF-specific conventions: numeric-menu-context validation, standard save/delete message constants, and mail/grid-customizer plumbing (`clsAppControllerBase`, `clsAppModelBase`). Concrete validation/write logic is expected to be supplied by descendant models in consuming applications, since `ValidateData`/`WriteData` are stub no-op overrides here.
- Provide stateless, `Shared`-only UI utility helpers for enabling/disabling/protecting form controls (via reflection over `Control` properties), binding dropdown/grid value lists, generating grid-edit-mode/scroll JavaScript, and traversing nested master-page hierarchies (`Utilities.clsControlManager`, `Utilities.clsStringUtilities`, `clsNestedMaster`).
- Act as the presentation-layer entry point into the BOF Menu subsystem: open an Oracle BOF data connection scoped to a fixed `MENU` DB user and delegate to `SAIF.Business.Menu` collections to resolve which menu items/pages the current application/user context is authorized to see (`NavigationContext`).
- Wrap a legacy SOAP web service for outbound mail with/without attachments, and provide a generic file-streaming download helper independent of mail (`Utilities.clsMailMessage`).

## Component boundaries
- **View layer base classes** (`AppViewPageBase`, `AppViewMasterPageBase`): own page/master-page lifecycle concerns; consuming pages/masters derive from these.
- **Controller/Model layer base classes** (`clsAppControllerBase`, `clsAppModelBase`): thin extensions of the framework's `clsControllerBase`/`clsModelBase` adding SAIF-specific conventions; consuming controllers/models derive from these.
- **Cross-cutting UI utility layer** (`Utilities.clsControlManager`, `Utilities.clsStringUtilities`, `clsNestedMaster`): stateless helper classes called by the view layer and by consuming page code.
- **Menu/navigation authorization boundary** (`NavigationContext`): the presentation-layer entry point into the BOF Menu subsystem; delegates the actual query/authorization logic to `SAIF.Business.Menu`, which is out of scope for this library.
- **Email utility layer** (`Utilities.clsMailMessage`): wraps a legacy SOAP web service (`SAIFMail.clsSAIFMessage`) for outbound mail and file-download streaming.

An additional, less-clear boundary is present*: the project file declares `<ProjectReference>` entries to several Infragistics 10.3 control libraries (`SAIF.Presentation.Web.Controls.AJAX.Infragistics103`, `.Controls.Claim`, `.Controls.Policy`, `.Controls.V2.Menu`, `.Controls.V2`) and `SAIF.Business.Menu`, in addition to the expected framework references (`SAIF.Presentation.Web.MVC`, `SAIF.Presentation`). Beyond the confirmed use of `SAIF.Business.Menu` collections in `NavigationContext.vb`, the analysis did not identify specific type usage of the Controls-library references within this project's own scanned source**, so their exact role in this component's boundaries could not be confirmed from code alone.

## Interaction model
- Consuming application pages/masters/controllers/models derive from this library's base classes, which in turn derive from `SAIF.Presentation.Web.MVC`/`SAIF.Presentation` framework base classes (e.g., `AppViewPageBase` inherits `SAIF.Presentation.Web.mvc.ViewPageBase`).
- The view layer calls into the cross-cutting utility layer (`clsControlManager`, `clsMailMessage`) and into `NavigationContext` for menu/navigation concerns; it does not call `SAIF.Business.Menu` directly.
- `NavigationContext` opens an Oracle BOF data connection (`clsMSOracleDataLayer`, from `SAIF.Framework`) scoped to a fixed `MENU` DB user, then delegates authorization/query logic to `SAIF.Business.Menu` collection classes.
- `clsMailMessage` calls a legacy SOAP web service (`SAIFMail.clsSAIFMessage`) whose endpoint URL is resolved at runtime via `AppGlobal.EnvironmentService.GetConfigSetting("LegacyMailWebServiceUrl")`; the `SAIFMail` proxy type itself is not defined in this project and is presumed supplied transitively through one of the `ProjectReference`s**.
- Grid preference persistence (`AppViewPageBase.ApplyColumnPreferences`/`ApplySortPreferences`/`SavePreferences`/`ClearPreferences`) reads/writes through `m_controller.Model.Preferences` (`SAIF.Framework.Preferences`, `PrefScope`).
- Infragistics 10.3 UI component assemblies (`Infragistics35.Web.v10.3`, `Infragistics35.WebUI.*`) are consumed throughout the view/utility layer for grid, dropdown, and editor control types.

## Architecture diagram
The following diagram shows how consuming applications, this library's base-class layers, and downstream framework/data/service dependencies interact.

```mermaid
flowchart TD
	App["Consuming application<br>pages / masters / controllers / models"] --> View["View layer base classes<br>AppViewPageBase / AppViewMasterPageBase"]
	App --> CM["Controller/Model base classes<br>clsAppControllerBase / clsAppModelBase"]
	View --> Util["Cross-cutting UI utility layer<br>clsControlManager / clsStringUtilities / clsNestedMaster"]
	View --> Nav["NavigationContext"]
	View --> Mail["Utilities.clsMailMessage"]
	View --> MVCFW["SAIF.Presentation.Web.MVC / SAIF.Presentation<br>ViewPageBase"]
	CM --> FW["SAIF.Framework (NuGet)<br>clsControllerBase / clsModelBase"]
	View --> Igx["Infragistics 10.3 UI controls (GAC)"]
	Nav --> DAL["clsMSOracleDataLayer<br>(SAIF.Framework, MENU DB user)"]
	DAL --> MenuLib["SAIF.Business.Menu<br>authorization collections"]
	Mail --> Soap["Legacy SOAP mail service<br>SAIFMail.clsSAIFMessage"]
```

## Sequence diagram
The following diagram shows the primary navigation-context build-and-resolve sequence used to determine an authorized menu item for the current page.

```mermaid
sequenceDiagram
	participant Page as Consuming page/controller
	participant NC as NavigationContext
	participant DAL as clsMSOracleDataLayer
	participant Menu as SAIF.Business.Menu
	Page->>NC: New NavigationContext(user)
	NC->>DAL: New clsMSOracleDataLayer("MENU", MENU_ENVIRONMENT)
	NC->>DAL: DataPortalInfo()
	DAL-->>NC: IDataPortalInfo
	NC->>Menu: GetMenuAuthorizedItems(DPI, user)
	Menu-->>NC: MenuAuthorizedItems collection
	Page->>NC: GetCurrentItem(category)
	NC->>NC: Try ItemExact lookup, fall back to Item lookup if Nothing
	NC-->>Page: clsMenuAuthorizedItem or Nothing
```

## Design constraints
- No `web.config`/`app.config` exists in this project; the `MENU_ENVIRONMENT` and `LegacyMailWebServiceUrl` app settings must be supplied by the consuming web application's configuration file at runtime.
- Session keep-alive depends on a `SessionPing.aspx` page existing in the consuming application; this is a documented constraint, not enforced in code.
- `HelpFolderName` must be set (normally in an ancestor `Configure` method) before any `Help*` property (`HelpBody`, `HelpBookmark`, `HelpHeader`, `HelpTOC`) is accessed, or an unhandled `ApplicationException` is thrown.
- `NavigationContext` hardcodes the Oracle BOF data-layer connection to a fixed `MENU` DB user account.
- `AppViewPageBase.aspx`'s markup directive references a legacy `AppMVCBase.AppViewPageBase` namespace that does not match the project's actual `RootNamespace` (`SAIF.Presentation.Web.Core`); this appears to be a non-functional legacy artifact from when the project/solution was named "AppMVCBase" and is likely unused since this project is packaged as a class library rather than hosted directly*.
- `Utilities.clsMailMessage.SendMail`/`SendMailWithAttachment` have no explicit `Return` statement in their observed bodies, so they effectively always return the default `False`*.
- The `SAIFMail` SOAP proxy namespace used by `clsMailMessage` is not defined in this project's own references and is presumed supplied transitively through one of its `ProjectReference`s**.
- Target framework is .NET Framework 4.6.1 with `OptionStrict On`/`OptionExplicit On`.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Configuration settings](configuration.md)
- [API reference](api/index.md)

> **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.

## Sources
- SAIF.Presentation.Web.Core.Infragistics103\SAIF.Presentation.Web.Core.Infragistics103.vbproj
- SAIF.Presentation.Web.Core.Infragistics103\AppViewMasterPageBase.vb
- SAIF.Presentation.Web.Core.Infragistics103\AppViewPageBase.aspx
- SAIF.Presentation.Web.Core.Infragistics103\AppViewPageBase.aspx.vb
- SAIF.Presentation.Web.Core.Infragistics103\NavigationContext.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsAppControllerBase.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsAppModelBase.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsControlManager.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsMailMessage.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsNestedMaster.vb
- SAIF.Presentation.Web.Core.Infragistics103\clsStringUtilities.vb
