📐 This interactive ERD is best viewed on a desktop or tablet.
Rotate your device or use a wider screen to explore the schema. Security Roles and ALM Notes are below.
Native CRM
Operations
Walk-In
PK name field
FK lookup
🔒 Excluded (FLS)
Standard field
Dashed line = denormalized lookup

Security Roles

Two custom roles enforce table-level access in the demo environment. Field-level security hides financial and cost columns from both roles regardless of table access.

apdemo_MachineOperator
Shop floor — manages sessions and jobs at the printer
apdemo_PrinterRead
apdemo_PrinterSessionCreate · Read · Write
apdemo_PrintJobCreate · Read · Write
apdemo_FilamentInventoryRead
ContactRead
apdemo_FrontDesk
Customer-facing — manages contacts and job intake
apdemo_PrinterRead
apdemo_PrinterSessionRead
apdemo_PrintJobCreate · Read · Write
apdemo_FilamentInventoryRead
ContactCreate · Read · Write
Field-Level Security: Financial and cost columns — apdemo_lifetimerevenue, apdemo_accruedcostusd, apdemo_depositpaid, apdemo_balancedue, apdemo_totalcostusd, apdemo_costperspoolusd — are excluded at the schema level in this demo environment. They exist in the Dataverse table definition but are not populated and are hidden from both roles via field-level security profiles. These fields would be present and secured (not merely hidden) in a production deployment.

ALM & Solution Notes

The demo environment follows the same ALM patterns used in enterprise client projects.

Publisher
apdemo
All custom tables, columns, and choices use the apdemo_ prefix — isolates demo assets from any future production solution in the same environment.
Solution
APDemoPortfolio
All components are inside a single unmanaged solution during development. Exported as managed for deployment to any target environment — same pattern used for client ISV packaging.
Source Control
Azure DevOps
Solution exported via Power Platform CLI (pac solution export), unpacked to source format, committed to Azure Repos. Pipeline handles import to target environments.
Data Strategy
Synthetic only
All records use obviously fictional names, @demo.local emails, and (555) 000-XXXX phones. Financial fields excluded at schema level — not just hidden.