bcquality/custom/knowledge/mcp/api-page-flowfields-must-be-calcfields.md
Michael Dieringer 935d756f05 Add mcp knowledge category with 5 rules
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>
2026-06-20 13:48:06 +02:00

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 layout section of an API page must be listed in a CalcFields() call in OnAfterGetRecord
  • 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.

CURABIS-MCP-002 — Stored derived fields must be recalculated in OnAfterGetRecord, not exposed directly.