mxcli version: v0.20.0 (release 2026-08-28) · exec repro on a Mendix 11.12.1 bench project
Studio Pro's action pickers have a first-class value "Nothing" (no action). MDL has no way to write it: SET Action = NOTHING parses but the executor rejects it, and no other null/clear form exists. So an action can be set and retargeted via MDL, but never cleared.
Repro
c.mdl:
ALTER PAGE MyModule.UploadPage {
SET Action = NOTHING ON btnCancel;
};
mxcli check c.mdl (no project):
✓ Syntax OK (1 statements)
mxcli exec c.mdl -p App.mpr (bench project, Mendix 11.12.1, btnCancel carries Action: cancel_changes close_page):
Connected to: App.mpr (Mendix 11.12.1)
Error: failed to set: Action value must be an action expression, for example `set Action = microflow Module.MF on btnSave`
describe page afterwards shows the widget unchanged — the refusal is clean, no corruption. But the grammar accepting what the executor always rejects means a check-clean script still fails at exec.
Expected
Either:
- Accept
NOTHING at exec — write the same empty/no-action node the Model SDK writes when a user picks "Nothing" in Studio Pro (preferred; it completes the action-value domain), or
- Reject
NOTHING at parse time with a clear "clearing an action is not supported" message, and say so in the alter-page docs.
Why it matters
Some pluggable widgets require a slot to be "Nothing" to behave correctly — e.g. FileUploader's onUploadFailureFile: leaving a stale microflow wired there breaks the widget's own failure handling ("No argument selected for 'UploadedFile'"-class errors at runtime). A fresh CREATE PAGE scaffold inherits a clean null, but an existing widget's action can only be cleared by hand in Studio Pro today.
(If/when named slots become SET-addressable — see #995 — NOTHING should be a legal value there too.)
mxcli version: v0.20.0 (release 2026-08-28) · exec repro on a Mendix 11.12.1 bench project
Studio Pro's action pickers have a first-class value "Nothing" (no action). MDL has no way to write it:
SET Action = NOTHINGparses but the executor rejects it, and no other null/clear form exists. So an action can be set and retargeted via MDL, but never cleared.Repro
c.mdl:mxcli check c.mdl(no project):mxcli exec c.mdl -p App.mpr(bench project, Mendix 11.12.1,btnCancelcarriesAction: cancel_changes close_page):describe pageafterwards shows the widget unchanged — the refusal is clean, no corruption. But the grammar accepting what the executor always rejects means acheck-clean script still fails at exec.Expected
Either:
NOTHINGat exec — write the same empty/no-action node the Model SDK writes when a user picks "Nothing" in Studio Pro (preferred; it completes the action-value domain), orNOTHINGat parse time with a clear "clearing an action is not supported" message, and say so in thealter-pagedocs.Why it matters
Some pluggable widgets require a slot to be "Nothing" to behave correctly — e.g. FileUploader's
onUploadFailureFile: leaving a stale microflow wired there breaks the widget's own failure handling ("No argument selected for 'UploadedFile'"-class errors at runtime). A freshCREATE PAGEscaffold inherits a clean null, but an existing widget's action can only be cleared by hand in Studio Pro today.(If/when named slots become
SET-addressable — see #995 —NOTHINGshould be a legal value there too.)