Mandatory field missing on API page
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
SystemIdis missing from the layout, or present but not exposed with the control nameid.SystemModifiedAtis missing from the layout, or present but not exposed with the control namelastModifiedDateTime.
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
- API Page Type on Microsoft Learn
- System Fields on Microsoft Learn