---
title: SAIF.Business.Menu operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF
last_reviewed: 2026-07-30
library: SAIF.Business.Menu
reference_type: package
---

# SAIF.Business.Menu operations and processes

This page is the operation catalog and cross-operation hub for this library. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Menu tree construction](operations/menu-tree-construction.md) | Build and maintain the hierarchical menu structure (items grouped by page) | Caller retrieves, creates, or saves a menu item or page | Page/item keys; page, category, tooltip, visibility, and order fields | Menu item and page records | [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement) | [MENU_ITEM](database-tables.md#menu-item), [MENU_PAGE](database-tables.md#menu-page), [DUAL](database-tables.md#dual) | [SQL-002](sql/SQL-002-saif-business-menu.md), [SQL-003](sql/SQL-003-saif-business-menu.md), [SQL-008](sql/SQL-008-saif-business-menu.md), [SQL-009](sql/SQL-009-saif-business-menu.md), [SQL-022](sql/SQL-022-saif-business-menu.md), [SQL-023](sql/SQL-023-saif-business-menu.md), [SQL-024](sql/SQL-024-saif-business-menu.md), [SQL-025](sql/SQL-025-saif-business-menu.md), [SQL-034](sql/SQL-034-saif-business-menu.md), [SQL-035](sql/SQL-035-saif-business-menu.md), [SQL-041](sql/SQL-041-saif-business-menu.md), [SQL-042](sql/SQL-042-saif-business-menu.md) |
| [Menu categorization](operations/menu-categorization.md) | Maintain the lookup of category codes used to classify menu items | Caller retrieves, creates, or saves a category code | Category code, description | Category code records | [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement) | [MENU_CATEGORY_CODE](database-tables.md#menu-category-code) | [SQL-006](sql/SQL-006-saif-business-menu.md), [SQL-017](sql/SQL-017-saif-business-menu.md), [SQL-018](sql/SQL-018-saif-business-menu.md), [SQL-032](sql/SQL-032-saif-business-menu.md), [SQL-039](sql/SQL-039-saif-business-menu.md) |
| [Favorite menu management](operations/favorite-menu-management.md) | Let users bookmark, retrieve, deactivate, or remove frequently used menu items | Caller retrieves favorites for a user (or all), or saves/deactivates/deletes a favorite | User ID, menu item key, display order, inactive date | Favorite records | [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement), [BR-MNU-05](business-rules.md#br-mnu-05-favorite-active-status-enforcement) | [MENU_FAVORITE](database-tables.md#menu-favorite) | [SQL-001](sql/SQL-001-saif-business-menu.md), [SQL-007](sql/SQL-007-saif-business-menu.md), [SQL-019](sql/SQL-019-saif-business-menu.md), [SQL-020](sql/SQL-020-saif-business-menu.md), [SQL-021](sql/SQL-021-saif-business-menu.md), [SQL-033](sql/SQL-033-saif-business-menu.md), [SQL-040](sql/SQL-040-saif-business-menu.md) |
| [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) | Record which security groups/users are authorized for each menu item, and resolve the authorized/favorited item projection for a user | Caller requests the authorized-item projection for a user (or all users), or maintains a security-group or user-to-group mapping | Menu item key, user, security group | Authorized item collection; authorization mapping records | [BR-MNU-01](business-rules.md#br-mnu-01-menu-item-visibility-determined-by-security-group-or-user-mapping), [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement), [BR-MNU-04](business-rules.md#br-mnu-04-case-insensitive-security-group-matching), [BR-MNU-05](business-rules.md#br-mnu-05-favorite-active-status-enforcement) | [MENU_SECURITY](database-tables.md#menu-security), [MENU_SECURITY_USER](database-tables.md#menu-security-user), [MENU_ITEM](database-tables.md#menu-item) | [SQL-004](sql/SQL-004-saif-business-menu.md), [SQL-010](sql/SQL-010-saif-business-menu.md), [SQL-011](sql/SQL-011-saif-business-menu.md), [SQL-015](sql/SQL-015-saif-business-menu.md), [SQL-016](sql/SQL-016-saif-business-menu.md), [SQL-026](sql/SQL-026-saif-business-menu.md), [SQL-027](sql/SQL-027-saif-business-menu.md), [SQL-028](sql/SQL-028-saif-business-menu.md), [SQL-029](sql/SQL-029-saif-business-menu.md), [SQL-030](sql/SQL-030-saif-business-menu.md), [SQL-036](sql/SQL-036-saif-business-menu.md), [SQL-037](sql/SQL-037-saif-business-menu.md), [SQL-043](sql/SQL-043-saif-business-menu.md), [SQL-044](sql/SQL-044-saif-business-menu.md) |
| [Application code scoping](operations/application-code-scoping.md) | Maintain the lookup of application identifiers used to scope menu pages, filtering by active status | Caller retrieves an application code by key, active-only, or all, or saves a code | Application code, path, active flag | Application code records | [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement), [BR-MNU-03](business-rules.md#br-mnu-03-active-application-code-filtering) | [BUSONLINE_APPS_CODE](database-tables.md#busonline-apps-code) | [SQL-005](sql/SQL-005-saif-business-menu.md), [SQL-012](sql/SQL-012-saif-business-menu.md), [SQL-013](sql/SQL-013-saif-business-menu.md), [SQL-014](sql/SQL-014-saif-business-menu.md), [SQL-031](sql/SQL-031-saif-business-menu.md), [SQL-038](sql/SQL-038-saif-business-menu.md) |

## Process flow diagram
The following diagram visualizes the primary authorized-menu-item retrieval flow, which draws together data maintained by every other operation on this page.

```mermaid
flowchart TD
    Start([Start: request authorized menu items]) --> CheckUser{MenuUser provided?}
    CheckUser -->|Yes| SQL016[Execute per-user<br>3-part UNION with favorites]
    CheckUser -->|No| SQL015[Execute all-user<br>2-part UNION without favorites]
    SQL016 --> Result([Return authorized item collection])
    SQL015 --> Result
    Result --> Presentation[Presentation layer enforces<br>final authorization decision]
```

## Inherited operations and processes

`SAIF.Business.Menu` types extend the BOF framework base classes (`clsBusinessBase`, `clsBusinessCollection(Of T)`), which define standard lifecycle operations such as object creation, retrieval, save, validation, and deletion through the Data Portal infrastructure. Specific inherited operation details could not be enumerated: the Legends CLI has no indexed content for BOF framework base classes in this run.*

## Database interactions

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) | [SQL-016](sql/SQL-016-saif-business-menu.md) | [MENU_ITEM](database-tables.md#menu-item), [MENU_SECURITY](database-tables.md#menu-security), [MENU_SECURITY_USER](database-tables.md#menu-security-user), [MENU_PAGE](database-tables.md#menu-page), [BUSONLINE_APPS_CODE](database-tables.md#busonline-apps-code), [MENU_CATEGORY_CODE](database-tables.md#menu-category-code), [MENU_FAVORITE](database-tables.md#menu-favorite) | Read |
| [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) | [SQL-015](sql/SQL-015-saif-business-menu.md) | [MENU_ITEM](database-tables.md#menu-item), [MENU_SECURITY](database-tables.md#menu-security), [MENU_SECURITY_USER](database-tables.md#menu-security-user), [MENU_PAGE](database-tables.md#menu-page), [BUSONLINE_APPS_CODE](database-tables.md#busonline-apps-code), [MENU_CATEGORY_CODE](database-tables.md#menu-category-code) | Read |
| [Menu tree construction](operations/menu-tree-construction.md) | [SQL-002](sql/SQL-002-saif-business-menu.md) | [DUAL](database-tables.md#dual) | Read (Sequence) |
| [Menu tree construction](operations/menu-tree-construction.md) | [SQL-008](sql/SQL-008-saif-business-menu.md) | [MENU_ITEM](database-tables.md#menu-item) | Write |
| [Menu tree construction](operations/menu-tree-construction.md) | [SQL-009](sql/SQL-009-saif-business-menu.md) | [MENU_PAGE](database-tables.md#menu-page) | Write |
| [Favorite menu management](operations/favorite-menu-management.md) | [SQL-007](sql/SQL-007-saif-business-menu.md) | [MENU_FAVORITE](database-tables.md#menu-favorite) | Write |
| [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) | [SQL-010](sql/SQL-010-saif-business-menu.md) | [MENU_SECURITY](database-tables.md#menu-security) | Write |
| [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) | [SQL-011](sql/SQL-011-saif-business-menu.md) | [MENU_SECURITY_USER](database-tables.md#menu-security-user) | Write |

## Failure and edge-case behavior
- Any insert, update, or delete that affects a row count other than 1 raises an error via `AddErrorMessage` (see [BR-MNU-02](business-rules.md#br-mnu-02-dml-row-count-enforcement)).
- Active application codes are filtered using `NVL(ACTIVE_CODE, 'Y') = 'Y'` (see [BR-MNU-03](business-rules.md#br-mnu-03-active-application-code-filtering)).
- Security group matching is case-insensitive via `UPPER()` (see [BR-MNU-04](business-rules.md#br-mnu-04-case-insensitive-security-group-matching)).
- Favorites are only included in the authorized-item projection when `ITEM_INACTIVE_DATE IS NULL` (see [BR-MNU-05](business-rules.md#br-mnu-05-favorite-active-status-enforcement)).
- `clsMenuSecurityUserCollection.BeforeRetrieve` has an inverted parameter-binding branch that is a likely source defect — see [Menu authorization data lookup](operations/menu-authorization-data-lookup.md) for details.**

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

> **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
- `Business\SAIF.Business.Menu\clsApplicationCode.vb`
- `Business\SAIF.Business.Menu\clsApplicationCodeCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuAuthorizedItem.vb`
- `Business\SAIF.Business.Menu\clsMenuAuthorizedItemCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuCategoryCode.vb`
- `Business\SAIF.Business.Menu\clsMenuCategoryCodeCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuFavorite.vb`
- `Business\SAIF.Business.Menu\clsMenuFavoriteCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuItem.vb`
- `Business\SAIF.Business.Menu\clsMenuItemCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuPage.vb`
- `Business\SAIF.Business.Menu\clsMenuPageCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurity.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurityCollection.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurityUser.vb`
- `Business\SAIF.Business.Menu\clsMenuSecurityUserCollection.vb`
