Transactions
All triggers on data creation or change, and all scripts within do as transaction or do as server, run within a transaction that either executes fully or does not execute at all if it terminates. A transaction is writeable if at least one command within the script could potentially change data (e.g. change the value of a data field).
Ninox executes write transactions serially. This means that read accesses do not interfere with each other, but a write access can block subsequent write transactions.
Normally, this does not mean a restriction, even if hundreds of users are working in parallel. However, this behaviour becomes problematic if a write transaction takes a long time (more than a few milliseconds).
Avoid within transactions:
- Querying external APIs
- Complex queries over a lot of data
User interactions - e.g. dialog(), openTable() - should never be used within a transaction. When executed server-side (for example on the web), they simply do not work.