5.1: Page Types, Anatomy & Control Structure

Key Takeaways

  • AL pages represent the visual presentation tier of Business Central, categorized by PageType into master cards, multi-record lists, documents, worksheets, subparts, dialogs, assisted setup wizards (NavigatePage), and AI prompt dialogs (PromptDialog).
  • The layout hierarchy consists of distinct functional containers: area(Content) for primary business data and FastTabs, area(FactBoxes) for contextual sidebars, and area(Prompting) for generative AI Copilot workflows.
  • The modern actions container organizes user commands into specialized functional areas (Processing, Creation, Navigation, Reporting, PromptActions) and exposes them via the area(Promoted) modern action bar using actionref controls.
  • Page discoverability via Tell Me search (Alt+Q) requires configuring a non-None UsageCategory (such as Lists, Tasks, Administration, Documents, History, ReportsAndAnalysis) paired with an active ApplicationArea.
  • Essential data concurrency and execution properties including DelayedInsert = true, SourceTableTemporary, SourceTableView, CardPageId, RefreshOnActivate, and CRUD permissions (InsertAllowed, ModifyAllowed, DeleteAllowed) govern page runtime behavior.
Last updated: August 2026

5.1 Page Types, Anatomy & Control Structure

In Microsoft Dynamics 365 Business Central, Pages represent the visual presentation and interaction tier of the application. Every user interaction—from viewing customer lists and entering sales orders to configuring system setup and interacting with AI Copilot prompts—occurs through a page object. For the MB-820 certification exam, developers must master the comprehensive taxonomy of page types, understand the structural containers of page definitions, configure modern action ribbons, and apply page properties that govern searchability, performance, and data manipulation.


1. Comprehensive Taxonomy of Page Types

The AL programming language provides a rich set of page types specified via the PageType object property. The selected PageType dictates how the Web Client renders the user interface, how records are displayed, and which interactive features are available.

PageTypeTypical Use CaseKey Characteristics & Architecture
CardMaster entities (e.g., Customer Card, Item Card, Vendor Card)Displays a single record across collapsible sections called FastTabs. Optimized for viewing and editing detailed entity attributes.
ListMulti-record entity browsing (e.g., Customer List, Item List)Displays records in a tabular grid using a repeater() control. Supports searching, column sorting, filtering, and row-level drilldown to an associated CardPageId.
ListPlusMulti-grid relationships and matrix forms (e.g., Item Availability by Location)Combines two or more distinct repeater() controls or a header with multiple sub-grids on a single display canvas.
DocumentMaster-detail transactional records (e.g., Sales Order, Purchase Invoice)Composed of a master Card header FastTab combined with an embedded ListPart subform for line items.
WorksheetBatch line processing and journal entry (e.g., General Journal, Payment Reconciliation Journal)Grid-oriented line entry interface with specialized header filters, batch posting actions, and footer balance totals.
ListPartEmbedded grid subpages (e.g., Sales Order Subform, Lines)A lightweight list intended to be embedded within a parent Document, Card, or RoleCenter via a part() control. Linked to the header via SubPageLink.
CardPartContextual sidebars (FactBoxes) and Activity CuesA lightweight card embedded within area(FactBoxes) on cards/lists or within area(RoleCenter) on Role Centers to display summarized metrics, cues, or related details.
HeadlinePartRole Center dynamic greeting and insight bannersSpecialized part page rendering rotating text banners and business insight notifications at the top of a Role Center. Formatted via XML payload syntax.
ConfirmationDialogModal user confirmation dialogsSimple modal window displaying a message prompt with standard Yes / No action buttons. Suppresses menus and navigation chrome.
StandardDialogLightweight input parameter dialogs (e.g., Batch Change Parameters)Modal pop-up window presenting fields for user parameter entry without an action bar or navigation menu. Confirmed with OK / Cancel.
NavigatePageMulti-step Assisted Setup WizardsGuided setup wizard container that renders step-by-step sequential panes with built-in Back, Next, and Finish navigation buttons. Suppresses standard action ribbons.
PromptDialogGenerative AI Copilot interactionsSpecialized dialog container for Microsoft 365 Copilot experiences. Features dedicated prompt input, output generation, and confirmation action surfaces (Keep it, Discard, Regenerate).
APIOData REST API endpointsNon-visual page object exposed exclusively as a RESTful web service entity for external integrations. Does not render in the Web Client UI.

Exam Watch: On the MB-820 exam, pay close attention to the distinction between StandardDialog, NavigatePage, and PromptDialog. A multi-step wizard guiding an administrator through setup steps must use NavigatePage. Quick parameter entry dialogs use StandardDialog. Generative AI prompt-and-response flows use PromptDialog.

Loading diagram...
Business Central Page Structural Hierarchy & Container Layout

2. Structural Containers: Layout and Areas

A page object definition in AL contains two mandatory top-level blocks: layout and actions (plus an optional views block). The layout block defines the visual data controls presented on the screen, organized into dedicated areas:

1. area(Content)

The primary container where the core business data controls reside:

  • On a Card page, area(Content) contains one or more group() containers that render as collapsible FastTabs (e.g., General, Invoicing, Shipping).
  • On a List page, area(Content) contains a single repeater() control that renders the multi-record data grid.
  • On a Document page, area(Content) contains header group() FastTabs and embedded part() controls representing line subforms.

2. area(FactBoxes)

The secondary container located on the right side of the screen (the FactBox pane) that provides contextual, real-time insights regarding the selected record without requiring the user to navigate away:

  • Custom FactBoxes: Declared using part(Name; PageIdentifier) bound to the active record via the SubPageLink property.
  • System FactBoxes: Declared using systempart(Name; SystemPartType):
    • systempart(Links; Links): Displays attached URL hyperlinks and document shortcuts.
    • systempart(Notes; Notes): Displays internal user notes and record commentary.
    • systempart(MyNotes; MyNotes): Displays legacy user-specific personal notes.

3. area(Prompting)

Introduced for AI Copilot experiences (PageType = PromptDialog). It hosts input prompt fields where users specify natural language instructions and displays AI-generated output previews.

4. area(RoleCenter)

The root layout container exclusively utilized when PageType = RoleCenter. It hosts modular part pages including HeadlinePart, CardPart (Cues and Activities), and embedded operational list parts.


3. Actions Container & The Modern Promoted Action Bar

The actions block defines the ribbon commands, buttons, and menus available to the user. Actions are organized into standard functional action areas:

Action AreaPurpose & Visual Placement
area(Processing)Core operational actions (e.g., Post, Calculate, Release, Reopen). Located on the Process tab of the action bar.
area(Creation)Actions that instantiate new related documents or records (e.g., New Sales Quote, New Order).
area(Navigation)Actions that open related entity cards, ledger entries, statistics, or dimensions (e.g., Customer Ledger Entries, Dimensions). Located under the Navigate / Related menu.
area(Reporting)Actions that print or preview business documents and analytical reports (e.g., Print Statement, Sales Summary).
area(PromptActions)Dedicated actions for generative AI prompt flows (Generate, Regenerate, Keep it, Discard).
area(Embedding)Navigation menu links rendered on the top navigation bar of Role Center pages.

The Modern Promoted Actions Architecture (area(Promoted))

In modern Business Central development, the legacy method of promoting actions (using Promoted = true; PromotedCategory = Process; on individual action blocks) is obsolete. Developers must define an area(Promoted) container within the actions block and reference actions using actionref controls grouped inside group(Category_...):

actions
{
    area(Processing)
    {
        action(PostInvoice)
        {
            ApplicationArea = All;
            Caption = 'Post';
            ToolTip = 'Finalize and post the sales invoice.';
            Image = PostOrder;

            trigger OnAction()
            begin
                Codeunit.Run(Codeunit::"Sales-Post", Rec);
            end;
        }
    }
    area(Promoted)
    {
        group(Category_Process)
        {
            Caption = 'Process';
            
            actionref(PostInvoice_Promoted; PostInvoice)
            {
            }
        }
    }
}

4. Essential Page Properties and Discoverability

Page properties configure execution rules, search visibility, and data integrity:

Discoverability: UsageCategory and ApplicationArea

To make a page discoverable in the Tell Me search box (keyboard shortcut: Alt+Q), two properties must be configured simultaneously:

  1. ApplicationArea: Must match an active application area enabled in the user's tenant (commonly All, Basic, Suite).
  2. UsageCategory: Dictates the Tell Me search classification. Valid values include:
    • Lists: Tabular master and transactional lists.
    • Tasks: Operational worksheets and task cards.
    • Administration: Setup and configuration pages.
    • Documents: Transactional headers and orders.
    • History: Posted documents and historical archives.
    • ReportsAndAnalysis: Analytical reports and financial queries.
    • None: Excludes the page from Tell Me search (default).

Exam Rule: Subpages (ListPart, CardPart) and FactBoxes must never specify UsageCategory (leave as None). Setting a UsageCategory on a subpart causes compilation warnings and clutters Tell Me with unusable partial pages.

Data Manipulation and Concurrency Properties

PropertyValue TypeArchitectural Effect
SourceTableTable IdentifierBinds the page dataset to a physical or temporary table buffer.
SourceTableTemporaryBooleanWhen true, the page operates on an in-memory temporary record buffer isolated from the SQL database.
SourceTableViewFilter ExpressionEnforces immutable baseline filters and sorting (e.g., where("Document Type" = const(Order))).
CardPageIdPage IdentifierOn a List page, specifies the Card page opened when double-clicking a row or clicking Edit / View.
EditableBooleanControls whether fields on the page can be modified by the user (true by default).
DelayedInsertBooleanWhen true, the OnInsertRecord trigger and SQL INSERT do not fire until the user enters values and navigates away from the primary key fields or active row. Mandatory on List and Worksheet repeaters to prevent premature empty record creation.
InsertAllowed / ModifyAllowed / DeleteAllowedBooleanRestricts specific CRUD operations at the UI layer without requiring table-level permissions changes.
RefreshOnActivateBooleanForces the page to re-execute OnAfterGetRecord and refresh dataset values whenever the user switches back to the browser tab or page view.

5. Complete AL Page Definition Example

The following code demonstrates a robust AL Card page definition illustrating properties, layout areas, FastTabs, FactBoxes, and modern promoted actions:

page 50100 "Equipment Card"
{
    PageType = Card;
    SourceTable = "Equipment Item";
    Caption = 'Equipment Card';
    UsageCategory = None;
    RefreshOnActivate = true;

    layout
    {
        area(Content)
        {
            group(General)
            {
                Caption = 'General';
                field("No."; Rec."No.")
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies the unique identifier for the equipment.';
                    Importance = Promoted;
                }
                field(Description; Rec.Description)
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies a descriptive title for the equipment.';
                    Importance = Promoted;
                }
                field("Serial No."; Rec."Serial No.")
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies the manufacturer serial number.';
                }
                field(Status; Rec.Status)
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies the current operational readiness status.';
                    Importance = Promoted;
                }
            }
            group(Maintenance)
            {
                Caption = 'Maintenance & Service';
                Importance = Additional;
                field("Last Service Date"; Rec."Last Service Date")
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies the date of the most recent service inspection.';
                }
                field("Warranty Expiry Date"; Rec."Warranty Expiry Date")
                {
                    ApplicationArea = All;
                    ToolTip = 'Specifies when the factory warranty coverage ends.';
                }
            }
        }
        area(FactBoxes)
        {
            part(EquipmentPicture; "Equipment Picture FactBox")
            {
                ApplicationArea = All;
                SubPageLink = "No." = field("No.");
            }
            systempart(Links; Links)
            {
                ApplicationArea = RecordLinks;
            }
            systempart(Notes; Notes)
            {
                ApplicationArea = Notes;
            }
        }
    }

    actions
    {
        area(Processing)
        {
            action(ScheduleMaintenance)
            {
                ApplicationArea = All;
                Caption = 'Schedule Maintenance';
                ToolTip = 'Create a new maintenance work order for this equipment.';
                Image = ServiceOrder;

                trigger OnAction()
                var
                    MaintMgmt: Codeunit "Equipment Maintenance Mgmt";
                begin
                    MaintMgmt.CreateWorkOrder(Rec);
                end;
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process';
                actionref(ScheduleMaintenance_Promoted; ScheduleMaintenance)
                {
                }
            }
        }
    }
}
Test Your Knowledge

A developer needs to create an assisted setup wizard that guides administrators through configuring a third-party payment gateway over four sequential steps with Back and Next buttons. Which PageType must be assigned to the page object?

A
B
C
D
Test Your Knowledge

A developer creates a new list page in AL for viewing custom Warehouse Audits. However, when users type 'Warehouse Audits' into the Tell Me search box (Alt+Q), the page does not appear in the search results. What is the most likely reason for this issue?

A
B
C
D
Test Your Knowledge

When designing an editable List or Worksheet page with a repeater control, why is setting the DelayedInsert property to true considered a best practice?

A
B
C
D