Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/skills/design-mdl-syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ Does an existing pattern cover this? If yes, extend it. Don't invent new syntax.
```
New feature: "image collections"
Existing pattern: create/alter/drop/list/describe
design: create image collection Module.Name (...)
design: create image collection Module.Name { image X ( File: '…' ) }
describe image collection Module.Name
list image COLLECTIONS [in module]
```
Expand Down
18 changes: 9 additions & 9 deletions .claude/skills/mendix/agents/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,22 +96,22 @@ prompt here.$$,
UserPrompt: 'Single line prompt.'
)
{
mcp service Module.WebSearch {
mcp service Module.WebSearch (
Enabled: true
}
)

knowledge base KBAlias {
knowledge base KBAlias (
source: Module.ProductDocs,
collection: 'product-docs',
MaxResults: 5,
description: 'Product docs',
Enabled: true
}
)

tool MyMicroflowTool {
tool MyMicroflowTool (
description: 'Fetch customer data',
Enabled: true
}
)
};
```

Expand All @@ -131,9 +131,9 @@ alter consumed mcp service Module.MyMCP
-- Agent: SET for scalars, ADD/DROP for tools, MCP services, knowledge bases
alter agent Module.MyAgent
set SystemPrompt = 'New prompt', Temperature = 0.7, MaxTokens = 4096
add tool MyMicroflow { Description: '...', Enabled: true }
add mcp service Module.WeatherSvc { Description: '...', Enabled: true }
add knowledge base Docs { Source: Module.MyKB, Collection: 'docs', MaxResults: 5 }
add tool MyMicroflow ( Description: '...', Enabled: true )
add mcp service Module.WeatherSvc ( Description: '...', Enabled: true )
add knowledge base Docs ( Source: Module.MyKB, Collection: 'docs', MaxResults: 5 )
drop tool OldTool
drop mcp service Module.OldSvc
drop knowledge base OldKB;
Expand Down
5 changes: 3 additions & 2 deletions .claude/skills/mendix/bootstrap-app/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,9 @@ with these deltas:
against the host name rather than the listen address:

```sql
alter settings configuration 'Default'
ApplicationRootUrl = 'http://backend.local:8080/';
alter settings configuration 'Default' (
ApplicationRootUrl: 'http://backend.local:8080/'
);
```

`run --local` picks that up at boot and prints which configuration it came from.
Expand Down
6 changes: 3 additions & 3 deletions .claude/skills/mendix/create-page/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ create [or replace] page Module.PageName
page is opened in a pop-up. They are optional — omitting them uses the Mendix defaults
(600 × 600, not resizable). Unlike the other header keywords, these property names are
**case-sensitive** and must be written exactly as shown. They can also be changed later
with `alter page … { set PopupWidth = …; }` (see the alter-page skill).
with `alter page … { set (PopupWidth: …); }` (see the alter-page skill).

**Page CSS class / style** (`Class` / `Style`) set the page's Appearance — a CSS class
and inline style applied to the whole page (e.g. `Class: 'container-fluid bg-light'`).
Both are optional and can be changed later with `alter page … { set Class = '…'; }`.
Both are optional and can be changed later with `alter page … { set (Class: '…'); }`.

**Page Variables**: Local variables at the page level for use in expressions (e.g., column visibility).
- DataType: `boolean`, `string`, `integer`, `decimal`, `datetime`
Expand Down Expand Up @@ -243,7 +243,7 @@ To make targeted changes to an existing page (change a label, add a field, remov
```sql
-- Change a button caption and add a field
alter page Module.Customer_Edit {
set caption = 'Save & Close' on btnSave;
set (caption: 'Save & Close') on btnSave;
insert after txtEmail {
textbox txtPhone (label: 'Phone', attribute: Phone)
}
Expand Down
15 changes: 8 additions & 7 deletions .claude/skills/mendix/demo-data/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ For full credentials (username, password):

Example output:
```sql
alter settings configuration 'Default'
DatabaseType = 'PostgreSql',
DatabaseUrl = 'localhost:5434',
DatabaseName = 'mxcli2-dev',
DatabaseUserName = 'mendix',
DatabasePassword = 'mendix',
HttpPortNumber = 8080;
alter settings configuration 'Default' (
DatabaseType: 'PostgreSql',
DatabaseUrl: 'localhost:5434',
DatabaseName: 'mxcli2-dev',
DatabaseUserName: 'mendix',
DatabasePassword: 'mendix',
HttpPortNumber: 8080
);
```

---
Expand Down
10 changes: 5 additions & 5 deletions .claude/skills/mendix/json-structures-and-mappings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,12 @@ in the demo corpus (22.6%), and the only non-JSON source MDL can create. It
holds nothing external: it is a **selection over the domain model**.

```sql
create message definition collection Sales.MD_Order (
definition OrderMessage for Sales.Order as 'Orders' (
create message definition collection Sales.MD_Order {
definition OrderMessage for Sales.Order as 'Orders' {
OrderId,
Sales.Order_Customer/Sales.Customer ( FirstName )
)
);
Sales.Order_Customer/Sales.Customer { FirstName }
}
};
```

A bare name is an attribute; `Assoc/Module.Entity` is an association. **Name the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ external: it is a **selection over the domain model**.
```sql
create message definition collection Sales.MD_Order
folder 'Messages'
(
definition OrderMessage for Sales.Order as 'Orders' (
{
definition OrderMessage for Sales.Order as 'Orders' {
OrderId,
Total as 'GrandTotal',
Sales.OrderLine_Order/Sales.OrderLine as 'Lines' ( Sku, Quantity ),
Sales.Order_Customer/Sales.Customer ( FirstName, Address example 'Kerstraat 5' )
)
);
Sales.OrderLine_Order/Sales.OrderLine as 'Lines' { Sku, Quantity },
Sales.Order_Customer/Sales.Customer { FirstName, Address example 'Kerstraat 5' }
}
};
```

A **bare name is an attribute**; `Assoc/Module.Entity` is an **association** with
Expand Down Expand Up @@ -62,7 +62,7 @@ alter message definition Sales.MD_Order.OrderMessage add member LastName in Cust
alter message definition Sales.MD_Order.OrderMessage set member Total as 'GrandTotal';
alter message definition Sales.MD_Order.OrderMessage drop member Sku in Lines;

alter message definition collection Sales.MD_Order add definition Line for Sales.Line ( Sku );
alter message definition collection Sales.MD_Order add definition Line for Sales.Line { Sku };
alter message definition collection Sales.MD_Order rename definition Line to OrderLine;
alter message definition collection Sales.MD_Order drop definition if exists OrderLine;
```
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/mendix/migrate-design-prototype/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ Use `alter page` to attach a class without rewriting the page (see `alter-page`)

```sql
alter page ResourceScheduling.Approvals {
set Class = 'ss-appr-card ss-appr-card--conflict' on queueCard;
set (Class: 'ss-appr-card ss-appr-card--conflict') on queueCard;
}
```

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/mendix/odata-data-sharing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ Then re-import: `CREATE OR MODIFY EXTERNAL ENTITIES FROM F1Now.NowApi` maps the
new entity sets. Do **not** `DROP CONSUMED ODATA SERVICE` and recreate it to force a
refresh — that invalidates the client ID the existing external entities point at.

Note that `ALTER CONSUMED ODATA SERVICE SET MetadataUrl = …` does *not* re-fetch. Use
Note that `ALTER CONSUMED ODATA SERVICE … SET ( MetadataUrl: … )` does *not* re-fetch. Use
`CREATE OR MODIFY` when the contract is what changed.

**Use Cases for Local Metadata:**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,8 @@ from consumed odata service ShopClient.ShopApiClient
);

-- Toggle the flag without recreating the entity.
alter entity ShopClient.Product set allow_create_change_locally = true;
alter entity ShopClient.Product set allow_create_change_locally = false;
alter entity ShopClient.Product set ( AllowCreateChangeLocally: true );
alter entity ShopClient.Product set ( AllowCreateChangeLocally: false );
```
## Publishing a Non-Persistable Entity (no copy of the data)

Expand Down
104 changes: 55 additions & 49 deletions .claude/skills/mendix/project-settings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,22 @@ describe settings;
### Modify Model Settings

```sql
alter settings runtime AfterStartupMicroflow = 'Module.MF_Startup'; -- must return Boolean (CE0142)
alter settings runtime BeforeShutdownMicroflow = 'Module.MF_Shutdown';
alter settings runtime HealthCheckMicroflow = 'Module.MF_HealthCheck';
alter settings runtime HashAlgorithm = 'BCrypt';
alter settings runtime BcryptCost = 12;
alter settings runtime JavaVersion = 'Java21'; -- or '21'; see note below
alter settings runtime RoundingMode = 'HalfUp';
alter settings runtime AllowUserMultipleSessions = true;
alter settings runtime ScheduledEventTimeZoneCode = 'Etc/UTC';
alter settings runtime DefaultTimeZoneCode = 'Europe/Amsterdam';
alter settings runtime FirstDayOfWeek = 'Monday'; -- Default, Monday..Sunday
alter settings runtime DecimalScale = 8;
alter settings runtime EnableDataStorageOptimisticLocking = true;
alter settings runtime UseDatabaseForeignKeyConstraints = true;
alter settings runtime UseOQLVersion2 = true;
alter settings runtime SslCertificateAlgorithm = 'PKIX'; -- PKIX or SunX509
alter settings runtime ( AfterStartupMicroflow: 'Module.MF_Startup' ); -- must return Boolean (CE0142)
alter settings runtime ( BeforeShutdownMicroflow: 'Module.MF_Shutdown' );
alter settings runtime ( HealthCheckMicroflow: 'Module.MF_HealthCheck' );
alter settings runtime ( HashAlgorithm: 'BCrypt' );
alter settings runtime ( BcryptCost: 12 );
alter settings runtime ( JavaVersion: 'Java21' ); -- or '21'; see note below
alter settings runtime ( RoundingMode: 'HalfUp' );
alter settings runtime ( AllowUserMultipleSessions: true );
alter settings runtime ( ScheduledEventTimeZoneCode: 'Etc/UTC' );
alter settings runtime ( DefaultTimeZoneCode: 'Europe/Amsterdam' );
alter settings runtime ( FirstDayOfWeek: 'Monday' ); -- Default, Monday..Sunday
alter settings runtime ( DecimalScale: 8 );
alter settings runtime ( EnableDataStorageOptimisticLocking: true );
alter settings runtime ( UseDatabaseForeignKeyConstraints: true );
alter settings runtime ( UseOQLVersion2: true );
alter settings runtime ( SslCertificateAlgorithm: 'PKIX' ); -- PKIX or SunX509
```

**Not every project stores every setting.** Mendix adds model settings over time —
Expand Down Expand Up @@ -97,18 +97,20 @@ configuration, add `DatabasePassword = '…'` yourself.

```sql
-- Full database configuration
alter settings configuration 'Default'
DatabaseType = 'PostgreSql',
DatabaseUrl = 'localhost:5432',
DatabaseName = 'mydb',
DatabaseUserName = 'mendix',
DatabasePassword = 'mendix',
HttpPortNumber = 8080,
ServerPortNumber = 8090;
alter settings configuration 'Default' (
DatabaseType: 'PostgreSql',
DatabaseUrl: 'localhost:5432',
DatabaseName: 'mydb',
DatabaseUserName: 'mendix',
DatabasePassword: 'mendix',
HttpPortNumber: 8080,
ServerPortNumber: 8090
);

-- Update a single field
alter settings configuration 'Default'
DatabaseUrl = 'newhost:5432';
alter settings configuration 'Default' (
DatabaseUrl: 'newhost:5432'
);
```

`HttpPortNumber`, `ServerPortNumber`, `BcryptCost`, `DefaultTaskParallelism` and
Expand Down Expand Up @@ -169,10 +171,11 @@ on shared values only:
create configuration 'Staging';

-- Create with properties
create configuration 'Production'
DatabaseType = 'PostgreSql',
DatabaseUrl = 'prod-db:5432',
HttpPortNumber = 8080;
create configuration 'Production' (
DatabaseType: 'PostgreSql',
DatabaseUrl: 'prod-db:5432',
HttpPortNumber: 8080
);

-- Drop a configuration
drop configuration 'Staging';
Expand All @@ -197,7 +200,7 @@ alter settings LANGUAGE modify 'de_DE' (CheckCompleteness: true);
alter settings LANGUAGE remove 'de_DE';

-- the default must already be enabled
alter settings LANGUAGE DefaultLanguageCode = 'en_US';
alter settings LANGUAGE ( DefaultLanguageCode: 'en_US' );
```

A language is identified by its **code** — "Arabic, Sudan" is derived from
Expand All @@ -213,7 +216,7 @@ A language is identified by its **code** — "Arabic, Sudan" is derived from

**Set the default language BEFORE authoring content.** The default is not only a
fallback — it is the language a new caption is stored under, because Mendix has no
language-neutral text. `alter settings LANGUAGE DefaultLanguageCode = 'nl_NL'`
language-neutral text. `alter settings LANGUAGE (DefaultLanguageCode: 'nl_NL')`
*after* creating a page leaves that page's texts in the old language, and nothing
reports it: `mx check` is 0 errors either way and the symptom shows up only in
Studio Pro, as the empty-caption placeholder plus a "no translation" warning.
Expand All @@ -231,9 +234,10 @@ list.

```sql

alter settings workflows
UserEntity = 'System.User',
DefaultTaskParallelism = 3;
alter settings workflows (
UserEntity: 'System.User',
DefaultTaskParallelism: 3
);
```

### Workflow Groups (Mendix 11.2+)
Expand Down Expand Up @@ -281,24 +285,26 @@ Four things worth knowing:

### PostgreSQL Configuration
```sql
alter settings configuration 'Default'
DatabaseType = 'PostgreSql',
DatabaseUrl = 'localhost:5432',
DatabaseName = 'myapp',
DatabaseUserName = 'mendix',
DatabasePassword = 'mendix',
HttpPortNumber = 8080;
alter settings configuration 'Default' (
DatabaseType: 'PostgreSql',
DatabaseUrl: 'localhost:5432',
DatabaseName: 'myapp',
DatabaseUserName: 'mendix',
DatabasePassword: 'mendix',
HttpPortNumber: 8080
);
```

### SQL Server Configuration
```sql
alter settings configuration 'Default'
DatabaseType = 'SqlServer',
DatabaseUrl = 'localhost:1433',
DatabaseName = 'myapp',
DatabaseUserName = 'sa',
DatabasePassword = 'MyPassword',
HttpPortNumber = 8080;
alter settings configuration 'Default' (
DatabaseType: 'SqlServer',
DatabaseUrl: 'localhost:1433',
DatabaseName: 'myapp',
DatabaseUserName: 'sa',
DatabasePassword: 'MyPassword',
HttpPortNumber: 8080
);
```

## Checklist
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/mendix/regular-expressions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ create entity Val.Person (
Code: String(20) unique error message 'Code must be unique'
);

alter entity Val.Person modify attribute Email String(200)
alter entity Val.Person modify attribute Email: String(200)
not null error message 'Email is required';
```

Expand Down
12 changes: 6 additions & 6 deletions .claude/skills/mendix/rest-client/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,22 @@ create consumed rest service Module.OpenMeteoAPI (
authentication: none
)
{
operation GetForecast {
operation GetForecast (
method: get,
path: '/forecast',
query: ($latitude: decimal, $longitude: decimal, $current: string),
headers: ('Accept' = 'application/json'),
timeout: 30,
response: json as $WeatherJson
}
)

operation PostData {
operation PostData (
method: post,
path: '/submit',
headers: ('Content-Type' = 'application/json'),
body: json from $JsonPayload,
response: none
}
)
};
```

Expand Down Expand Up @@ -417,13 +417,13 @@ create consumed rest service Module.WeatherAPI (
authentication: none
)
{
operation GetCurrent {
operation GetCurrent (
method: get,
path: '/forecast',
query: ($latitude: decimal, $longitude: decimal, $current: string),
headers: ('Accept' = 'application/json'),
response: json as $Result
}
)
};

-- 5. Microflow (REST Client → Transform → Import)
Expand Down
Loading
Loading