Select Page
Business Central Page, Page Field & Page Extension Properties

January 15, 2026

Introduction to Business Central Pages

Pages in Microsoft Dynamics 365 Business Central are the primary interface objects that users interact with. They provide a structured way to display, edit, and manage data from underlying tables.

Page Hierarchy

  • Metadata Block: Defines overall page characteristics (PageType, SourceTable, properties)
  • Layout Section: Describes visual components (areas, groups, fields, parts)
  • Actions Section: Defines available actions, buttons, and navigation

Basic Page Structure

page 50101 "Customer List Simple"
{
    PageType = List;
    SourceTable = Customer;
    ApplicationArea = All;
    UsageCategory = Lists;
    Caption = 'Customer List';
    layout
    {
        area(Content)
        {
            field("No."; "No.") { ApplicationArea = All; }
        }
    }
}

Page Object Properties (Core)

Page Type Property

Defines the fundamental layout and behavior pattern.

Page TypeDescriptionCommon Use
CardSingle-record detail viewCustomer Card, Setup pages
ListMultiple records in tableCustomer List, Item List
DocumentTransaction header + linesSales Order, Purchase Invoice
WorksheetData entry grid with fieldsGeneral Journal
ListPlusList with details panelSales Quotes with line details
APIWeb service endpointREST API integration
RoleCenterUser landing pageSales Manager Role Center
PromptDialogAI Copilot interfaceAI-assisted data entry

Source Table Property

  • Purpose: Specifies the database table the page displays
  • Required for most page types (except RoleCenter, NavigatePage)
  • Cannot be changed in page extensions
  • Example: SourceTable = Customer;

Caption Properties

  • Caption: Page title (single language)
  • CaptionML: Multi-language support
  • Extensible: Yes
Caption = 'Customer List';
CaptionML = ENU='Customer List', ESP='Lista de clientes';

Data Manipulation Properties

  • InsertAllowed: Controls record insertion (default: true)
  • ModifyAllowed: Controls record modification
  • DeleteAllowed: Controls record deletion
  • Editable: Master switch for all field editability
  • All support dynamic expressions: ModifyAllowed = Status <> Status::Posted;

Search and Discovery Properties

Usage Category

Makes pages discoverable through ‘Tell Me’ search. Requires ApplicationArea to be set.

  • None: Not searchable (default)
  • Lists: Customer lists, item lists
  • Tasks: Task-oriented pages
  • ReportsAndAnalysis: Reports and analytics
  • Documents: Sales orders, invoices
  • History: Posted documents
  • Administration: Setup and configuration
UsageCategory = Lists;

Application Area

Controls feature visibility based on license level (Essential vs Premium).

  • All: Always visible (recommended for most scenarios)
  • Suite: Essential license features
  • Advanced: Premium license features
  • FixedAssets, Jobs: Specific functional areas
  • Since BC 2022 Wave 2: Automatically inherits to all page fields
ApplicationArea = All; // Page-level (inherits to all fields)

Additional Search Terms

  • Adds extra keywords for search
  • Extensible: Yes
  • Example: AdditionalSearchTerms = ‘client, debtor, account’;

API-Specific Properties

For PageType = API only. These properties configure the web service endpoint.

URL Structure Properties

PropertyPurposeExample
APIPublisherPublisher name in URLAPIPublisher = ‘contoso’;
APIGroupLogical groupingAPIGroup = ‘salesApp’;
APIVersionVersion identifierAPIVersion = ‘v1.0’;
EntitySetNamePlural name in URL (case-sensitive)EntitySetName = ‘customers’;
EntityNameSingular name (metadata)EntityName = ‘customer’;

Resulting URL: https ://{server}/api/contoso/salesApp/v1.0/companies({id})/customers

Critical API Properties

  • ODataKeyFields: Defines unique record identifier – ALWAYS use SystemId
  • DelayedInsert: MUST be true for editable API pages (batches field values before insert)
  • EntitySetName: Case-sensitive in URLs
  • APIPublisher: Case-insensitive for HTTP but case-sensitive for webhook subscriptions
ODataKeyFields = SystemId; // Immutable, globally unique
DelayedInsert = true;      // Required for APIs

Complete API Page Example

page 50200 "Customer API"
{
    PageType = API;
    APIPublisher = 'contoso';
    APIGroup = 'salesApp';
    APIVersion = 'v1.0';
    EntityName = 'customer';
    EntitySetName = 'customers';
    ODataKeyFields = SystemId;
    DelayedInsert = true;
    SourceTable = Customer;
}

Page Field Properties

Field properties control individual field behavior, appearance, and validation.

Display Properties

PropertyPurposeExtensible
Caption/CaptionMLOverride table field caption for this pageYes
ToolTip/ToolTipMLHover help textYes
VisibleShow/hide fieldYes
EnabledEnable/disable editing (grayed when false)Yes
Show CaptionDisplay field labelYes
ImportanceStandard/Promoted/AdditionalYes
Style/Style ExprVisual styling (colors, emphasis)Yes

ToolTip Best Practices

  • Since BC 2024 Wave 1: ToolTips on table fields automatically inherit to pages
  • Format: ‘Specifies…’ or ‘Defines…’
  • Example: ToolTip = ‘Specifies the customer\’s phone number’;

Importance Values

  • Standard: Always shown (default)
  • Promoted: Highlighted/emphasized
  • Additional: Hidden under ‘Show more fields’

Style Values

  • None, Standard, StandardAccent
  • Strong, StrongAccent
  • Attention, AttentionAccent
  • Favorable, Unfavorable (for amounts)
  • Ambiguous, Subordinate
Style = Strong;
StyleExpr = GetStyleExpression(); // Dynamic styling

Data Entry Properties

PropertyPurposeExample
EditableField-level edit controlEditable = Status = Status::Open;
QuickEntryInclude in tab navigationQuickEntry = false;
ShowMandatoryVisual highlight for required fieldsShowMandatory = true;
NotBlankEnforce value requiredNotBlank = true;
MultiLineMulti-line text inputMultiLine = true;
LookupEnable lookup (F6/dropdown)Lookup = true;
DrillDownEnable drill-down (clickable link)DrillDown = true;
AssistEditAdd assist-edit button (…)AssistEdit = true;

Formatting Properties

Decimal Places

DecimalPlaces = 2:2;  // Always 2 decimals

DecimalPlaces = 0:5;  // Variable, up to 5

Display Options

  • BlankZero: Display zero values as blank
  • BlankNumbers: Control display of different number types
  • ClosingDates: Enable accounting period closing dates

Relationship Properties

Table Relation

Defines relationships to other tables (enables validation, lookup).

// Simple relation
TableRelation = Customer;
// Conditional relation
TableRelation = IF (Type = CONST(Item)) Item
                ELSE Resource;

Navigation Properties

  • LookupPageId: Page shown for lookup
  • DrillDownPageId: Page shown when drilling down
  • Both are extensible
LookupPageId = "Customer List";
DrillDownPageId = "Customer Card";

Page Extension Properties

Page extensions allow modification of existing pages. Only pages with Extensible = true can be extended.

Extensible Properties

Properties marked ‘Extensible = True’ can be modified in page extensions:

Display Properties

  • Caption, CaptionML, ToolTip, ToolTipML
  • Visible, Enabled, Importance, ShowCaption
  • Style, StyleExpr

Behavior Properties

  • InsertAllowed, ModifyAllowed, DeleteAllowed
  • ApplicationArea, QuickEntry, ShowMandatory
  • Editable (since BC 2025 Wave 2+ in customizations)

Help & Search

  • ContextSensitiveHelpPage, AdditionalSearchTerms
  • AboutText, AboutTextML, AboutTitle, AboutTitleML

Non-Extensible Properties

Core structural properties CANNOT be changed:

  • PageType, SourceTable, SourceTableTemporary
  • ODataKeyFields, Extensible
  • API properties (APIPublisher, APIGroup, etc.)
  • Lookup, DrillDown (on fields)

Page Extension Example

pageextension 50100 CustomerListExt extends "Customer List"
{
    // Modify page-level property
    AdditionalSearchTerms = 'client, account';
    layout
    {
        // Add new field
        addafter(Name)
        {
            field("E-Mail"; "E-Mail")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies the customer email';
            }
        }
        // Modify existing field
        modify("Phone No.")
        {
            Importance = Promoted;
            ShowMandatory = true;
        }
    }
}

Best Practices

General Recommendations

  • Always set ApplicationArea = All; at page level (inherits to fields since BC 2022 Wave 2)
  • Provide meaningful ToolTips starting with ‘Specifies…’ or ‘Defines…’
  • Use UsageCategory with ApplicationArea to enable Tell Me search
  • Leverage property inheritance: define tooltips on table fields (BC 2024+)
  • For API pages: ALWAYS set DelayedInsert = true for editable pages
  • Use SystemId for ODataKeyFields (immutable, globally unique)

Performance Tips

  • Use Importance = Additional for rarely-used fields
  • Set DataAccessIntent = ReadOnly for read-only pages
  • Minimize visible FlowFields; consider caching strategies

User Experience

  • Dynamic visibility: Visible = Type = Type::Item;
  • Conditional editability: Editable = Status <> Status::Posted;
  • Visual feedback: Use Style = Favorable/Unfavorable for amounts
  • Quick entry: Set QuickEntry = false on calculated/auto-filled fields

API Development

  • Use SystemId for ODataKeyFields (not business keys)
  • Never break existing API versions; create new versions for breaking changes
  • Expose lastModifiedDateTime field (exact name) for webhook functionality
  • Use camelCase for EntitySetName and field names
  • EntitySetName is case-sensitive in URLs

Troubleshooting Common Issues

Field Not Visible

  • Check ApplicationArea is set (required in cloud)
  • Verify Visible = true or expression evaluates to true
  • Check Company Information > Experience matches ApplicationArea (Essential vs Premium)
  • Fields with Importance = Additional may be under ‘Show more’

Field Not Editable

  • Page-level Editable = false overrides all fields
  • Check field-level Editable property
  • Enabled = false shows grayed-out field
  • Verify user has modify permissions on the table

API Issues

  • Missing DelayedInsert: Error on POST – ensure DelayedInsert = true
  • Case-sensitive EntitySetName in URLs
  • APIPublisher: case-insensitive for HTTP, case-sensitive for webhooks
  • Webhook not working: ensure ‘lastModifiedDateTime’ field (exact name) is exposed

Extension Errors

  • Cannot extend: base page must have Extensible = true
  • Cannot modify property: only Extensible = True properties can be changed
  • Name too long: extension names limited to 30 characters

Common Compiler Errors

Error CodeIssueSolution
AL0167ApplicationArea requires UsageCategorySet UsageCategory for searchability
AL0246ApplicationArea cannot be customizedProperty restricted in context
AS0062/PTE0008ApplicationArea inheritance rulesSince BC 2022 Wave 2, fields inherit from page

Property Quick Reference

Most Commonly Used Page Properties

PropertyTypeExtensibleDescription
PageTypePageNoCard, List, Document, API, etc.
SourceTablePageNoDatabase table
ApplicationAreaBothYesFeature visibility (All, Suite, Advanced)
UsageCategoryPageNoTell Me searchability
Caption/CaptionMLBothYesDisplay title
EditableBothYesEdit control
InsertAllowedPageYesAllow inserts
ModifyAllowedPageYesAllow modifications
DeleteAllowedPageYesAllow deletions
DelayedInsertPageNoRequired for API pages

Most Commonly Used Field Properties

PropertyExtensibleDescription
ToolTip/ToolTipMLYesHover help text
VisibleYesShow/hide field
EnabledYesEnable/disable editing
ImportanceYesStandard/Promoted/Additional
QuickEntryYesInclude in tab navigation
ShowMandatoryYesVisual highlight for required
TableRelationYesRelationship to other tables
LookupPageIdYesLookup page
Style/StyleExprYesVisual styling

API-Specific Properties

PropertyRequiredExample
PageTypeYesPageType = API;
APIPublisherYesAPIPublisher = ‘contoso’;
APIGroupYesAPIGroup = ‘salesApp’;
APIVersionYesAPIVersion = ‘v1.0’;
EntityNameYesEntityName = ‘customer’;
EntitySetNameYesEntitySetName = ‘customers’;
ODataKeyFieldsYesODataKeyFields = SystemId;
DelayedInsertYesDelayedInsert = true;

Conclusion

This blog has provided a comprehensive overview of Business Central page, page field, and page extension properties. Key takeaways:

  • Property Inheritance: Leverage automatic inheritance (ApplicationArea, ToolTips) to reduce duplication
  • Extensibility: Always check which properties are extensible before planning customizations
  • API Best Practices: Use SystemId for keys, enable DelayedInsert, follow naming conventions
  • User Experience: Provide tooltips, use dynamic visibility, optimize quick entry
  • Documentation: Keep captions, tooltips, and help links current