SAIF.Presentation.Web.Controls.AJAX.Infragistics103 architecture¶
This library is a presentation-tier UI control library for classic ASP.NET WebForms — the "V2 AJAX" generation of SAIF's Infragistics-based control set (RootNamespace=SAIF.Presentation.Web.Controls.V2.AJAX)*. It sits above SAIF.Presentation.Web.Controls.V2 (base widgets) and SAIF.Presentation.Web.Binding.Infragistics103 (object-binding infrastructure), and consumes a small number of SAIF BOF business objects directly (clsHelpText/clsHelpTextCollection) for read-only help-text lookups against APPLICATION_HELP_MASTER/APPLICATION_HELP_DETAIL.
Responsibilities¶
- Provide reflection-based auto-binding editor controls (
AutoBindTextbox,AutoBindWebDateTimeEdit,AutoBindWebMaskEdit) that bind a control'sValueto a dotted property path on a page-level model object, and surface the bound object's ownIDataErrorInfovalidation messages. - Orchestrate page-wide binding/validation aggregation via
BindingManager, which walks the fullPage.Controlstree, assigns the model (RootObject) to everyiAutoBindingControl, and aggregatesIsValid/ErrorMessages. - Render hover-help / hover-panel UI (
HoverPanel,HoverPanelControl,HoverLabel,HoverPicture,HoverHelp,HoverHelpControl) built on the AJAX Control Toolkit'sHoverMenuExtender. - Retrieve read-only, database-backed help text for a screen field or an entire application via
clsHelpText/clsHelpTextCollection(SAIF BOF business objects, retrieve-only —Create/Insert/Update/DeleteSQL paths are unsupported stubs). - Provide end-user grid column visibility/paging customization for
UltraWebGridinstances (InfragisticsGridCustomizer,HidableInfragisticsColumn,ColumnPreferenceList,GridCustomizationPanel,ModalGridCustomizer), persisting user choices to a per-user preference store (clsPreferences).
Component boundaries¶
- Auto-binding editor family (
AutoBindControlAncestor→AutoBindTextbox,AutoBindWebDateTimeEdit,AutoBindWebMaskEdit, plus theiAutoBindingControlcontract andBindingUtility/BindingManagerhelpers): owns reflection-based get/set/validate plumbing against an in-memory business object; performs no direct SQL/table access itself. - Hover-help / hover-panel family (
HoverPanel,HoverPanelControl,HoverLabel,HoverPicture,HoverHelp,HoverHelpControl): owns rendering ofHoverMenuExtender-based popups;HoverHelpis the only member that crosses into data access, via theclsHelpTextbusiness object. - Help-text data access (
clsHelpText,clsHelpTextCollection): owns the sole database-facing boundary in this library — twoIBusinessCriteriaimplementations issuing read-only SQL againstAPPLICATION_HELP_MASTER/APPLICATION_HELP_DETAILon an Oracle database*, inferred from colon-prefixed bind-variable syntax rather than directly confirmed. - Grid customization family (
InfragisticsGridCustomizer,HidableInfragisticsColumn,ColumnPreferenceList,GridCustomizationPanel,ModalGridCustomizer,InfragisticsGridCustomizerList): owns end-user column visibility/paging state forUltraWebGridand its persistence toclsPreferences**. SAIFAJAXControlAncestor: shared root for the AJAX display-control families in this library (CompositeControl-derived), resolving the page model (RootObject) and browser-detection helpers (IsFirefox).BindingManageris an exception: it inherits directly fromCompositeControlrather than fromSAIFAJAXControlAncestor.- Excluded from the compiled boundary:
AutoBindTextboxControl.vbandAutoBindingControl.vbexist on disk but are not in the.vbproj<Compile>item group, so they are not part of the shipped assembly*.
Interaction model¶
- Hosting ASPX pages (outside this library) invoke
BindingManager.DataBind()once a page model is available; this recursively walksPage.Controls, assignsRootBindingObjecton eachiAutoBindingControl, and lets the standard ASP.NET control lifecycle invoke each control's ownDataBind(). - Each auto-binding control resolves its bound value via
BindingUtility.GetObject/BindValue(reflection over a dotted property path) and writes user edits back to the bound object on postback (BindToObject), optionally re-validating against the bound object'sIDataErrorInfoimplementation. HoverHelprenders help content sourced from an already-retrievedclsHelpTextinstance; the business object itself is retrieved via its shared factory (GetHelpText/GetHelpTexts), which drives the BOF data-portal pipeline (BeforeRetrieve/AfterRetrieve) against an Oracle database*.ModalGridCustomizermediates between the hosting page'sUltraWebGrid, anInfragisticsGridCustomizer(in-memory column/paging state), aGridCustomizationPanelpopup (user interaction), andclsPreferences(persisted defaults), rebinding the grid viaObjectBinder,DataBind, or aCustomre-raised event depending on configuredBindingBehavior.- Controls rely on the Infragistics
WebAsyncRefreshPanel(WARP) and ASP.NETUpdatePanelfor partial-page (AJAX) postbacks;SAIFAJAXControls.jssupplies one client-side helper (SelectAllCheckboxList) for bulk-toggling the grid-customizer column checkbox list.
Architecture diagram¶
The following diagram shows the four component families in this library and their primary collaborators.
flowchart TD
Page[Hosting ASPX page<br>model / Page.Controls]
BM[BindingManager]
ABC[AutoBindControlAncestor family<br>AutoBindTextbox / WebDateTimeEdit / WebMaskEdit]
BU[BindingUtility<br>reflection get/set/bind]
HH[Hover-help / hover-panel family<br>HoverHelp / HoverPanel / HoverLabel / HoverPicture]
CHT[clsHelpText / clsHelpTextCollection<br>SAIF BOF business objects]
DB[(Oracle*<br>APPLICATION_HELP_MASTER / DETAIL)]
GC[Grid customization family<br>ModalGridCustomizer / InfragisticsGridCustomizer]
PREF[clsPreferences<br>per-user preference store]
GRID[UltraWebGrid]
Page --> BM
BM --> ABC
ABC --> BU
BU --> Page
HH --> CHT
CHT --> DB
Page --> GC
GC --> GRID
GC --> PREF
Sequence diagram¶
The following diagram shows the primary help-text retrieval and rendering sequence used by HoverHelp.
sequenceDiagram
participant Page as Hosting page
participant HoverHelp
participant clsHelpText
participant DataPortal as BOF data portal
participant Oracle as APPLICATION_HELP_MASTER/DETAIL (Oracle*)
Page->>clsHelpText: GetHelpText(dataPortal, appCode, refKeyValue)
clsHelpText->>DataPortal: RetrieveObject(Criteria)
DataPortal->>Oracle: RetrieveSQL (bind ApplicationCode, ReferenceKeyValue)
Oracle-->>DataPortal: joined row (help text + description)
DataPortal-->>clsHelpText: Fill() populates fields, MarkOld()
clsHelpText-->>Page: populated read-only instance
Page->>HoverHelp: Fill(clsHelpText instance)
HoverHelp-->>Page: renders hover icon + popup text
Design constraints¶
- The library targets .NET Framework v4.6.1 (VB.NET,
OptionStrict On) and classic ASP.NET WebForms; no.aspx/.ascxmarkup exists in this project — all controls are rendered entirely from code-behind (CompositeControl-derived classes). clsHelpText/clsHelpTextCollectionare read-only by design:CreateSQL,InsertSQL,UpdateSQL, andDeleteSQLall throwApplicationException(BOC.Messages.InvalidSQLProperty)— attempting to save/delete an instance fails at the point the base class reads the corresponding SQL property.- Auto-binding validation is a generic UI mechanism only: this library does not itself define what constitutes invalid data — validity is determined entirely by the bound business object's own
IDataErrorInfoimplementation, which resides outside this project**. AutoBindControlAncestor.PageErrorLabeldepends on a page control namedLblErrorMsgbeing present in the control tree; if absent, error-message assignment silently no-ops (swallowedNotSupportedException)*.InfragisticsGridCustomizerhard-fails (ApplicationException) at initialization if a configuredAlwaysVisible/AlwaysHiddencolumn key does not exist on the target grid, andTargetGrid/ObjectBinderproperty getters throw if the named control cannot be resolved viaPage.FindControl.- Two source files (
AutoBindTextboxControl.vb,AutoBindingControl.vb) exist on disk but are excluded from the.vbprojcompile list and are therefore not part of the shipped assembly*. - The concrete type and persistence mechanism of
clsPreferencesis inferred to originate fromSAIF.Framework.Preferencesbased on the referenced assembly name, but noImports/usage in this project's source directly confirms it**.
Related documentation¶
- Index
- Overview
- Dependencies
- Operations and processes
- Business rules
- Database tables
- SQL catalog
- Control catalog
- 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.Controls.AJAX.Infragistics103\SAIF.Presentation.Web.Controls.AJAX.Infragistics103.vbprojSAIF.Presentation.Web.Controls.AJAX.Infragistics103\SAIFAJAXControlAncestor.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindControlAncestor.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindTextbox.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindWebDateTimeEdit.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindWebMaskEdit.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\BindingManager.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\BindingUtility.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\iAutoBindingControl.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverHelp.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverHelpControl.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverLabel.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPanel.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPanelControl.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPicture.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\GridCustomizationPanel.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\InfragisticsGridCustomizer.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\ModalGridCustomizer.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpText.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpTextCollection.vbSAIF.Presentation.Web.Controls.AJAX.Infragistics103\SAIFAJAXControls.js