Manual · API
form & event
Inside a form script, form is this window — its objects by name, its record — and event says what just happened. Both exist only where they mean something: a menu script has no form.
Every command on this page carries a worked example.
form.record property
form.record no traffic — the bound record is already in hand
The record this window is bound to. What you type is already in it — a script reading form.record.name sees the screen's truth.
Worked example
// The screen's truth, mid-typing:
form.header.value = form.record.name || "New customer";
form.<object> property
form.header · form.list · form.nameField show(query) runs the query on the server a 50-row list ≈ 2 ms
Every object of the form, by its name. Labels have value, lists have show(), value (the chosen record) and reload(), wells have their file.
Worked example
// A list obeys a script: show a search result instead of its table.
const found = database.products.where("stock", "<", 10);
form.list.show(found);
form.countLabel.value = found.count() + " below minimum";
form.close function
form.close(result) no traffic — a local window act
This window closes, handing result to whoever opened it modally — the relationship database has to record.
Worked example
// A small modal form answers its opener:
form.close(form.record.discount); // the opener's forms.open(...) returns this
form.load function
form.load(record) one record is fetched ≈ 0.15 ms
Points the open window at another record — how one window browses a set instead of opening a window per record.
Worked example
// A Next button that browses without opening windows:
const next = database.invoices
.where("date", ">", form.record.date)
.orderBy("date").first();
if (next !== null) { form.load(next); }
event property
event.column · event.record · event.previous …
What just happened, for the event being handled: the edited column and its previous value in onCellChanged, the failing message in onError, the row in list events.
Worked example
// tables/invoices/onValidate.js — the rule EVERY writer obeys:
// the form, the import, the data browser and every script.
if (event.column === "discount" && event.value > 50) {
event.refuse("More than 50 % needs a manager.");
}
Manual