The Boring Tool

Documentation

Marketplace install, companion module, menus, and generator dialogs. Direct notes — no hype.

What it is

The Boring Tool is a Mendix Studio Pro web extension that generates the boring, repeatable model work: CRUD and before/after event microflows, attribute validation microflows, DTO non-persistable entities with mappers, and reusable attribute presets. It favors small composable atoms you wire yourself—not one mega Save flow that already chains validate + map + commit.

Requires Mendix Studio Pro with web-extension support (built and tested for Studio Pro 11.13).

Install (Marketplace — primary)

Once The Boring Tool is listed in the Mendix Marketplace:

  1. Open your app in Mendix Studio Pro.
  2. Open the Marketplace (Studio Pro Marketplace pane / Marketplace browser — the same place you install other Marketplace content).
  3. Search for The Boring Tool (or the published Marketplace title when live).
  4. Download / install into the current app.
  5. When Studio Pro shows the trust prompt for the module’s extension, choose the option that trusts the module and enables the extension (see Trust dialog below).
  6. After install, confirm Extensions → The Boring Tool shows About, Settings, and Documentation.
  7. On a domain model entity, right-click and confirm the The Boring Tool submenu appears (Generate…, Validation…, DTO…, Attributes).

Trust dialog

When you add a Marketplace module that contains a Studio Pro extension (download from Marketplace, or App Explorer → Import module package), Studio Pro shows a trust prompt. You enable/trust the extension there so The Boring Tool can load.

If you decline, the module is still added, but the extension does not load and no The Boring Tool menus appear.

[PENDING — details coming soon] Exact dialog wording coming soon.

Contributors / local build only (not for end users)

Developers building from source copy the build into the app’s extensions/TheBoringTool folder, enable Extension Development in Preferences, restart Studio Pro, and press F4 (Synchronize App Directory) after rebuilds. That path is for contributors—not the supported install for app builders.

Companion module (TheBoringTool)

The extension uses a small Mendix library module named TheBoringTool. Generators call into it and store data there.

  • ValidationContext entity and helper microflows Context_Create and Context_ToNotValid, used by generated validation microflows.
  • AttributePresets folder where the built-in TBT Attribute Preset documents are seeded.

Required for Validation…, DTO…, and Attributes. Without it those dialogs show: "TheBoringTool module is required. Install it from the Marketplace package, then reopen this dialog." (or a more specific message if only ValidationContext is missing).

Not needed for Generate… (CRUD + event microflows), Settings, About, or Documentation.

Do not delete or rename the module; the extension looks for it by name.

How you get the module: install from the Marketplace along with the extension. Neutral wording until delivery is confirmed:

[PENDING — details coming soon] The Marketplace package includes the TheBoringTool module — whether that is the same package as the extension or a separate Marketplace module is not confirmed yet.

Custom documents

The extension registers two Studio Pro custom document types. They appear in App Explorer like other documents; open one to edit it in The Boring Tool’s editor UI.

TBT Validation Expression

  • Readable type name: TBT Validation Expression
  • What it is: A reusable validation rule template (expression + message + params) that Validation… / DTO… can apply to attributes.
  • Typical fields: label, documentation, applies-to value types (String, Integer, Long, Decimal, DateTime, Boolean), server-only flag, default-for-attribute-name hints, parameters (name, type, required, optional operator options), expression (may use $Value, $ParamName, {Param.operator}), message (may use {AttributeName}, {ParamName}).
  • How to use: Create/edit documents in App Explorer. In Validation… or DTO…, pick expressions from the catalog for attributes. Saving Validation/DTO inlines the configured expression into generated Decision logic (attribute microflows / nanoflows).
  • Notes: Built-in string rules under the TheBoringTool module may still appear beside expressions. Library microflows in that module are not regenerated by the extension.

TBT Attribute Preset

  • Readable type name: TBT Attribute Preset
  • What it is: A catalog entry for a common attribute (name, type, length/default/required, optional calculated, tags, default-for-entities, aliases).
  • Where catalog lives: The extension seeds built-in presets under module TheBoringTool → AttributePresets. App/module presets with the same name override TheBoringTool defaults (app/local wins).
  • How to use: Edit presets via their document editor (similar form style to Validation Expressions). On an entity, The Boring Tool → Attributes opens a keyboard-friendly picker over the merged catalog; choosing a preset emits a real attribute on the entity (skip if the name already exists). Calculated presets emit a calculated attribute wired to a stub microflow CAL_{Entity}_{Attribute} under Model/{Entity}/Private for you to fill in.

What you will find in Studio Pro

  • Extensions > The Boring Tool: About, Documentation, Settings.
  • Right-click an entity (in the domain model or the App Explorer) > The Boring Tool: Generate, Validation, DTO, Attributes.
  • Settings is also available from the gear buttons in the Generate and Validation dialogs.

UI walkthrough

About dialog

Opened from About. Shows product/about text. Footer: Documentation (external URL) and Close.

Settings dialog

Opened from Settings (modal). For each generator family (model CRUD, events, validation, DTO/mappers, etc.):

  • On/off switch
  • Folder path template
  • Name template

Save applies to later Generate / Validation / DTO runs. Defaults match the shipping hardcodes.

Generate… dialog

  1. Right-click entity → The Boring Tool → Generate….
  2. Choose which patterns to create (enabled ones only).
  3. Confirm / generate.

Generators (UI names). Each pattern is its own section under Generators.

Existing microflows with the same name are skipped.

Validation… dialog

  1. Right-click entity → Validation….
  2. Select attributes and attach rules / TBT Validation Expression documents (with param values).
  3. Save rewrites the plan and generates/updates microflows.

Typical output:

  • Per-attribute validation microflows {Entity}_Validation_{Attribute} in Model/{Entity}/Validations/. Commit_Validation goes in Model/{Entity}/.
  • Rules come from TBT Validation Expression documents.

Requires the TheBoringTool companion module.

Required and Unique

On each attribute row in the Validation dialog:

  • Two checkboxes per attribute: Required and Unique. When you Save, they add or remove the entity’s own native Mendix validation rules (domain model, entity validation rules). Generated validation microflows are unchanged.
  • When the entity already has a matching native rule, the box shows pre-checked with that rule’s message.
  • When a box is checked, you can edit the error message next to it. The defaults are {Attribute} is required. and {Attribute} must be unique.
  • Unchecking a rule whose message was customised asks for confirmation: "Remove the {required|unique} rule for {Attribute}? The custom message will be discarded on Save."
  • Other native rule types (Range, Max length, Regular expression, …) show read-only under "Also in model:" and are never changed or removed.
  • Unique tooltip: "Case-sensitive, matching Mendix’s native Unique rule."
  • Unique is disabled on non-persistable entities, with the tooltip "Unique rules apply only to persistable entities."

DTO… dialog

  1. Right-click entity → DTO….
  2. Work with stacked DTO “situation” cards (default one {Entity}DTO; add more as needed). Each card: name, attribute pick list, validation rows (same idea as Validation).
  3. Save creates/updates NPEs and mappers.

Typical output:

  • A non-persistable DTO entity per situation
  • Mapper microflows {Dto}_ToDTO and {Dto}_ToModel (object params; 1:1 attribute mapping). Later attribute add/remove rewrites both Change Object member lists in place.
  • Client-side nanoflow validations where configured

Folder convention follows Settings (commonly under UI/DTO/{DtoName}/). Requires the TheBoringTool companion module.

Attributes picker

  1. Right-click entity → Attributes.
  2. Search/select from the attribute-preset catalog (keyboard-friendly).
  3. Confirm — emits attributes (and calculated stubs when the preset says so). Skips names that already exist.

Adds attributes from TBT Attribute Preset documents. Calculated presets add a CAL_{Entity}_{Attribute} microflow stub in Model/{Entity}/Private. Requires the TheBoringTool companion module.

Validation Expression editor / Attribute Preset editor

Opened by opening the custom document in App Explorer. Form editors for the fields described under Custom documents. Save writes the document blob Studio Pro stores with the app.

Generators

Patterns from the Generate… dialog. Folders and names are defaults users can change in Settings.

Create

Creates microflow {Entity}_Create in Model/{Entity}/. The microflow creates a new uncommitted object.

Get

Creates microflow {Entity}_Get in Model/{Entity}/. Retrieve-only microflow (database, first object only), with one parameter per selected attribute. It returns an object of the entity, or empty when nothing is found. No error, no create.

GetBy

Creates microflow {Entity}_GetBy_{Attribute} in Model/{Entity}/. One parameter for one chosen attribute. It retrieves from the database (first object only) and returns an object of the entity, or empty when nothing is found.

GetCreate

Creates microflow {Entity}_GetCreate in Model/{Entity}/. One parameter per selected attribute. It calls {Entity}_Get with them (TBT generates Get too if missing). If the result is not empty it returns it. Otherwise it creates a new object with those attribute values set and returns that. GetCreate does not commit.

Commit

Creates microflow {Entity}_Commit in Model/{Entity}/. The parameter is one object of the entity (named {Entity}). It returns nothing. It commits with events on, refresh in client off, and error handling Rollback.

CommitList

Creates microflow {Entity}_CommitList in Model/{Entity}/. The parameter is a list ({Entity}List). It returns nothing. It commits with events on, refresh in client off, and error handling Rollback.

Delete

Creates microflow {Entity}_Delete in Model/{Entity}/. One object parameter. It returns nothing. It deletes with refresh in client off and error handling Rollback.

DeleteList

Creates microflow {Entity}_DeleteList in Model/{Entity}/. The parameter is a list ({Entity}List). It returns nothing. It deletes with refresh in client off and error handling Rollback.

Before Create

Creates microflow BCR_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment Before, event Create) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

After Create

Creates microflow ACR_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment After, event Create) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

Before Commit

Creates microflow BCO_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment Before, event Commit) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

After Commit

Creates microflow ACO_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment After, event Commit) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

Before Delete

Creates microflow BDE_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment Before, event Delete) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

After Delete

Creates microflow ADE_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment After, event Delete) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

Before Rollback

Creates microflow BRO_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment Before, event Rollback) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

After Rollback

Creates microflow ARO_{Entity} in Model/{Entity}/Events/. Stub microflow with no parameters, no activities, and an end event returning Boolean true. TBT attaches it to the entity's event handler (moment After, event Rollback) with 'pass event object' off. If the microflow already exists, TBT only attaches it.

Commit_Validation

Commit_Validation goes in Model/{Entity}/.

Per-attribute validation

Per-attribute validation microflows go in Model/{Entity}/Validations/ as {Entity}_Validation_{Attribute}.

Calculated attribute stubs

Calculated attribute stubs go in Model/{Entity}/Private as CAL_{Entity}_{Attribute}.

Limits / not included

  • Built and tested for Studio Pro 11.13 (uses the Mendix web extension API, which Mendix itself still labels beta).
  • Requires the TheBoringTool module for Validation, DTO and Attributes.
  • Generates microflows, nanoflows, NPEs, attributes and documents only. It does not generate pages, navigation, or full apps.
  • DTO mappers copy attribute values 1:1 between entity and DTO; there is no type conversion.
  • Flow outline / flow canvas tooling (not included).
  • Manual extensions/ copy as the primary install path for end users (Marketplace is primary).

Quick start

  1. Install from Marketplace → trust/enable the extension when prompted → open the app in Mendix Studio Pro.
  2. Confirm the TheBoringTool companion module is present (needed for Validation, DTO, Attributes).
  3. Right-click an entity → Generate… / Validation… / DTO… / Attributes as needed.
  4. Use Documentation anytime for this page.