Models and layers
Updated
A model is the unit of ownership and of transfer: a top-level folder with its own metadata, scripts, and menu. A layer is the model's role in the onion. Extensions only look down.
Note
The tenant compares
MetaPackages.PackageVersiontomodelVersioninmodel.json. Equal versions skip the model as a whole. See Bump the model version.
Layers#
| layerId | Layer | Who puts models here |
|---|---|---|
| 0 | System | The platform (Core). Not edited in the workspace. |
| 1 | Base | Product application models |
| 2 | Solution | Industry / partner solutions |
| 3 | Customization | The implementation |
| 4 | User | One stand's local changes |
There is no model inheritance. Layers are a number (layerId), not a parent pointer on the model row.
A model's layer must be greater than or equal to each dependency's layer. Cycles are refused. A dependency on Core is not declared — the kernel is on every stand.
The SPA sends X-ZuloOne-Model. A record owned by another model is read-only in the designer. Compile, apply-file, the totals bench, and an integration test write rows of the owning model; that is not editing in the designer.
Core/ in the workspace is a downward sync. The export rewrites it. Change the kernel in the platform sources.
A sealed model (isSealed) is also only extended, never edited on the stand.
On a dev stand a new model is created enabled. Shipped to a tenant it arrives disabled; turning it on is a separate, validated action (dependencies, field conflicts, licence).
See also#
- Kind: Model
- How to: Create a model, Extend another model
- Next: Metadata