Skip to main content

High-Volume Data UX, Server Filtering & Batch Operations

This example is the Enterprise Work Queue, built as a runnable Wisej.NET 4 app.

One screen (UI/WorkQueuePage) over 6,000 seeded work orders: server-side filters, saved views, a pager that loads exactly one page, sort kept in server-side grid state, and a batch reassignment with progress, a per-row result report (UI/BatchResultDialog) and a retry for the failures only.

Nothing is deployed anywhere and nothing talks to a network: in-memory stores only.

Run it

cd "LearnWisej-Samples/Enterprise Wisej.NET Course/Module 5/EnterpriseOps"
dotnet run -f net10.0 --urls http://localhost:5205

Then open http://localhost:5205. (Visual Studio: open EnterpriseOps.slnx, press F5 — launchSettings.json already points at port 5205.) The project multi-targets net10.0-windows;net10.0, so dotnet run needs -f.

The screen

Header with the screen title; one card with the filter bar (txtSearch, cboStatus, cboAssigned, cboSort, btnSearch), the saved views (cboSavedView, btnApplyView, btnSaveView, the ★ lblViewBadge), dgvQueue, the pager (btnFirst/btnPrev/lblPage/btnNext/btnLast, cboPageSize, lblSelection), the batch bar (cboTechnician, btnBatchReassign, btnSelectPage, btnClearSelection), the progress line (lblProgress, progressBatch), an error banner (lblBanner) and the dark status bar (lblStatusBar).

What to click

Signed in as ana.ops (Manager) in tenant contoso.

ActionWhat you should see
(the app opens)50 rows, status bar Page 1 of 47 · 50 of 2,319 matching · sorted by Priority ↓ · N ms, badge ★ Saved view: “My critical queue”
Type pump, press Enter (or Search)~110 matching rows, page back to 1
Click ▶ / ⏭ / ◀ / ⏮the next page is fetched from the server — one page at a time
Click the Priority or Due headerthe arrow moves, the sort is stored in GridState, the page resets to 1
Choose Overdue HVACApply viewfilters, sort and the ★ badge follow the stored query
Edit a filter, Searchthe badge falls back to custom filters
★ Save current as viewa new view appears in the drop-down
Ctrl-click rows (or Select page), change page, come backthe selection is still there — it lives in GridState
Search WO-10023, select WO-100234 / 100235 / 100236, target s.patel, Reassign 3 selected… → Yesprogress Reassigning to s.patel — 0 of 3… before the first row, the button becomes ■ Cancel batch; then status bar Batch complete — 2 succeeded · 1 failed · per-row report · audited and the report: WO-100236 locked by an open approval (APR-1042) — not changed (the failure path)
Retry 1 failed row(s) in the reportonly the failed row is retried, with its version re-read — it fails again while the approval is open
Reassign a row needing a certification to j.kimj.kim lacks the … certificationcertification
■ Cancel batch mid-runamber banner: the rows already committed were not rolled back
Reload the browser (F5)the same page, sort, filters and selection come back from SessionContext

The services log every decision (Service:, Data:, Security:, Job:) to System.Diagnostics.Trace through Services/ActivityTrace.cs — visible in the debugger's Output window.

Where things live

EnterpriseOps/
├─ Program.cs Application.MainPage = new UI.WorkQueuePage()
├─ UI/ WorkQueuePage (.cs/.Designer.cs) · BatchResultDialog (.cs/.Designer.cs)
├─ Domain/ WorkOrder.cs · Technician.cs
├─ Services/
│ ├─ ActivityTrace.cs · CommandContext.cs · SessionContext.cs (grid state + saved views, per session)
│ └─ WorkQueues/ HighVolumeGridPatterns.cs · WorkQueueQueryService.cs · GridState.cs · SavedView.cs
│ ReassignBatchCommand.cs · BatchReassignWorkflow.cs
├─ Data/ WorkOrderStore.cs (6,000 deterministic rows) · SavedViewStore.cs
├─ Security/ PermissionService.cs · AuditTrail.cs
└─ docs/ PagedQueryService.md · SearchProjectionModel.md · SavedViewDefinition.md
BatchReassignmentWorkflow.md (+ .svg) · PerformanceNotes.md