---
title: "clsMenuItem"
summary: "API reference for clsMenuItem."
status: draft
owner: SAIF documentation team
last_reviewed: 2026-08-17
library: SAIF.Business.Menu
reference_type: package
---

# clsMenuItem

Owns one menu item and its child security groups.

## Purpose
- Persist the item row in `MENU_ITEM`.
- Cascade validation and save behavior to `SecurityGroups`.

## Context
- Namespace: `SAIF.Business.Menu`
- Assembly/package: `SAIF.Business.Menu.dll`

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| MenuItemSeqNum | `Public Property MenuItemSeqNum() As Decimal` | Surrogate primary key of the `MENU_ITEM` row, generated from `MENU_ITEM_SEQ` and used as the target of retrieve/update/delete statements. |
| MenuPageSeqNum | `Public Property MenuPageSeqNum() As Decimal` | Foreign key linking the item to its `MENU_PAGE` row, resolved on demand through the `MenuPage` property. |
| MenuPageSeqNumString | `Public Property MenuPageSeqNumString() As String` | String-typed accessor for `MenuPageSeqNum`, used by UI data binding that requires text rather than a numeric type. |
| MenuPage | `Public Property MenuPage() As clsMenuPage` | Associated page definition. |
| MenuCategoryCode | `Public Property MenuCategoryCode() As String` | Foreign key into `MENU_CATEGORY_CODE` that groups the item for category-based menu rendering; resolved on demand through `MenuCategory`. |
| MenuCategory | `Public ReadOnly Property MenuCategory() As clsMenuCategoryCode` | Associated category lookup row. |
| IsVisible | `Public Property IsVisible() As Boolean` | Controls whether the item is included when the authorized-menu query renders visible navigation entries. |
| PageOrder | `Public Property PageOrder() As Decimal` | Display order used to sort the item among its category's other menu items. |
| ToolTip | `Public Property ToolTip() As String` | Hover text shown for the item's link in the rendered navigation UI. |
| UpdateUser | `Public Property UpdateUser() As String` | Identifies the user who last saved the row, recorded for audit purposes on each write. |
| UpdateDate | `Public Property UpdateDate() As Date` | Records the timestamp of the row's last save, used for audit purposes. |
| SecurityGroups | `Public ReadOnly Property SecurityGroups() As clsMenuSecurityCollection` | Lazy-loads the child security-group assignments used by save and validation logic. |
| IsValid | `Public Overrides ReadOnly Property IsValid() As Boolean` | Reports the item as valid only when its child security-group collection is also valid. |
| IsDirty | `Public Overrides ReadOnly Property IsDirty() As Boolean` | Reports the item as dirty when either the parent row or its child security-group collection has changed. |
| Save | `Public Overrides Function Save() As Boolean` | Persists the item and, when necessary, its child security-group collection. |
| SaveChild | `Public Overrides Function SaveChild() As Boolean` | Persists the item as a child object and cascades dirty child security-group rows. |
| Equals | `Public Overloads Shared Function Equals(ByVal objA As Object, ByVal objB As Object) As Boolean` | Compares business-object identity using this type's key semantics. |
| Equals | `Public Overloads Overrides Function Equals(ByVal inObject As Object) As Boolean` | Compares business-object identity using this type's key semantics. |
| Equals | `Public Overloads Function Equals(ByVal inObject As clsMenuItem) As Boolean` | Compares business-object identity using this type's key semantics. |
| GetHashCode | `Public Overrides Function GetHashCode() As Integer` | Returns a hash based on the type's business identity semantics. |
| ToString | `Public Overrides Function ToString() As String` | Returns the type's string representation for diagnostics or UI binding. |
| NewMenuItem | `Public Shared Function NewMenuItem(ByVal inDataportal As IDataPortalInfo) As clsMenuItem` | Creates a new typed object using the supplied data-portal context. |
| GetMenuItem | `Public Shared Function GetMenuItem(ByVal inDataportal As IDataPortalInfo, ByVal inMenuItemSeqNum As Decimal) As clsMenuItem` | Retrieves the single `MENU_ITEM` row identified by the surrogate key `inMenuItemSeqNum`, along with its child `SecurityGroups` collection, populating page, category, visibility, and order data for one item. |

## Behavioral notes
- Enforces [BR-MENU-005](../../business-rules.md#br-menu-005-menu-item-validity-and-dirtiness-cascade-to-security-groups).

## Constraints and usage notes
- Depends on child security-group state.

## Inherited public members

No `dependency-resolution.json` was produced for this run, so the members below are a best-effort inference from typical SAIF BOF framework (`clsBusinessBase`) patterns observed elsewhere in this codebase, not a Legends CLI-sourced dependency lookup.**

### From clsBusinessBase (SAIF.BOF.Framework)**

| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| AddErrorMessage | `Protected Sub AddErrorMessage(ByVal inKey As String, ByVal inMessage As String)` | Records a named validation/error message consulted by the local `IsValid` override.** | `clsBusinessBase` |
| MarkOld | `Protected Sub MarkOld()` | Clears the object's dirty flag after a successful load or save.** | `clsBusinessBase` |
| MarkNew | `Protected Sub MarkNew()` | Marks a freshly constructed object as new/dirty so `Save()`/`SaveChild()` treat it as an insert candidate.** | `clsBusinessBase` |
| Delete | `Public Overridable Sub Delete()` | Marks the object for deletion and, on save, routes it through `BeforeDelete`/`AfterDelete`.** | `clsBusinessBase` |

> **Note:** Statements marked with `**` could not be confirmed; treat
> as unknown until verified.

## Sources
- `SAIF.Business.Menu\clsMenuItem.vb`
