SAIF.Presentation.Web.Controls.V2 architecture¶
This library is a presentation-tier ASP.NET WebForms custom-control library. It contains only System.Web.UI.Control/WebControl subclasses (and their supporting models/enums/designers) that are compiled directly into the SAIF.BOF.Presentation.Web.Infragistics103 package assembly for reuse across SAIF WebForms applications. It performs no database access, no WCF/service calls, and no business-rule evaluation — its sole responsibility is rendering HTML/JavaScript UI chrome and input widgets for consuming pages.
Responsibilities¶
- Provide thin subclasses of standard WebForms input controls (
SAIFCheckBox,SAIFCheckBoxList,SAIFRadioButton,SAIFRadioButtonList,SAIFDropDownList,SAIFTextBox,SAIFComboBox,SAIFListBox,SAIFButton) that add a consistent[ReadOnly]image-based rendering convention, AJAX "busy indicator" wiring, or minor UX behavior (character counters, enum binding) on top of their base controls. - Provide composite layout/chrome controls (
SAIFPanel,SAIFTabBar,SAIFTabs,ConditionsGrid,SAIFGrid) that manage child-control trees, collapsible state, and tab-selection state, persisted viaViewState. - Render site-wide chrome (
BannerControl,BannerControlV2) by reading an external XML resource file (SITEBANNER.XML/SITEBANNERV2.XML) at runtime, varying banner content and links by internal-vs-external client context and by whether the current page is the login screen. - Supply narrowly scoped, cross-cutting UX helpers: client-side auto-focus scripting (
FocusManager), control-enable-state attribute tagging (Utilities.mdlUtilities), duplicate-submit prevention (OneClickSubmit), status-message iconography (SAIFMessage), and an alphabet index bar (SAIFAlphaNumericLinkControl/SAIFLinkButton). - Present a UI-only, non-business-rule column layout for medical-condition data via
ConditionsGrid(ClaimDecision,DecisionDate,MedicalConditionDescr,MedicallyStationaryDate)*.
Component boundaries¶
- Input-control wrappers:
SAIFCheckBox,SAIFCheckBoxList,SAIFRadioButton,SAIFRadioButtonList,SAIFDropDownList,SAIFTextBox,SAIFComboBox,SAIFListBox,SAIFButton— each derives from the corresponding nativeSystem.Web.UI.WebControlscontrol and overridesRender/property accessors only; no shared base class or cross-control coupling among them. - Layout/chrome controls:
SAIFPanel(+SAIFPanelDesigner,PanelState),SAIFTabBar(+SAIFTabBarTab,SAIFTabBarTabCollection,Sorter(Of T),SortOrder,TabBarMode),SAIFTabs(+SAIFTabsDesigner,TabSettings,SAIFTabEventArgs),ConditionsGrid,SAIFGrid— own composite child-control trees andViewState-backed UI state; two structurally independent tab implementations coexist here (declarativeSAIFTabBarvs. imperativeSAIFTabs)*. - Site-wide chrome:
BannerControl,BannerControlV2— the only controls in this library that read an external file resource (SITEBANNER.XML/SITEBANNERV2.XML, resolved viaHttpContext.Current.Server.MapPath) and branch on the sharedSAIF.FrameworkAppGlobal.EnvironmentServiceenvironment context. - Cross-cutting helpers:
FocusManager,Utilities.mdlUtilities,OneClickSubmit,SAIFMessage,SAIFAlphaNumericLinkControl/SAIFLinkButton/AlphaNumericCharacter— small, self-contained utilities with no dependencies on the other component groups. - No
.aspx/.ascxmarkup exists in this project; all boundaries above are compiled.vbserver controls only.
Interaction model¶
- Consuming SAIF WebForms pages declare/instantiate controls from any of the four component groups directly on their pages/master pages; the groups do not call into one another (except that all controls share the standard
System.Web.UI.Controllifecycle andViewState). - All controls follow the standard WebForms lifecycle (
Init→CreateChildControls/DataBind→PreRender→Render), persisting state throughViewState(e.g.,SAIFCheckBox.[ReadOnly],SAIFPanel.PanelState,SAIFTabBar.Tabs) rather than any backing store. - Postback interaction (tab clicks, banner logout, checkbox/radio selection changes) is handled through standard ASP.NET control events (
LinkButton.Click,CheckBoxList.SelectedIndexChanged); no customIPostBackEventHandlerimplementation was found**. BannerControl/BannerControlV2are the only controls that reach outside the control tree: they readSITEBANNER.XML/SITEBANNERV2.XMLfrom disk and querySAIF.Framework'sAppGlobal.EnvironmentService.IsClientExternalto decide internal-vs-external rendering.MultiListControladditionally branches its client-side layout onPage.Request.Browser.Browser.ToUpper = "FIREFOX", a legacy browser-sniffing pattern*.- Several controls (
SAIFButton,SAIFComboBox,SAIFListBox) inject client-side JavaScript for an AJAX "busy indicator"; the referenced.jsfiles (e.g.Button.js,ComboBox.js) are not present in this project and their exact client behavior could not be verified from this library's source**.
Architecture diagram¶
The following diagram shows how consuming pages compose controls from the four component groups, and how the banner controls are the only ones reading an external XML resource and the shared AppGlobal environment service.
flowchart TD
A[Consuming SAIF WebForms page] --> B[Input-control wrappers<br>SAIFCheckBox / SAIFRadioButton / SAIFDropDownList / SAIFTextBox / SAIFComboBox / SAIFListBox / SAIFButton]
A --> C[Layout/chrome controls<br>SAIFPanel / SAIFTabBar / SAIFTabs / SAIFGrid / ConditionsGrid]
A --> D[Site chrome<br>BannerControl / BannerControlV2]
A --> E[Cross-cutting helpers<br>FocusManager / OneClickSubmit / SAIFMessage / SAIFAlphaNumericLinkControl / mdlUtilities]
D --> F[SITEBANNER.XML / SITEBANNERV2.XML resource file]
D --> G[SAIF.Framework AppGlobal.EnvironmentService]
C --> H[ViewState]
B --> H
Sequence diagram¶
The following diagram shows the primary banner-rendering and logout sequence for BannerControl/BannerControlV2.
sequenceDiagram
participant Page as Consuming page
participant Banner as BannerControl/BannerControlV2
participant Env as AppGlobal.EnvironmentService
participant XML as SITEBANNER(V2).XML
Page->>Banner: OnInit (render pipeline)
Banner->>Env: IsClientExternal
Env-->>Banner: internal/external flag
Banner->>Banner: SetBannerControlDefaults()
Banner->>XML: Load banner XML via Server.MapPath
XML-->>Banner: print/display nodes
Banner-->>Page: Rendered banner HTML
Page->>Banner: Logout LinkButton click (postback)
Banner->>Banner: FeedbackHelpLogout_Click (Session.Abandon, clear cookies)
Banner-->>Page: Redirect to /OnlineLogin/loginscreen.aspx
Design constraints¶
- The project has no
<ProjectReference>elements; all SAIF ecosystem dependencies (SAIF.Framework,SAIF.Framework.Security,SAIF.Framework.Common,SAIF.Framework.Preferences,SAIF.HashUtil) are resolved as compiled NuGet package references, not source project references. - This project's
.vbsources are not compiled into their own standalone assembly; the.nuspecbundles them intosrc\presentation\saif.presentation.web.controls.v2, and the package's shipped binary (lib\net45) is built from theSAIF.Presentation.Web.Core.Infragistics103project's output DLL*. - No third-party UI toolkit packages (e.g., Infragistics, AJAX Control Toolkit) are referenced from this project's
.vbproj, despite the sibling repository-root.nuspecbundling anAjaxControlToolkit.dllbinary into the overall package*. - Target framework is .NET Framework 4.6.1; controls rely entirely on
ViewStatefor state persistence, with no configuration-driven behavior (noConfigurationManager/AppSettingsreads were found). BannerControl/BannerControlV2behavior is environment-conditional onAppGlobal.EnvironmentService.IsClientExternaland on the current virtual directory equaling"ONLINELOGIN"— this is the only environment-conditional logic in the library.- Two structurally independent, parallel tab-bar implementations (
SAIFTabBar/declarative vs.SAIFTabs/imperative) coexist without a shared base class; whether both are still actively consumed by downstream applications could not be determined from this library alone**.
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.
Related documentation¶
- Index
- Overview
- Dependencies
- Configuration settings
- Operations and processes
- Business rules
- Control catalog
- API reference
Sources¶
- SAIF.Presentation.Web.Controls.V2\SAIF.Presentation.Web.Controls.V2.vbproj
- SAIF.Presentation.Web.Controls.V2\packages.config
- SAIF.Presentation.Web.Controls.V2\Banner.vb
- SAIF.Presentation.Web.Controls.V2\BannerControlV2.vb
- SAIF.Presentation.Web.Controls.V2\ConditionsGrid.vb
- SAIF.Presentation.Web.Controls.V2\FocusManager.vb
- SAIF.Presentation.Web.Controls.V2\mdlUtilities.vb
- SAIF.Presentation.Web.Controls.V2\MultiListControl.vb
- SAIF.Presentation.Web.Controls.V2\OneClickSubmitControl.vb
- SAIF.Presentation.Web.Controls.V2\SAIFAlphaNumericLinkControl.vb
- SAIF.Presentation.Web.Controls.V2\SAIFButton.vb
- SAIF.Presentation.Web.Controls.V2\SAIFCheckBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFCheckBoxList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFComboBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFDropDownList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFGrid.vb
- SAIF.Presentation.Web.Controls.V2\SAIFHoverHelp.vb
- SAIF.Presentation.Web.Controls.V2\SAIFListBox.vb
- SAIF.Presentation.Web.Controls.V2\SAIFMessage.vb
- SAIF.Presentation.Web.Controls.V2\SAIFPanel.vb
- SAIF.Presentation.Web.Controls.V2\SAIFRadioButton.vb
- SAIF.Presentation.Web.Controls.V2\SAIFRadioButtonList.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabBar.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabs.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTabsDesigner.vb
- SAIF.Presentation.Web.Controls.V2\SAIFTextBox.vb
- SAIF.Presentation.Web.Controls.V2\TabSettings.vb
- SAIF.BOF.Presentation.Web.Infragistics103.nuspec