0 Design: subflows
Kazuki-Nakanishi edited this page 2017-03-10 12:52:02 +00:00

A subflow is a set of connected nodes that can be easily reused within a larger flow.

A subflow is represented as a single node in the workspace which can be opened up in a tab to see the underlying flow.

Creating a subflow

An empty subflow

  1. Selects 'Create subflow' option.
  2. Creates a new subflow with a default name, added to palette
  3. Opens the subflow tab

From existing nodes

  1. User selects some existing nodes.
  2. Selects 'Convert to subflow' option.
  3. Nodes are removed from workspace and replaced by a subflow node.
  4. Subflow node given a default name and added to palette

Questions:

  • how to automatically identify the input/output ports to map to
  • what restrictions should be applied?
    • a single, continuous flow of nodes - aside from comment nodes
    • only one 'left most' node
  • what about subflows with no left most node? Would there be any way to override properties of a contained node? For example, consider a subflow containing an mqtt sub and deserialiser pair where modifying the topic of the mqtt subscriber would be useful.

Editing a subflow

  1. Double click subflow node.
  2. Opens the edit-node dialog for the instance of the subflow
  3. Click the 'edit subflow' option in the dialog opens a closeable tab containing the flow.
  4. Tab toolbar includes but to open subflow edit dialog (also accessed by dblclicking on tab, or any input/output node in the flow)

Delete subflow

  1. Open subflow edit dialog
  2. Click delete

There are some differences between subflow and link node.

There are two cases about link node. A link out node wired to link in node in a same tab and a different tab.

Condition Subflow Link node (same tab) Link node (different tab)
Share context.flow NO YES NO
Share context.global YES YES YES
Catch error in caller tab YES YES NO
Node actions (e.g. inject node) NO YES YES

Definition

A subflow node has the following properties:

  • type : subflow
  • id
  • name
  • in - an array identifying the internal nodes that are mapped to the flow inputs. It will have zero or one elements.
  • out - an array identifying the internal nodes and their output ports that are mapped to the flows outputs. Elements are objects of the form: {id:ID, port:PORT}.

A node that is part of a subflow has their z property set to the id of the subflow.

An instance of a subflow has the following properties:

  • type : subflow:ID
  • id
  • name