SN-2024-203, and the browser opens:
Syntax rules
Write a namespace, a dot, and a field name, wrapped in double curly braces.- Double braces are required.
{item.name}is not a binding. Single braces are sent to the browser literally, so the receiving system gets the characters{item.name}instead of a value. - The namespace prefix is required.
{{name}}does not resolve; write{{item.name}}. - Field names are case-sensitive.
{{item.Status}}does not resolve.{{item.status}}does. - Spaces inside the braces are ignored.
{{ item.name }}behaves identically to{{item.name}}. - You can use as many bindings as you like in one URL, mixed freely with literal text:
https://cmms.example.com/wo/new?asset={{item.item_number}}&site={{item.location}}.
item.status == "operational".
Braces build a value; a bare reference tests one.
The namespaces
Eight namespaces exist. Each one is only readable where the data behind it exists, which is why the last three are not available everywhere.Values are inserted exactly as stored
There is no automatic URL encoding. Whatever is in the field is dropped into the URL character for character. A field value containing a space, an ampersand, a question mark or a slash will produce a URL that the receiving system reads differently from what you intended — an& in a value, for example, looks to the receiving system like the start of a new query
parameter.
Either confirm the receiving system tolerates those characters, or keep bound fields to plain
identifiers — serial numbers, asset numbers, Item IDs — which is what most templates use anyway.
What happens when a field is empty
This differs depending on where the binding sits, and the difference matters. In a Destination URL, an empty or missing field invalidates the whole URL. QRtub will not open a half-built link. If any binding in the template resolves to nothing, that Destination is treated as unresolved: a conditional rule is skipped and the next rule is tried, and a plain Destination URL resolves to nothing at all, which lands the scan on the “this link isn’t ready yet” screen instead of a broken URL. The same rule applies to a binding that resolves to a list or a nested object rather than a single value —{{item.tags}} is an array, so a URL containing
it never resolves.
In a Page section, an empty field renders as an empty string and most sections then hide
themselves rather than display a blank. The exception is the ActionLink section, which checks its
own href first and hides itself entirely if a binding there cannot be resolved.
Neither case produces an error message. A Destination that quietly never fires is almost always a
binding that never resolved, so check the field name’s spelling and case first, and then check
that the Item you are testing with actually has a value in that field.
Session fields
session describes the signed-in team member looking at a Page, and is empty for an ordinary
anonymous scan. There are two usable values, session.user.id and session.user.email, plus the
session.user object itself, which is what the common test uses:
session is not
part of the data available when a Direct-Mode scan resolves a Destination, so it cannot be used
to route a redirect.
Renaming a field does not break a binding
If you rename a custom field on a Collection, QRtub rewrites the Destination URLs, fallback URLs and conditions that referenced the old name, in place, when you save. Page template bindings are stored against a hidden stable identifier and never see the rename at all.Related
- What Is a Destination? — where a scan is routed, and the order QRtub checks
- Item Fields Reference — the full
item.*catalog, including custom fields - Renaming a Field — why a rename is safe and what it updates