Data and integration reference
Choose a capability by data shape, lifetime, and owner before configuring it. State, recipes, tables, and external records should not share one store simply because each option can hold data.
When to use this page
- You are unsure whether to use a Variable, Recipe, RecordStore, or Query.
- A value resets after runtime reload, a durable value is missing, or another target has different data.
- Pages and Graphs need to reuse the same external HTTP call.
- Runtime translations, table data, or Asset paths do not behave as expected.
- A Query test succeeds, but production parameters, authentication, or write results are wrong.
Choose a capability
| Requirement | Capability | Example |
|---|---|---|
| Small shared state in the current loaded runtime | App Variable | Current order, operating mode, temporary result |
| A small value retained by this Runtime target | Saved Variable | Calibration, threshold, accumulated count |
| A temporary value used by one Graph instance | Graph Variable | Loop index, intermediate condition |
| A named, switchable set of process parameters | Recipe | Product model with temperature and pressure |
| Lightweight row data on the current machine | RecordStore | I/O table, material table, batch rows |
| External-system data or records shared across machines | HTTP Query | MES work order, ERP recipe, production report |
| Runtime-page translation | i18n | Button, alarm, and state text |
| Images, videos, 3D models, and uploaded files | Asset | Process diagram, equipment model, attachment |
Do not put large history, complex searches, or cross-machine shared data in a Variable or RecordStore. Keep that data in an external database or business system and access it through a Query.
Entry points and core objects
| Capability | Editor entry point |
|---|---|
| App / Saved Variable | App Settings → Variables |
| Recipe | App Settings → Recipes with one RecipeManager in the Object tree |
| RecordStore | Add a RecordStore to the Object tree and configure fields, primary key, and storage mode in Properties |
| HTTP Query | App Settings → Queries |
| i18n | App Settings → i18n; a Widget text property can also select a translation key in place |
| Asset | Resources → Assets or Files |
Variables
| Type | Current value location | Important behavior |
|---|---|---|
| App Variable | Current materialized runtime | Shared by Pages and Graphs; starts from the defined initial value after reload or redeployment |
| Saved Variable | App runtime state on the current Runtime target | Continues across restart; its current value does not move automatically to another target |
| Graph Variable | One Graph instance | Not shared with other Graph instances and not intended for long-term retention |
Page expressions and methods read an App Variable through QX.variables. A Graph uses Get Variable and Set Variable with an explicit graph, app, or saved scope. Call an Object method to change Object-owned state instead of copying the same runtime state into several Variable sources of truth.
Recipes and RecordStore
A Recipe is for a fixed set of fields saved and selected as a named parameter set. An App needs only one RecipeManager. The runtime workflow should define when a Recipe is selected, applied, and saved.
A RecordStore maintains lightweight structured rows on a machine:
Filemode retains rows on that target.Memorymode keeps a temporary table in the current runtime instance.- Configure the field schema and Primary Key in Object Properties.
- A Page table uses Object methods to read, add, update, and delete rows.
RecordStore is not an external database. Move to an external system and Query when volume, query complexity, or sharing scope grows.
HTTP Queries
The current Query type is HTTP and supports GET, POST, PUT, DELETE, and PATCH. Configure the following in Settings:
- URL and
{{parameter}}runtime parameters; - Headers and fixed URL Params;
- JSON, Form, or Raw Body;
- None, Bearer, or Basic Auth;
- Timeout.
A Page method calls QX.queries.<name>.run(...); a Graph uses a Query node. Both reference the same App Query instead of duplicating request configuration.
Send in Settings executes the request from the current Runtime target and shows the status and response. Validate a write Query against a test environment or reversible data first. Do not use production data for the first Send.
Bearer tokens and Basic usernames and passwords are part of Query configuration. Do not commit production credentials to uncontrolled Git, include them in a source ZIP for an untrusted recipient, or paste them into an ordinary AI conversation. Review and clean credentials according to the project policy before delivery.
i18n and Assets
- Define languages and a default language before adding i18n keys. A missing translation falls back to the default language, then to the key.
- Bind Widget text to i18n keys instead of copying a Page for every language.
- Use App-relative Asset paths, not absolute paths from the development machine.
- A runtime page can access only Assets included in the runtime package. Use the dedicated Upload Widget for file uploads.
Key rules
- A Variable is for small values, not images, history tables, or large JSON payloads.
- The current Saved Variable value is target-specific runtime state, not App source.
- A Query is an external-call contract, not a data copy or database.
- Recipes are for parameter sets; RecordStore is for local row data. Do not use them interchangeably.
- External writes need explicit timeout, error handling, and idempotency or duplicate-submission policy.
- Validate saved data capabilities from the correct Runtime target, not only from the editor form.
How to validate
- Confirm names, types, defaults, fields, and parameters in Settings or Object Properties.
- Save and check Problems for broken Page or Graph references.
- Verify App Variable sharing in the current runtime and its initial value after reload.
- Verify Saved Variable retention after restart and confirm that another target does not reuse the old value.
- Test Recipe select, apply, save, and reopen. Test RecordStore create, read, update, delete, and primary-key behavior.
- Send a side-effect-free Query with known parameters first, then test failure, timeout, and write deduplication.
- Switch the runtime-page language and test Asset download or upload from the target runtime page.