nodes
The asset hierarchy - nodes, their children, paths, rights and search.
Get the root nodes
Returns all nodes of type ROOT (usually the single tree root), with the root icon applied.
Get a node by its reference id
Looks up and returns the node whose reference id matches the given value, or responds 404 if no such node exists.
Search nodes by name
Returns all non-deleted nodes whose name contains the given search string (case-insensitive substring match).
Get a node by id
Returns the single node with the given id, or responds 404 if it does not exist.
Delete a node and its subtree
Soft-deletes the node and all of its descendants, marking the underlying assets, signals and dashboards as deleted. Rejects deleting signal nodes that belong to a form or signal group.
Move a node to a new parent
Moves the node under the parent supplied in the body, recomputing the parent-id and parent-name paths of the node and all its descendants. Enforces valid move targets. Returns the moved node only, not its subtree: the paths of the descendants are rewritten in the database, but returning them made the answer grow with the tree without a client being able to use it. A client holding a cached subtree has to discard it and load it again.
Preview what duplicating a node would create
Counts the objects POST /nodes/{nodeId}/duplicate would create, per node type, with the same rules the duplication itself applies: forms and everything below them, the signals a form created and those a dynamic workflow derived are left out and counted separately. Nodes whose object is deleted are left out with everything below them. `exceedsLimit` says the duplication would be refused; a signal lacking its scheduler job or metric makes the preview answer 400, naming it. Checks the same rights as the duplication (read on the node, update on its parent, the designer configurator role for virtual signals), so a preview that answers is one the duplication will not refuse.
Duplicate a node and its subtree
Copies the node and its subtree under the node's own parent, in one transaction, and returns the node of the copy. A plain signal's copy reads the same metric; a virtual signal gets a metric and a scheduler job of its own, created inactive. References inside the copied subtree (dashboard panels, workflow and virtual-signal inputs, signal group members, panels naming other dashboards) point at the copies, references outside it stay as they are. Forms and everything below them, the signals a form created and those a dynamic workflow derived are left out, and so are nodes whose object is deleted. Image panels keep their image. Explicit rights, alarm and dynamic-workflow bindings, comments and favorites are not copied. Needs read on the node, update on its parent and, for virtual signals, the designer configurator role. Refused with 400 for more than the preview's `limit` nodes.
Export a node and its subtree as a document
The node and its subtree as an ExplorerExchangeDto (HET-1370), the file the import of another system or tenant reads - with the same rules as the duplication: forms and everything below them, the signals a form created and those a dynamic workflow derived are left out (counted in the document), and so are nodes whose object is deleted. The asset types the assets use travel with them; measured values, rights, data sources (MQTT, OPC-UA), alarm rules, dynamic workflows, comments and favorites do not. Needs read on the node. Refused with 400 for more than the duplication's limit of nodes.
Preview what importing a document below a node would create
Checks an exported document against this system as the import would (HET-1370) and says what it would create below the node and what needs attention: which metrics exist already and which would be created, which asset types exist (and deviate) or would be created, which designer transformations are missing, and which references to objects outside the document would be released - wirings to objects that do not exist here or the caller may not read, signal group members that do not exist here. `exceedsLimit` says the import would be refused. A document that cannot be imported at all is answered with 400 - malformed, of a newer format version, with a wiring uri naming the platform adapter (HET-2191), or naming a metric the platform assigned to a signal of its own. Needs the right to change the node and, for virtual signals, the designer configurator role.
Import a document below a node
Creates the objects of an exported document below the node, in one transaction, and returns the node of the imported root (HET-1370). Every object gets a new id; references between objects of the document point at the new ones. A plain signal reads the metric of its name here, which is created when there is none; a virtual signal gets a metric and a scheduler job of its own, created inactive. Asset types are taken by name, created when missing. Wirings to objects outside the document stay where such an object exists here and the caller may read it, and are released otherwise; signal group members stay where the signal exists here. The preview names what is released. Refused like the preview, and with 400 for more than its `limit` nodes.
Map reference ids to node ids
Given a list of reference ids, returns a map from each reference id to the id of its corresponding node.
Get reference metadata for a node
Returns metadata for the node identified by the reference id, including its parent name path and a map of output ids to their names.
Get a node's path as a string
Returns the node's full parent name path as a single human-readable string.
Get assignable group rights for a node
For the supplied group names, returns a map of group name to the most relevant access right effective on the node's parent (or read for a root node), i.e. the maximum right that may be assigned on this node.
Get assignable user rights for a node
For the supplied user names, returns a map of user name to the most relevant access right effective on the node's parent (or read for a root node), i.e. the maximum right that may be assigned on this node.
Get group rights of a node
Returns the group access rights directly assigned to the given node.
Delete all group rights of a node
Removes all group access-right assignments for the given node.
Get effective user rights of a node
Computes for every user the effective access right on the node, combining directly assigned user rights with rights inherited through their groups. Returns one entry per user that has any effective right, noting the node it was inherited from.
Get user rights of a node
Returns the user access rights directly assigned to the given node.
Delete all user rights of a node
Removes all user access-right assignments for the given node.
Get a node's children
Returns the child nodes of the given parent: only direct children by default, or the entire descendant subtree when recursive is set.
Get paginated children of a node
Returns a page of the node's children, optionally recursing into descendants and filtering by name, path and node type. The response includes the current page, the page items and the total item count.
Get a node's ancestors
Returns all ancestor nodes from the given node up to the root, optionally also including the siblings of those ancestors.
Check for edit rights on any asset
Returns a flag indicating whether the caller has more than read-only access to at least one asset or the root in the explorer.
Get where the signals, data sources and asset properties below a node are still used
Lists the signals below the node - plain and virtual - that are still used outside it: by a dashboard panel, a form, a workflow configuration (virtual signals included) or a signal group that is not part of the node's subtree. Lists the signal groups, workflow configurations and constants below it that such a panel shows or such a workflow reads, the assets - the node itself among them - whose properties such a workflow reads, and the alarm rules the deletion takes objects from. Deleting an asset or a form deletes everything below it, and this is the warning before it, as /signals/{signalId}/usages is for a single signal and /nodes/{nodeId}/usages for a single data source. Usages inside the subtree are left out, they are deleted along with it. Reads the data source references of every panel and the wiring of every workflow of the tenant, so it may take a few seconds. Objects the caller may not read are listed with `readable: false` and nothing that opens them - a server that does not do so yet counts them in `unreadable`.
Get where the data source behind a node is still used
Lists where the signal group, workflow configuration or constant behind the node is still used, for the warning before it is deleted: the dashboard panels that show it and - for a signal group, the only one of the three a workflow input can read - the workflow configurations and virtual signals that read it. `forms` and `signalGroups` stay empty, no form writes into any of them and none of them is a member of a group. Reads the data source references of every panel and the wiring of every workflow of the tenant, so it may take a few seconds. Objects the caller may not read are listed with `readable: false` and nothing that opens them - a server that does not do so yet counts them in `unreadable`.