Skip to content

DESCRIBE PAGE drops a datagrid's microflow DataSource — round-tripped MDL recreates the grid with no data source #795

Description

@dimenus

mxcli version: local dev build from 2c0f6837 (2026-07-27), built with CGO_ENABLED=0 go build ./cmd/mxcli (no ldflags, so no version stamp) · OS: macOS (Darwin 24.6.0, Apple Silicon) · Mendix project: runtime 11.12.1

Summary

A Data Grid 2 with a microflow data source is created correctly by exec and is present in the model, but DESCRIBE PAGE renders the grid with no data source at all. The round-tripped MDL is therefore wrong: re-applying it produces a grid with no data source.

The model is fine — only the describe output is wrong. This makes it the inverse of #643 (where the value never reached the model) and a sibling of #772 / #443 (describe fidelity, other properties).

The failure is specific to the microflow source kind. The same widget with a database source round-trips correctly (control below).

Minimal repro

Any no-argument microflow returning a list. Here ContentManager.DBG_ListBucketObjects returns List of AmazonS3Connector.ListedObject.

create or modify page ContentManager.TmpProbe (Title: 'T', Layout: Atlas_Core.Atlas_TopBar, Folder: 'PageHost') {
  datagrid g1 (datasource: microflow ContentManager.DBG_ListBucketObjects) {
    column c1 (Attribute: Key, Caption: 'Key')
  }
}
/
$ mxcli check probe.mdl -p ContentManager.mpr
✓ Syntax OK (1 statements)
Check passed!

$ mxcli exec probe.mdl -p ContentManager.mpr
Created page ContentManager.TmpProbe

$ mxcli -p ContentManager.mpr -c "DESCRIBE PAGE ContentManager.TmpProbe"
create or modify page ContentManager.TmpProbe (Title: 'T', Layout: Atlas_Core.Atlas_TopBar, Folder: 'PageHost') {
  datagrid g1 {
    column "Key" (Attribute: Key, Caption: 'Key')
  }
}

Expected

DESCRIBE PAGE renders the data source, e.g. datagrid g1 (DataSource: microflow ContentManager.DBG_ListBucketObjects), so the output can be re-applied without losing the binding.

Actual

datagrid g1 { — no DataSource property at all.

The data source IS in the model (so this is a describe bug, not a write bug)

cmd/dump_page on the same page shows the binding was written correctly:

{ "Key": "$Type",    "Value": "Forms$MicroflowSource" },
{ "Key": "MicroflowSettings", "Value": [
    { "Key": "$Type",     "Value": "Forms$MicroflowSettings" },
    { "Key": "Microflow", "Value": "ContentManager.DBG_ListBucketObjects" },
    ...

Control (same widget, database source, same project)

A Data Grid 2 with a database source in the same project round-trips correctly:

$ mxcli -p ContentManager.mpr -c "DESCRIBE PAGE ContentManager.MyPages"
...
        datagrid gridPages (DataSource: database from ContentManager.Page) {
          column Slug (Attribute: Slug, Caption: 'Slug')

So it is not "pluggable widgets are unsupported in describe" — it is the microflow source kind specifically.

Related: the documented microflow M() form is a parse error

create-page.md documents the datasource syntax as datasource: microflow Module.GetData(). That exact form does not parse:

datagrid g1 (datasource: microflow ContentManager.DBG_ListBucketObjects()) {
Syntax errors found:
  - line 2:74 mismatched input ')' expecting the start of a statement (create, alter, drop, show, describe, …)

Dropping the () parses and works. So the documented form fails and the working form is undocumented. Fixing the describe output would ideally settle which of the two is canonical.

Impact

This is a quiet trap for agentic authoring. DESCRIBE PAGE is the normal way to verify a page after writing it, and here it reports a correct page as broken. The natural next step — "the data source is missing, set it again" — edits a page that was already right. Anything that round-trips a page through describe and re-apply (a refactor, a bulk edit, a page copy) silently drops the binding, and the resulting grid shows nothing at runtime with no error to explain why.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions