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/clsModelBasewith 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, sinceValidateData/WriteDataare stub no-op overrides here. - Provide stateless,
Shared-only UI utility helpers for enabling/disabling/protecting form controls (via reflection overControlproperties), 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
MENUDB user and delegate toSAIF.Business.Menucollections 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'sclsControllerBase/clsModelBaseadding 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 toSAIF.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.Presentationframework base classes (e.g.,AppViewPageBaseinheritsSAIF.Presentation.Web.mvc.ViewPageBase). - The view layer calls into the cross-cutting utility layer (
clsControlManager,clsMailMessage) and intoNavigationContextfor menu/navigation concerns; it does not callSAIF.Business.Menudirectly. NavigationContextopens an Oracle BOF data connection (clsMSOracleDataLayer, fromSAIF.Framework) scoped to a fixedMENUDB user, then delegates authorization/query logic toSAIF.Business.Menucollection classes.clsMailMessagecalls a legacy SOAP web service (SAIFMail.clsSAIFMessage) whose endpoint URL is resolved at runtime viaAppGlobal.EnvironmentService.GetConfigSetting("LegacyMailWebServiceUrl"); theSAIFMailproxy type itself is not defined in this project and is presumed supplied transitively through one of theProjectReferences**.- Grid preference persistence (
AppViewPageBase.ApplyColumnPreferences/ApplySortPreferences/SavePreferences/ClearPreferences) reads/writes throughm_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.configexists in this project; theMENU_ENVIRONMENTandLegacyMailWebServiceUrlapp settings must be supplied by the consuming web application's configuration file at runtime. - Session keep-alive depends on a
SessionPing.aspxpage existing in the consuming application; this is a documented constraint, not enforced in code. HelpFolderNamemust be set (normally in an ancestorConfiguremethod) before anyHelp*property (HelpBody,HelpBookmark,HelpHeader,HelpTOC) is accessed, or an unhandledApplicationExceptionis thrown.NavigationContexthardcodes the Oracle BOF data-layer connection to a fixedMENUDB user account.AppViewPageBase.aspx's markup directive references a legacyAppMVCBase.AppViewPageBasenamespace that does not match the project's actualRootNamespace(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/SendMailWithAttachmenthave no explicitReturnstatement in their observed bodies, so they effectively always return the defaultFalse*.- The
SAIFMailSOAP proxy namespace used byclsMailMessageis not defined in this project's own references and is presumed supplied transitively through one of itsProjectReferences**. - Target framework is .NET Framework 4.6.1 with
OptionStrict On/OptionExplicit On.
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Configuration settings
- API reference
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