12.3 Workspaces, Tiles, Lists & KPIs
Key Takeaways
- Operational Workspaces follow the 'Workspace: Operational' form pattern, organized into three standardized horizontal panorama sections: the Summary Section (tiles and KPIs), the Tabbed Lists Section (actionable grids with contextual commands), and the Links Section (navigational shortcuts).
- Workspace tiles come in distinct functional types: standard Count Tiles (displaying live or cached record tallies from AOT queries), Summation Tiles (aggregating numeric values), Link Tiles (direct navigation without counts), and KPI Tiles (visualizing business metrics).
- Clicking a count or KPI tile executes drill-through navigation via its configured Menu Item, opening an inquiry or master form pre-filtered with the exact query criteria that generated the tile metric.
- To prevent severe workspace loading delays and AOS thread exhaustion, tile queries are evaluated asynchronously by the TileDataService and benefit from count caching, avoiding synchronous blocking of the primary user interface.
- Workspace performance optimization mandates that tile and list queries avoid unindexed status fields, non-clustered cross-company full table scans, and complex Cartesian outer joins, while list form parts must support lazy loading.
12.3 Workspaces, Tiles, Lists & KPIs
Quick Answer: Operational Workspaces in Dynamics 365 Finance and Operations provide role-tailored, 360-degree operational hubs based on the
Workspace: Operationalform pattern. A workspace is organized into three standard panorama sections: the Summary Section (Count Tiles, Summation Tiles, KPI Tiles, and Link Tiles), the Tabbed Lists Section (Form Part controls embedding actionable grids with contextual buttons), and the Links Section (grouped navigational shortcuts). Clicking a tile triggers drill-through navigation, executing its associated Menu Item to open a pre-filtered inquiry form matching the tile's query. To guarantee fast UI rendering, tile counts execute asynchronously through theTileDataServiceand leverage count caching, preventing synchronous full table scans on form initialization.
1. Operational Workspace Architecture & Form Patterns
Traditional ERP navigation relies on deep menu trees, forcing users to open multiple disparate forms to complete a single business workflow (e.g., verifying open sales orders, checking credit limits, and dispatching pick lists across separate screens). Operational Workspaces fundamentally reshape user interaction by consolidating all tasks, data views, and metrics required by a specific job role into a unified command center.
The Workspace: Operational Form Pattern
In Visual Studio, developer-authored workspaces are built by applying the Workspace: Operational form pattern to a top-level Form artifact. The pattern enforces a rigid, standardized control hierarchy conforming to Microsoft UX guidelines:
Workspace: Operational Form Control Hierarchy
Design
├── ActionPane (Standard actions, Workspace Refresh)
└── Panorama (Main horizontal scrolling container)
├── SectionSummary (Summary Section: Tiles & KPIs)
│ └── TileButtonContainer (Hosts Tile controls)
├── SectionTabbedList (Tabbed Lists Section: Tabular grids)
│ └── TabControl
│ ├── TabPageList1 (Hosts FormPartControl -> Form 1)
│ └── TabPageList2 (Hosts FormPartControl -> Form 2)
├── SectionLinks (Links Section: Navigational shortcuts)
│ └── GroupControl (Grouped navigation links)
└── SectionAnalytics (Optional: PowerBIReportControl)
2. Workspace Layout Sections & Component Responsibilities
A compliant operational workspace consists of three core sections rendered horizontally across a panoramic layout:
1. Summary Section (Left Panorama)
The Summary Section provides an immediate executive pulse on operational workload using visually prominent tiles. Tiles are defined in the AOT as Tile metadata elements and categorized by their display behavior:
| Tile Type | Display Property (TileDisplay) | Visual Output | Behavioral Characteristics |
|---|---|---|---|
| Count Tile | TileDisplay::Count | Large numeric integer (e.g., 42) with title label. | Executes an underlying AOT Query returning COUNT(RecId). Updates dynamically. |
| Summation Tile | TileDisplay::Sum | Aggregated decimal currency/numeric total. | Sums a specific field (e.g., total overdue balance) across filtered rows. |
| KPI Tile | TileDisplay::KPI | Numeric metric with trend arrow and colored status. | Connects to multidimensional Aggregate Measurements or business logic indicators. |
| Link Tile | TileDisplay::Standard | Static graphic icon and label without numbers. | Acts as a direct navigation shortcut without incurring query computation overhead. |
2. Tabbed Lists Section (Center Panorama)
The Tabbed Lists Section presents dense, actionable tabular data. Users can review records, inspect details, and perform direct business operations without leaving the workspace.
- Form Part Controls: Rather than duplicating form grids directly on the workspace design, each tab page hosts a
FormPartControl. This control references an independent, modular list form (modeled using theFormPattern::ListorFormPattern::FormPartSectionpattern). - In-Context Action Buttons: Grids within list form parts feature dedicated ActionPane buttons (e.g., Confirm Order, Release to Warehouse, Cancel Line), enabling transactional execution immediately upon row selection.
3. Links Section (Right Panorama)
The Links Section organizes secondary navigation paths into structured categories:
- Fast access to configuration setup forms, complex inquiry forms, periodic batch jobs, and statutory reports.
- Prevents workspace clutter by keeping routine operational grids in the tabbed lists while preserving access to periodic administrative tasks.
3. Drill-Through Navigation Architecture
Tiles do not merely display numbers; they serve as interactive launch pads. When a user clicks a Count Tile showing 18 Orders on Hold, the system must open the relevant transactional form pre-filtered to show precisely those 18 orders.
Drill-Through Navigation Flow
User clicks Count Tile: 'Orders on Hold (18)'
│
▼
Tile queries AOT Tile Definition
├── Query: CustSalesOrdersOnHoldQuery (Range: SalesStatus == Backorder, OnHold == Yes)
└── MenuItem: SalesTableListPage (Display)
│
▼
AOS runtime instantiates Target Form
├── Passes Tile Query ranges via Args object (args.record(), args.parm())
└── Injects QueryBuildRange into SalesTable_DS root datasource
│
▼
Target Form Opens Filtered
└── Grid displays exactly the 18 matching records corresponding to the tile count
Developer Configuration Steps for Drill-Through
- Author the AOT Query: Create an AOT Query (e.g.,
CustOrdersOnHoldQuery) with explicitQueryBuildRangefilters applied to indexed fields (e.g.,SalesTable.Hold == NoYes::Yes). - Create the Menu Item: Create a Display Menu Item pointing to the target inquiry or list form (e.g.,
SalesTableListPage). - Author the AOT Tile: Create a
Tileartifact in Visual Studio. Set:Query=CustOrdersOnHoldQueryMenuItemName=SalesTableListPageTileDisplay=TileDisplay::Count
- Embed in Workspace Form: Add a
TileButtonControlin the workspace's Summary group, setting itsTileproperty to the newly created AOT tile.
4. Performance Optimization for Workspace Queries
Workspaces are notorious performance bottlenecks when poorly architected. If a workspace contains 20 count tiles and 5 tabbed lists, executing 25 unindexed, synchronous SQL queries during form initialization will freeze the user interface and exhaust AOS connection pools.
The Asynchronous TileDataService & Count Caching
To eliminate UI blocking, modern Finance and Operations releases execute tile calculations through the TileDataService:
- Asynchronous Execution: When the workspace loads, the client shell renders immediately. Tile counts are evaluated asynchronously in the background via separate worker threads.
- Tile Count Caching: Calculated tile counts are cached at the AOS layer with a time-to-live (TTL). When the user opens the workspace, cached counts are served instantly from memory.
- Manual & Contextual Refresh: Users can click the workspace Refresh button to invalidate cached tallies and force recalculation.
[!WARNING] Real-World Exam Trap: The Tile Caching Delay MB-500 scenario questions frequently ask: "A clerk confirms a sales order, but the 'Unconfirmed Orders' count tile still displays the previous count. Why?" The answer is Tile Count Caching. Tiles do not execute live database triggers on every transactional commit in other sessions; they reflect cached counts until the cache interval expires or the user manually refreshes the workspace.
Query and Indexing Rules for Workspaces
- Index Coverage: Every field used in a tile
QueryBuildRangemust be included in a database index. Ensure the index contains leading partition andDataAreaIdfields, followed by status columns. - Avoid Unbounded Cross-Company Queries: Setting
AllowCrossCompany = trueon tile queries scans tables across all legal entities, causing massive table scans unless strictly partitioned. - Lazy Loading of Tabbed Lists: Configure Form Part controls to load on-demand. The AOS only executes database queries for the active, visible tab page; inactive tabs defer query execution until the user clicks on them.
- No Display Methods in Form Part Grids: Placing un-cached X++ display methods on list grids forces row-by-row scalar database lookups, destroying workspace responsiveness.
5. Personalization vs. Developer Workspaces
Dynamics 365 supports two layers of workspace creation:
- Personalized Workspaces (End Users): Any business user can create a personal workspace via the UI, pinning filtered list pages, custom tiles, and navigation links. However, personalizations are stored as XML blobs in the
FormRunConfigurationtable and cannot be packaged into deployable code packages or secured across corporate security roles. - AOT Workspaces (Developers): Authored in Visual Studio using the
Workspace: Operationalpattern. They are strongly typed, compiled into application assemblies, version-controlled in Azure DevOps, and bound to role-based security privileges and duties.
6. Realistic Enterprise Scenario Walk-Through: Building a Credit & Collections Workspace
Business Scenario
A global wholesale distributor requires a specialized operational workspace for accounts receivable specialists managing customer credit limits and overdue invoices. The workspace must provide:
- Summary Count Tiles for Customers on Credit Hold and Invoices Overdue > 60 Days.
- A Tabbed List showing blocked customer records with an inline Release Credit Hold action button.
- Direct drill-through navigation opening pre-filtered inquiry screens.
- Strict performance governance to ensure sub-two-second load times across 150 concurrent AR clerks.
Step-by-Step Implementation
- Author Filtered AOT Queries:
- In Visual Studio, create
CustBlockedCreditQuery. AddCustTableas root datasource. Add range onBlockedfield (CustVendorBlocked::AllorCustVendorBlocked::Invoice). - Ensure
CustTablehas an active index covering(DataAreaId, Blocked, AccountNum). - Create
CustOverdueInvoicesQuery. AddCustTransjoined toCustTransOpen. Add range onDueDate(< current date) andClosed== 0.
- In Visual Studio, create
- Create AOT Tiles:
- Create Tile
CustBlockedCreditTile: SetTileDisplay=Count,Query=CustBlockedCreditQuery,MenuItemName=CustTableListPage. - Create Tile
CustOverdueInvoicesTile: SetTileDisplay=Count,Query=CustOverdueInvoicesQuery,MenuItemName=CustTransOpenListPage.
- Create Tile
- Build Modular List Form Part:
- Create a form named
CustBlockedListFormPartusing theFormPartSectionpattern. - Add a grid bound to
CustTableshowingAccountNum,Name,CreditMax, andBlocked. - Add an ActionPane with a button calling an X++ controller class method that updates
BlockedtoNoand triggers workflow logging.
- Create a form named
- Assemble Operational Workspace Form:
- Create form
CustCreditWorkspaceapplying theWorkspace: Operationalpattern. - In
SectionSummary, insert aTileButtonContainerand addTileButtonControlelements referencingCustBlockedCreditTileandCustOverdueInvoicesTile. - In
SectionTabbedList, add a Tab Page containing aFormPartControlpointing toCustBlockedListFormPart. - Configure the Form Part property to enable lazy loading so data queries only run when the tab is actively viewed.
- Create form
- Apply Security and Verification:
- Create a Display Menu Item
CustCreditWorkspaceMenuItempointing toCustCreditWorkspace. - Grant entry point permissions to a custom security duty
CreditClerkMaintain. - Test drill-through: verify clicking the blocked credit tile opens
CustTableListPagefiltered exclusively to blocked customers.
- Create a Display Menu Item
7. Real-World Exam Traps: Workspaces, Tiles, Lists & KPIs
[!WARNING] Exam Trap 1: Tile Count Caching vs. Real-Time Expectation When an exam question describes a scenario where an order status changed in another session but the workspace count tile does not immediately decrement, candidates frequently assume a database lock or sync failure. The actual cause is the built-in Tile Count Caching mechanism. Tile counts are cached by the
TileDataServiceand only update when the cache TTL expires or the user explicitly clicks the workspace Refresh button.
[!WARNING] Exam Trap 2: Cross-Company Query Performance Destruction Setting
AllowCrossCompany = Yeson tile queries causes the SQL query engine to execute unbounded scans across all legal entities. In enterprise environments with hundreds of companies, this causes severe AOS thread exhaustion and query timeouts. Unless strictly filtered by an indexed partition or explicit list of legal entities, tile queries must remain company-specific.
[!WARNING] Exam Trap 3: Deploying Personalized Workspaces via ALM End users frequently create personalized workspaces via the web client interface and request that IT deploy them to other environments. Personalized workspaces are stored as XML records in the
FormRunConfigurationtable in the transactional database. They cannot be checked into source control, compiled into models, or distributed via Software Deployable Packages (SDPs). Enterprise workspaces intended for release governance must be authored in Visual Studio as AOT forms.
[!WARNING] Exam Trap 4: Synchronous Tabbed List Loading Including multiple Form Part lists in the Tabbed Lists section without enabling lazy loading causes the AOS to synchronously evaluate the datasources of every tab on form open, even tabs the user never looks at. Always verify that Form Parts defer data fetching until their container tab page receives focus.
[!WARNING] Exam Trap 5: Drill-Through Query Range Disconnect If clicking a count tile opens the target inquiry form but displays all records instead of the filtered count, the root cause is a mismatch between the Tile's
Queryand the target form's root datasource. Drill-through relies on the menu item transferring the tile's query ranges into matching datasources on the destination form.
Users report that an operational workspace containing 15 count tiles takes more than 12 seconds to load when opened. A developer analyzes the implementation in Visual Studio. Which architectural change should the developer make to optimize workspace initialization performance?
A developer is creating a custom operational workspace in Visual Studio using the 'Workspace: Operational' form pattern. The developer must add a list of pending purchase orders where managers can review lines and click an 'Approve' button directly from the workspace. Which control structure should be used to display this list within the workspace design?
What is the primary functional difference between a Count Tile and a Link Tile in a Dynamics 365 operational workspace?
An inventory clerk clicks on a tile labeled 'Orders Ready for Dispatch (24)' in an operational workspace. When the target form opens, the grid displays only 24 specific orders corresponding to the tile criteria. Which architectural element ensures this seamless drill-through filtering occurs?