ZuloOne
English
Sign in
Menu

What to create

Updated

ZuloOne is metadata plus C# scripts. You describe the object (json). You write the behaviour (.cs). The platform generates the table, the entity, the REST API, and the screen.

Note

You write the business layer. You do not write SQL, migrations, entity classes, controllers, or UI components. If it feels like you must "add something to the platform", that work belongs in the kernel repository, not in the workspace.

How to pick the object#

You want You create You also need
A new application / module A model A menu root, dependencies, a modelVersion
A catalog of records (customer, item, warehouse) A dictionary A number sequence, an event handler (empty is fine), a menu item
A reusable field type An EDT Reference or scalar; Integer, not Int
A closed list of named integers An enum Enum object + Enum EDT; not a Reference. Longer: the kind
An M:N set of rows between records A link table ILinkTableManager / LT_ classes; not a table part. Longer: the kind
Seed JSON the model ships A data package Live sync skips it; apply through IDataPackageService. Longer: the kind
A document that moves through states A document Subtypes, a command per user transition, posting scripts if it writes totals
A number that accumulates (stock, debt, points) A register A posting script on the document that writes it
A slice of settings that changes over time An information register Set / SliceLast; not an accumulation register. Longer: the contract
A calculation that must follow every movement of a register A totals driver Hook on the register, not a posting on every document
Recurring work without a UI button A job Cron + Task script; import arrives disabled
An RPC the outside world calls A web service /api/rest/{Name}, not a data entity. Longer: the contract
A threshold, rate, or mode A global constant GlobalConstants.<Group>.<Name>, not a C# literal
A button the user presses A command Bound to the subtype it is allowed on
A question while that command runs Ask from a command Confirm / Choose / Ask before you write. Longer: the contract
Extra columns on a dictionary list that are not stored Computed list columns IListColumnProvider on a service. Longer: the contract
Shared logic used by more than one script A service Called with GetService<IName>()
A screen that is not a record card A form Form attributes, a module, a menu item
Excel / an external system reading the same rows A data entity One primary source; OData, not a web service
A field or handler on somebody else's object An extension A dependency, a higher layer, your version bumped
The user to find the object A menu item In the same change as the object
Text the user will read A script resource Not a C# string literal. Longer: the rule
A call to a tax office, a bank, an operator An outbound call Channel by name; never HttpClient. Longer: the seam
Proof it works An integration test Then verify

How to code it#

The code Where it lives What it must not do
Fill a field, refuse a value, spawn a related document An event handler Write register movements
Write stock, debt, GL A posting script Look up, calculate, or spawn documents — that is a service / event
Change the document's state from the UI A command Leave the subtype select unlocked; after Save it is frozen
Wrap somebody else's handler, service, command, or posting Chain of Command Skip next / skip [ExtensionOf]. Longer: the contract
Ship the change to tenants Bump modelVersion Reuse the version the tenant already has

Tip

A new dictionary, document, register, virtual total, report, or user command without a menu item is installed and invisible. The table exists. The user cannot open it.

What's not there yet#

There is no generator that writes a whole object from one command. The studio can create the files; you fill them. A print form has a short recipe — Print a form — and a longer page.

Where next#

Was this page helpful?