Mandatory field missing on API page

Properties
PC0026 Warning Design Code Fix Ignore Obsolete

An API page will compile and respond to OData requests without SystemId or SystemModifiedAt in the layout. The missing fields only surface as failures downstream: API consumers have no stable record identifier, and webhook notifications silently stop working.

The platform’s webhook infrastructure filters page controls by the exact name lastModifiedDateTime to determine whether a page supports change tracking. If the control is absent or exposed under a different name, the platform skips the page for incremental notifications — no error, no log entry.

This field should be exposed with the name lastModifiedDateTime. If you choose a different name, then the webhook functionality will not work properly.

API Page / Query best practices on alguidelines.dev

Expose SystemId as id and SystemModifiedAt as lastModifiedDateTime.

Example

page 50100 "Customer API" // Mandatory field missing on API page [PC0026]
{
    PageType = API;
    SourceTable = Customer;

    layout
    {
        area(Content)
        {
            repeater(Group)
            {
                field(displayName; Rec.Name) { }
            }
        }
    }
}

Add the mandatory fields with the required control names:

page 50100 "Customer API"
{
    PageType = API;
    SourceTable = Customer;

    layout
    {
        area(Content)
        {
            repeater(Group)
            {
                field(id; Rec.SystemId) { }
                field(displayName; Rec.Name) { }
                field(lastModifiedDateTime; Rec.SystemModifiedAt) { }
            }
        }
    }
}

When the diagnostic is reported

  • SystemId is missing from the layout, or present but not exposed with the control name id.
  • SystemModifiedAt is missing from the layout, or present but not exposed with the control name lastModifiedDateTime.

Both the source field and the control name must match exactly. field(SystemId; Rec.SystemId) still triggers the diagnostic because the expected control name is id, not SystemId.

Exception

The rule does not trigger on API pages where SourceTableTemporary = true, or on API pages that expose no field controls (service-only pages with [ServiceEnabled] procedures).

See also