Rules derived from BC MCP API page development experience: - api-page-flowfields-must-be-calcfields: FlowFields return empty on API pages unless explicitly CalcFields'd in OnAfterGetRecord - stored-derived-fields-must-not-be-exposed-directly: Stored fields updated only via OnValidate triggers can be stale; recalculate live in OnAfterGetRecord - api-page-key-fields-must-be-editable-on-insert: ODataKeyFields with Editable=false are rejected as unknown properties on POST - api-page-least-privilege-write-access: Create dedicated minimal pages per write concern rather than widening general-purpose pages - agent-must-not-write-business-process-status: Agents must only write developer-tracking fields; business status fields affect invoicing/time registration Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.5 KiB
CURABIS MCP: FlowFields on API Pages Must Be CalcFields'd
Core Principle
FlowFields on API pages return empty or zero unless explicitly calculated. Every FlowField exposed on a PageType = API page must be called via CalcFields in the OnAfterGetRecord trigger — otherwise the OData response will contain empty values regardless of what the underlying data contains.
Why This Happens
FlowFields are not stored in the database. Business Central only calculates them on demand. Regular pages trigger calculation automatically as part of the page rendering pipeline. API pages do not — the agent or external consumer receives the raw stored (empty) value.
Requirements
- All FlowFields exposed in the
layoutsection of an API page must be listed in aCalcFields()call inOnAfterGetRecord - If multiple FlowFields are needed, they can be combined in a single call:
Rec.CalcFields(Field1, Field2) - Stored fields (non-FlowField) do not need CalcFields
Example
trigger OnAfterGetRecord()
begin
Rec.CalcFields("Elapsed time (Chargeable)", "Customer Name");
end;
Verification
When reviewing an API page, identify every field bound to a FlowField source expression. Confirm each appears in the OnAfterGetRecord CalcFields call. Any FlowField missing from CalcFields is a defect — it will silently return empty to the MCP consumer.
Related Rule
CURABIS-MCP-002 — Stored derived fields must be recalculated in OnAfterGetRecord, not exposed directly.