SAIF.Presentation.Web.Core.Infragistics103 business rules¶
This page captures business rules enforced by this library.
BR-NC-001: Menu visibility is restricted to authorized items¶
Field
Value
Statement
A user's navigable menu items are limited to those returned by the BOF menu-authorization lookup for that user*.
Trigger
NavigationContext.New(inUser As String) construction.
Enforcement
NavigationContext.vb — New(inUser As String) → clsMenuAuthorizedItemCollection.GetMenuAuthorizedItems(m_DPI, inUser.Trim.ToUpper) (actual authorization logic resides in SAIF.Business.Menu, out of scope for this analysis).
Outcome
MenuAuthorizedItems contains only the items the given user is authorized to see; downstream lookups (GetItem, GetCurrentItem, IsMenuItem) can only resolve items within this authorized set.
BR-NC-002: Exact match is preferred over fallback match for menu resolution¶
Field
Value
Statement
When resolving the current page's menu item, an exact (application code + category + link) match is attempted before falling back to a broader match.
Trigger
Calls to NavigationContext.GetItem, GetCurrentItem, or GetCurrentPage.
Enforcement
NavigationContext.vb — GetItem/GetCurrentItem first call MenuAuthorizedItems.ItemExact(AppCode, Category, Link, True), then, only when that returns Nothing, call MenuAuthorizedItems.Item(AppCode, Category, Link, True); GetCurrentPage follows the same pattern with MenuAuthorizedItems.FindPageExact(AppCode, PageLink) first, then MenuAuthorizedItems.FindPage(AppCode, PageLink) when that returns Nothing.
Outcome
The most specific match is returned when available; otherwise a looser match is returned; if the application code itself cannot be resolved, Nothing is returned without attempting any item lookup.
BR-AVPB-001: Session keep-alive only applies to internal (non-external) clients¶
Field
Value
Statement
The session-ping keep-alive script is only registered for internal (non-external) client sessions, and only when explicitly enabled.
Trigger
Page_Load on any AppViewPageBase-derived page (via CallSessionPing).
Enforcement
AppViewPageBase.aspx.vb — CallSessionPing(): If EnableSessionPing Then (outer gate) and, nested inside it, If Not AppGlobal.EnvironmentService.IsClientExternal Then (inner gate) before registering the keep-alive script.
Outcome
External client sessions are allowed to time out normally; internal sessions (with EnableSessionPing = True, the default) receive a periodic keep-alive script, provided a SessionPing.aspx page exists in the consuming application.
BR-AVPB-002: Broken business rules are visually flagged on their bound grid cell¶
Field
Value
Statement
When a grid-bound BOF business object fails validation, each of its broken rules is rendered as a CSS error highlight on the grid cell mapped to the rule's property.
Trigger
Explicit call to AppViewPageBase.SetErrorColorInGrid (typically after a save/validate action).
Enforcement
AppViewPageBase.aspx.vb — SetErrorColorInGrid: iterates myObject.Rules.BrokenRules, appends " wgcerror" to the matching column's cell CssClass.
Outcome
Invalid rows are visually distinguishable; if inSetFocusOnFirstError is True, the grid's active cell is set to the first broken-rule cell found; a column lookup failure for a given rule is silently skipped (Try/Catch).
BR-AVPB-003: HelpFolderName must be configured before any Help* property is used¶
Field
Value
Statement
Accessing HelpBody, HelpBookmark, HelpHeader, or HelpTOC before HelpFolderName has been set is treated as a configuration error.
Trigger
Getter access to HelpBody/HelpBookmark/HelpHeader/HelpTOC (each internally reads HelpFolderName).
Enforcement
AppViewPageBase.aspx.vb — HelpFolderName getter: If m_HelpFolderName Is Nothing Then Throw New ApplicationException("HelpFolderName is not set. This is normally set in the Ancestor Configure method.").
Outcome
An unhandled ApplicationException is thrown, surfacing a clear configuration-order defect to the developer/consuming page rather than silently returning an incomplete help path.
BR-CMM-001: Only .txt and .csv extensions receive an explicit content type¶
Field
Value
Statement
Streamed file downloads only set a specific HTTP Content-Type for .txt and .csv file extensions; all other extensions receive an empty content type.
Trigger
Call to Utilities.clsMailMessage.StreamDownloadFile.
Enforcement
clsMailMessage.vb — Select Case sFileType.ToLower with only Case ".txt" and Case ".csv" populating sContentType; Case Else leaves it empty.
Outcome
.txt streams as text/plain, .csv streams as application/vnd.ms-excel; any other extension is written to the response with no Content-Type header value set by this method.
BR-CM-001: WebCombo child controls are excluded from recursive enable/disable¶
Field
Value
Statement
When recursively enabling or disabling a control tree, Infragistics WebCombo controls are treated as a leaf — their child controls are not individually walked/toggled.
Trigger
Call to Utilities.clsControlManager.EnablePageControl(inCntrl, inEnable) where a descendant control is of type WebCombo.
Enforcement
clsControlManager.vb — EnablePageControl: Select Case inCntrl.GetType.Name / Case "WebCombo" ' Skip child controls for these types..
Outcome
WebCombo controls are enabled/disabled as a single unit (via UnProtectItem/ProtectItem) rather than having their internal child controls individually toggled, avoiding inconsistent internal combo-box state.
Members in this section document a business rule enforced by a base-framework type this library's AppViewPageBase extends. It is retrieved from SAIF.Presentation.Web.MVC's own documentation and is listed here so this page's rule coverage is self-contained; see that library's business rules page for further detail.
INH-MVC-008: Internal-address classification (inherited from SAIF.Presentation.Web.MVC)¶
Field
Value
Statement
A request is treated as originating "inside the client network" if the caller's host address matches 10.*, 131.131.*.*, or 127.0.0.1.†
Trigger
Evaluated on every request via clsControllerBase.IsInsideClient, and consumed here via AppGlobal.EnvironmentService.IsClientExternal in AppViewPageBase.CallSessionPing.†
Enforcement
clsControllerBase.IsInsideClient (Like pattern match against Request.UserHostAddress) in SAIF.Presentation.Web.MVC; AppViewPageBase.CallSessionPing relies on the resulting internal/external classification as the inner gate for BR-AVPB-001.†
Outcome
Internal callers are eligible for the session keep-alive script (subject to EnableSessionPing); external callers never receive it, regardless of EnableSessionPing.†
ValidateData/WriteData in clsAppModelBase are stub no-op overrides that always return False; concrete validation/write logic is expected to be supplied by descendant models in consuming applications and is not itself a business rule enforced by this library.
SendMail/SendMailWithAttachment in clsMailMessage have no explicit Return statement in their observed bodies, so they effectively always return the default False*.
Note: Statements marked with † are derived from dependency library
documentation via the Legends CLI. Statements marked with * were inferred
from code structure or contextual evidence. Statements marked with ** could
not be confirmed; treat as unknown until verified.