---
title: SAIF.Application.LogView operations and processes
summary: Operation catalog and cross-operation hub for the application error and info/audit logging library.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Application.LogView
reference_type: package
---

# SAIF.Application.LogView operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Application.LogView`. The library exposes seven operations covering creation, retrieval, soft-delete update, and filtered search for two parallel log types — application errors (`clsAppError`/`clsAppErrorCollection`) and application info/audit events (`clsAppInfo`/`clsAppInfoCollection`). 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 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Log an application error](operations/error-logging.md) | Persist a caller-supplied error event as one `App_Error` row and return the generated sequence number | `clsAppError.CreateNewAppError(...)` (struct or discrete-parameter overload) | `IDataPortalInfo`; `ErrorInfoStruct` or discrete error fields | Saved `clsAppError` with `AppErrorSeqNum`; `InsertError` message on failure | [BR-006](business-rules.md#br-006-inserts-must-affect-exactly-one-row) | [App_Error](database-tables.md#app_error) | [SQL-003](sql/SQL-003-saif-application-logview.md), [SQL-001](sql/SQL-001-saif-application-logview.md) |
| [Retrieve a single application error](operations/error-retrieval.md) | Load exactly one error object by sequence number | `clsAppError.GetAppError(...)` | `IDataPortalInfo`, `AppErrorSeqNum` | Populated `clsAppError`, or an unhandled `ApplicationException` on invalid row count | [BR-005](business-rules.md#br-005-single-object-retrieval-requires-exactly-one-row) | [App_Error](database-tables.md#app_error) | *(no executable single-object SQL documented)* |
| [Update an application error's deleted flag](operations/error-deleted-flag-update.md) | Persist a `Deleted_Flag` change on an existing error row | Caller sets `DeletedFlag` on a retrieved `clsAppError` and calls `Save()` | Existing `clsAppError`, new `DeletedFlag` value | Update request executed against `App_Error`; no rows-affected validation on this path | [BR-006](business-rules.md#br-006-inserts-must-affect-exactly-one-row) | [App_Error](database-tables.md#app_error) | [SQL-009](sql/SQL-009-saif-application-logview.md) |
| [Search application error logs](operations/error-search.md) | Return a filtered, sorted page of error rows plus the total matching count | Any `GetAppErrorCollection(...)` overload | Error-date, date range, machine, app, environment, user, search-text, sort criteria | Up to 300 `clsAppError` rows plus `TotalCount` | [BR-001](business-rules.md#br-001-search-results-are-capped-at-300-rows), [BR-002](business-rules.md#br-002-all-sentinel-suppresses-selected-filters), [BR-003](business-rules.md#br-003-semicolon-delimited-filters-expand-to-sql-in-lists), [BR-004](business-rules.md#br-004-search-text-is-normalized-for-full-text-queries) | [App_Error](database-tables.md#app_error) | [SQL-005](sql/SQL-005-saif-application-logview.md), [SQL-006](sql/SQL-006-saif-application-logview.md) |
| [Log an application info event](operations/info-logging.md) | Persist a caller-supplied audit event as one `App_Info` row with a fixed 30-day purge date | `clsAppInfo.CreateNewAppInfo(...)` (struct or discrete-parameter overload) | `IDataPortalInfo`; `AuditInfoStruct` or discrete audit fields | Saved `clsAppInfo` with `AppInfoSeqNum`; `InsertError` message on failure | [BR-007](business-rules.md#br-007-audit-rows-receive-a-30-day-purge-date), [BR-006](business-rules.md#br-006-inserts-must-affect-exactly-one-row) | [App_Info](database-tables.md#app_info) | [SQL-004](sql/SQL-004-saif-application-logview.md), [SQL-002](sql/SQL-002-saif-application-logview.md) |
| [Retrieve or create a single application info record](operations/info-retrieval.md) | Allocate a new transient info object or load one existing row by sequence number | `clsAppInfo.NewAppInfo(...)` or `clsAppInfo.GetAppInfo(...)` | `IDataPortalInfo`, `AppInfoSeqNum` | New unsaved `clsAppInfo`, or a populated `clsAppInfo` on successful retrieve | [BR-005](business-rules.md#br-005-single-object-retrieval-requires-exactly-one-row) | [App_Info](database-tables.md#app_info) | *(no executable single-object SQL documented)* |
| [Search application info logs](operations/info-search.md) | Return a filtered page of audit rows plus the total matching count, excluding `EPAY`/`DirectDeposit` by default | Any `GetAppInfoCollection(...)` overload | Create-date, date range, machine, app, environment, user, search-text, `SearchType`, `ExcludeEpayAndDD` criteria | Up to 300 `clsAppInfo` rows plus `TotalCount` | [BR-001](business-rules.md#br-001-search-results-are-capped-at-300-rows), [BR-002](business-rules.md#br-002-all-sentinel-suppresses-selected-filters), [BR-003](business-rules.md#br-003-semicolon-delimited-filters-expand-to-sql-in-lists), [BR-004](business-rules.md#br-004-search-text-is-normalized-for-full-text-queries), [BR-008](business-rules.md#br-008-audit-searches-exclude-epay-and-directdeposit), [BR-009](business-rules.md#br-009-info-search-full-text-scope-is-restricted-by-searchtype) | [App_Info](database-tables.md#app_info) | [SQL-007](sql/SQL-007-saif-application-logview.md), [SQL-008](sql/SQL-008-saif-application-logview.md) |

## Process flow diagram

The following diagram shows how the seven operations relate across the two parallel log types: callers create, retrieve, update, and search error and info records through structurally identical BOF lifecycles.

```mermaid
flowchart TD
	Start([Caller requests log operation]) --> Which{Error or info log?}
	Which -->|Error| ELog[Log an application error]
	Which -->|Error| ERetrieve[Retrieve a single<br>application error]
	Which -->|Error| EUpdate[Update an error's<br>deleted flag]
	Which -->|Error| ESearch[Search application<br>error logs]
	Which -->|Info| ILog[Log an application<br>info event]
	Which -->|Info| IRetrieve[Retrieve or create a single<br>application info record]
	Which -->|Info| ISearch[Search application<br>info logs]
	ERetrieve --> EUpdate
	ELog --> Done([Object saved / returned])
	EUpdate --> Done
	ESearch --> Done
	ILog --> Done
	IRetrieve --> Done
	ISearch --> Done
```

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Log an application error](operations/error-logging.md) | [SQL-003](sql/SQL-003-saif-application-logview.md), [SQL-001](sql/SQL-001-saif-application-logview.md) | [App_Error](database-tables.md#app_error) | Write |
| [Update an application error's deleted flag](operations/error-deleted-flag-update.md) | [SQL-009](sql/SQL-009-saif-application-logview.md) | [App_Error](database-tables.md#app_error) | Write |
| [Search application error logs](operations/error-search.md) | [SQL-005](sql/SQL-005-saif-application-logview.md), [SQL-006](sql/SQL-006-saif-application-logview.md) | [App_Error](database-tables.md#app_error) | Read |
| [Log an application info event](operations/info-logging.md) | [SQL-004](sql/SQL-004-saif-application-logview.md), [SQL-002](sql/SQL-002-saif-application-logview.md) | [App_Info](database-tables.md#app_info) | Write |
| [Search application info logs](operations/info-search.md) | [SQL-007](sql/SQL-007-saif-application-logview.md), [SQL-008](sql/SQL-008-saif-application-logview.md) | [App_Info](database-tables.md#app_info) | Read |

## Failure and edge-case behavior
- Both single-object retrieval operations ([Retrieve a single application error](operations/error-retrieval.md), [Retrieve or create a single application info record](operations/info-retrieval.md)) throw an unhandled `ApplicationException("Invalid Results")` when the underlying query does not return exactly one row, rather than surfacing a broken-rule collection entry.
- Both collection searches ([Search application error logs](operations/error-search.md), [Search application info logs](operations/info-search.md)) hard-cap the returned page at 300 rows even when the paired count query reports more matches.
- Both insert operations ([Log an application error](operations/error-logging.md), [Log an application info event](operations/info-logging.md)) add an `InsertError` business-object message when the insert does not affect exactly one row, but neither throws — callers must check the object's message collection.
- [Update an application error's deleted flag](operations/error-deleted-flag-update.md) has no `AfterUpdate` rows-affected check, and its `UpdateSQL` text contains a trailing comma before `WHERE`, so this path should be treated as unreliable until corrected.
- The single-object `RetrieveSQL` properties on both `clsAppError.Criteria` and `clsAppInfo.Criteria` are blank placeholder strings, so neither single-object retrieval operation has documented executable SQL in this library.

## 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)

## Sources
- `Application\SAIF.Application.LogView\clsAppError.vb`
- `Application\SAIF.Application.LogView\clsAppErrorCollection.vb`
- `Application\SAIF.Application.LogView\clsAppInfo.vb`
- `Application\SAIF.Application.LogView\clsAppInfoCollection.vb`
- `Application\SAIF.Application.LogView\modLogViewExtensions.vb`
