Skip to content

combobox: custom content cannot be written - the slot is refused (MDL-WIDGET26) and CustomContentType 'yes' alone fails mx check CE0642 #1663

Open

Description

@MohamedElNady

mxcli v0.28.0 (2026-10-23) · Mendix 11.14.0 (blank repro project, Combo box 2.10.0 .mpk added) — first hit in an 11.15.0 app · OS Windows Server 2025

Summary

The Combo box's custom content cannot be written. mxcli widget describe combobox lists
optionsSourceAssociationCustomContent / optionsSourceDatabaseCustomContent / staticDataSourceCustomContent as properties of
type widgets, but writing widgets into the slot is refused - MDL-WIDGET26 "optionssourceassociationcustomcontent is not a
container of combobox, which declares no containers". The enumeration that switches it on is written, so
optionsSourceAssociationCustomContentType: 'yes' on its own passes check and exec and then fails mx check with
CE0642 "Property 'Custom content' is required."

Custom content is how a combo box shows more than one attribute per option (in our case a person's English and Arabic name, one
of which the theme hides by language - the caption has to stay a single attribute or expression for filtering).

Related, not a duplicate: #1631 (closed) - alter page replace of a combo box kept the old combo box's custom content, which
describe never shows.

Minimal repro

CREATE MODULE ModB;
CREATE OR MODIFY PERSISTENT ENTITY ModB.Person ( NameEN: String(200), NameAR: String(200) );
CREATE OR MODIFY NON-PERSISTENT ENTITY ModB.Choice ( Note: String(20) );
CREATE OR MODIFY ASSOCIATION ModB.Choice_Person FROM ModB.Choice TO ModB.Person TYPE Reference OWNER Default;
CREATE OR MODIFY MICROFLOW ModB.DS_Choice () RETURNS ModB.Choice AS $Choice
BEGIN
  $Made = CREATE ModB.Choice ( Note = '' );
  RETURN $Made;
END;
CREATE OR MODIFY PAGE ModB.ChoosePage ( Title: 'Choose', Layout: Atlas_Core.Atlas_Default ) {
  DATAVIEW dvChoice (DataSource: MICROFLOW ModB.DS_Choice) {
    COMBOBOX cbPerson (
      Label: 'Person',
      Association: ModB.Choice_Person,
      DataSource: DATABASE ModB.Person,
      CaptionAttribute: NameEN,
      optionsSourceAssociationCustomContentType: 'yes'
    ) {
      optionssourceassociationcustomcontent cc {
        DYNAMICTEXT ccEn (Content: '{1}', ContentParams: ({1} = NameEN))
        DYNAMICTEXT ccAr (Content: '{1}', ContentParams: ({1} = NameAR))
      }
    }
  }
};

(ewo_cb2.mdl is the same page without the { … } body.)

Expected

The slot is a container of combobox (as tagcontentcontainer is of htmlelement), its widgets are written into
optionsSourceAssociationCustomContent (the database and static variants alike), and describe page prints them back.

Actual

$ mxcli check <repro>/scripts/ewo_cb.mdl -p Repro.mpr --references
  ✗ page ModB.ChoosePage: `optionssourceassociationcustomcontent` is not a container of `combobox`, which declares no containers [MDL-WIDGET26]

$ mxcli exec <repro>/scripts/ewo_cb2.mdl -p Repro.mpr        (no body: only the type)
Created page ModB.ChoosePage

$ mxcli -p Repro.mpr -c "describe page ModB.ChoosePage"
    combobox cbPerson (
      Label: 'Person',
      Attribute: Choice_Person,
      DataSource: database from ModB.Person,
      CaptionAttribute: NameEN,
      optionsSourceAssociationCustomContentType: 'yes'
    )

$ mx check Repro.mpr
[error] [CE0642] "Property 'Custom content' is required." at Widgets container 'Custom content' of combo box 'cbPerson'

(The same mx check run lists CE0463 on the blank project's own combo boxes: they predate the 2.10.0 .mpk dropped in for the
repro and are unrelated.)

What narrows it down

Variant Result
slot written as a body container (optionssourceassociationcustomcontent cc { … }) MDL-WIDGET26, refused
…CustomContentType: 'yes' only written; mx check CE0642
…CustomContentType: 'no' (default) fine

Suggestions

  • Declare the three …CustomContent properties as containers of combobox (the widgets-typed properties of other pluggable
    widgets already work this way), and write and describe their widgets.
  • Until then, check could refuse …CustomContentType: 'yes' | 'listItem' without content: it is a guaranteed CE0642.

Workaround we use

Two combo boxes on the same association, one captioned with the English attribute and one with an expression on the Arabic one,
each with a class the theme shows by language. It works, but it doubles every picker (and its data source call) where one widget
with custom content would do.

Session log (isolated HOME, paths redacted)
{"time":"2026-10-27T15:32:24.7221301+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","go":"go1.27.3","os":"windows","arch":"amd64","mode":"mxcli check","args":["mxcli","check","<repro>/scripts/ewo_cb.mdl","-p","Repro.mpr","--references"],"pid":63592,"parent_pid":""}
{"time":"2026-10-27T15:32:26.8684808+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-27T15:32:26.8684808+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-27T15:32:27.6456789+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","go":"go1.27.3","os":"windows","arch":"amd64","mode":"mxcli exec","args":["mxcli","exec","<repro>/scripts/ewo_cb2.mdl","-p","Repro.mpr"],"pid":21728,"parent_pid":""}
{"time":"2026-10-27T15:32:27.6958598+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-27T15:32:27.6958598+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-27T15:32:28.425358+03:00","level":"INFO","msg":"execute","stmt_type":"CreateModuleStmt","stmt_summary":"create module ModB","duration_ms":117}
{"time":"2026-10-27T15:32:28.5002902+03:00","level":"INFO","msg":"execute","stmt_type":"CreateEntityStmt","stmt_summary":"create entity ModB.Person","duration_ms":74}
{"time":"2026-10-27T15:32:28.564366+03:00","level":"INFO","msg":"execute","stmt_type":"CreateEntityStmt","stmt_summary":"create entity ModB.Choice","duration_ms":64}
{"time":"2026-10-27T15:32:28.636341+03:00","level":"INFO","msg":"execute","stmt_type":"CreateAssociationStmt","stmt_summary":"create association ModB.Choice_Person","duration_ms":71}
{"time":"2026-10-27T15:32:28.7106185+03:00","level":"INFO","msg":"execute","stmt_type":"CreateMicroflowStmt","stmt_summary":"create microflow ModB.DS_Choice","duration_ms":74}
{"time":"2026-10-27T15:32:28.8394626+03:00","level":"INFO","msg":"execute","stmt_type":"CreatePageStmtV3","stmt_summary":"create page ModB.ChoosePage","duration_ms":128}
{"time":"2026-10-27T15:32:28.8533038+03:00","level":"INFO","msg":"session_end","commands_executed":7,"errors_count":0,"duration_s":1,"pid":21728}
{"time":"2026-10-27T15:32:29.4975274+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","go":"go1.27.3","os":"windows","arch":"amd64","mode":"batch","args":["mxcli","-p","Repro.mpr","-c","describe page ModB.ChoosePage"],"pid":69908,"parent_pid":""}
{"time":"2026-10-27T15:32:29.554312+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-27T15:32:29.5546407+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":2}
{"time":"2026-10-27T15:32:29.6397359+03:00","level":"INFO","msg":"execute","stmt_type":"DescribeStmt","stmt_summary":"describe PAGE ModB.ChoosePage","duration_ms":69}
{"time":"2026-10-27T15:32:29.6397359+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0,"pid":69908}
{"time":"2026-10-27T15:32:39.4901292+03:00","level":"INFO","msg":"session_start","version":"v0.28.0","go":"go1.27.3","os":"windows","arch":"amd64","mode":"mxcli widget describe","args":["mxcli","widget","describe","combobox","-p","Repro.mpr"],"pid":25428,"parent_pid":""}
{"time":"2026-10-27T15:32:39.6753506+03:00","level":"INFO","msg":"session_end","commands_executed":0,"errors_count":0,"duration_s":0,"pid":25428}

Activity

  1. added a commit that references this issue on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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