Skip to content

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

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.

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 ProjectReferences**.
  • Target framework is .NET Framework 4.6.1 with OptionStrict On/OptionExplicit On.

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