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 HVAC → Apply 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 … certification → certification
■ 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