Skip to main content

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

RequirementCapabilityExample
Small shared state in the current loaded runtimeApp VariableCurrent order, operating mode, temporary result
A small value retained by this Runtime targetSaved VariableCalibration, threshold, accumulated count
A temporary value used by one Graph instanceGraph VariableLoop index, intermediate condition
A named, switchable set of process parametersRecipeProduct model with temperature and pressure
Lightweight row data on the current machineRecordStoreI/O table, material table, batch rows
External-system data or records shared across machinesHTTP QueryMES work order, ERP recipe, production report
Runtime-page translationi18nButton, alarm, and state text
Images, videos, 3D models, and uploaded filesAssetProcess 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

CapabilityEditor entry point
App / Saved VariableApp Settings → Variables
RecipeApp Settings → Recipes with one RecipeManager in the Object tree
RecordStoreAdd a RecordStore to the Object tree and configure fields, primary key, and storage mode in Properties
HTTP QueryApp Settings → Queries
i18nApp Settings → i18n; a Widget text property can also select a translation key in place
AssetResources → Assets or Files

Variables

TypeCurrent value locationImportant behavior
App VariableCurrent materialized runtimeShared by Pages and Graphs; starts from the defined initial value after reload or redeployment
Saved VariableApp runtime state on the current Runtime targetContinues across restart; its current value does not move automatically to another target
Graph VariableOne Graph instanceNot 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:

  • File mode retains rows on that target.
  • Memory mode 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.

Query credentials are stored with App configuration

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

  1. Confirm names, types, defaults, fields, and parameters in Settings or Object Properties.
  2. Save and check Problems for broken Page or Graph references.
  3. Verify App Variable sharing in the current runtime and its initial value after reload.
  4. Verify Saved Variable retention after restart and confirm that another target does not reuse the old value.
  5. Test Recipe select, apply, save, and reopen. Test RecordStore create, read, update, delete, and primary-key behavior.
  6. Send a side-effect-free Query with known parameters first, then test failure, timeout, and write deduplication.
  7. Switch the runtime-page language and test Asset download or upload from the target runtime page.