Skip to content

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's Value to a dotted property path on a page-level model object, and surface the bound object's own IDataErrorInfo validation messages.
  • Orchestrate page-wide binding/validation aggregation via BindingManager, which walks the full Page.Controls tree, assigns the model (RootObject) to every iAutoBindingControl, and aggregates IsValid/ErrorMessages.
  • Render hover-help / hover-panel UI (HoverPanel, HoverPanelControl, HoverLabel, HoverPicture, HoverHelp, HoverHelpControl) built on the AJAX Control Toolkit's HoverMenuExtender.
  • 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/Delete SQL paths are unsupported stubs).
  • Provide end-user grid column visibility/paging customization for UltraWebGrid instances (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 the iAutoBindingControl contract and BindingUtility/BindingManager helpers): 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 of HoverMenuExtender-based popups; HoverHelp is the only member that crosses into data access, via the clsHelpText business object.
  • Help-text data access (clsHelpText, clsHelpTextCollection): owns the sole database-facing boundary in this library — two IBusinessCriteria implementations issuing read-only SQL against APPLICATION_HELP_MASTER/APPLICATION_HELP_DETAIL on 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 for UltraWebGrid and its persistence to clsPreferences**.
  • SAIFAJAXControlAncestor: shared root for the AJAX display-control families in this library (CompositeControl-derived), resolving the page model (RootObject) and browser-detection helpers (IsFirefox). BindingManager is an exception: it inherits directly from CompositeControl rather than from SAIFAJAXControlAncestor.
  • Excluded from the compiled boundary: AutoBindTextboxControl.vb and AutoBindingControl.vb exist 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 walks Page.Controls, assigns RootBindingObject on each iAutoBindingControl, and lets the standard ASP.NET control lifecycle invoke each control's own DataBind().
  • 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's IDataErrorInfo implementation.
  • HoverHelp renders help content sourced from an already-retrieved clsHelpText instance; 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*.
  • ModalGridCustomizer mediates between the hosting page's UltraWebGrid, an InfragisticsGridCustomizer (in-memory column/paging state), a GridCustomizationPanel popup (user interaction), and clsPreferences (persisted defaults), rebinding the grid via ObjectBinder, DataBind, or a Custom re-raised event depending on configured BindingBehavior.
  • Controls rely on the Infragistics WebAsyncRefreshPanel (WARP) and ASP.NET UpdatePanel for partial-page (AJAX) postbacks; SAIFAJAXControls.js supplies 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/.ascx markup exists in this project — all controls are rendered entirely from code-behind (CompositeControl-derived classes).
  • clsHelpText/clsHelpTextCollection are read-only by design: CreateSQL, InsertSQL, UpdateSQL, and DeleteSQL all throw ApplicationException(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 IDataErrorInfo implementation, which resides outside this project**.
  • AutoBindControlAncestor.PageErrorLabel depends on a page control named LblErrorMsg being present in the control tree; if absent, error-message assignment silently no-ops (swallowed NotSupportedException)*.
  • InfragisticsGridCustomizer hard-fails (ApplicationException) at initialization if a configured AlwaysVisible/AlwaysHidden column key does not exist on the target grid, and TargetGrid/ObjectBinder property getters throw if the named control cannot be resolved via Page.FindControl.
  • Two source files (AutoBindTextboxControl.vb, AutoBindingControl.vb) exist on disk but are excluded from the .vbproj compile list and are therefore not part of the shipped assembly*.
  • The concrete type and persistence mechanism of clsPreferences is inferred to originate from SAIF.Framework.Preferences based on the referenced assembly name, but no Imports/usage in this project's source directly confirms it**.

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.vbproj
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\SAIFAJAXControlAncestor.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindControlAncestor.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindTextbox.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindWebDateTimeEdit.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindWebMaskEdit.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\BindingManager.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\BindingUtility.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\iAutoBindingControl.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverHelp.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverHelpControl.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverLabel.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPanel.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPanelControl.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\HoverPicture.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\GridCustomizationPanel.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\InfragisticsGridCustomizer.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\ModalGridCustomizer.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpText.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpTextCollection.vb
  • SAIF.Presentation.Web.Controls.AJAX.Infragistics103\SAIFAJAXControls.js