To put it out there here is a flow with 2 examples of subflow
and accessing context.
The first is accessing context from within the subflow
.
The second accesses context from the parent flow.
This example READS context. To WRITE you would only need to reverse the commands from reading to writing. (get/put)
To set the subflow
context in the first example, double click on the subflow
icon and set the variable/s there.
The second example press the set flow variable
first.
Then press the node button below to make the subflow read the flow's context.
[{"id":"7d297bcb6d394137","type":"subflow","name":"EXAMPLE 2","info":"","category":"","in":[{"x":90,"y":80,"wires":[{"id":"0e60e8c38370930d"}]}],"out":[{"x":310,"y":80,"wires":[{"id":"0e60e8c38370930d","port":0}]}],"env":[],"meta":{},"color":"#DDAA99"},{"id":"0e60e8c38370930d","type":"function","z":"7d297bcb6d394137","name":"","func":"var my_variable = flow.get(\"$parent.example\");\n\nmsg.payload = my_variable;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":200,"y":80,"wires":[[]]},{"id":"3a93e082.e06f8","type":"subflow","name":"EXAMPLE","info":"","category":"","in":[{"x":40,"y":160,"wires":[{"id":"7eba2b65.f1ecd4"},{"id":"3cdbaf03.01d94"},{"id":"d7956efa.6d90b"}]}],"out":[{"x":680,"y":100,"wires":[{"id":"7eba2b65.f1ecd4","port":0}]},{"x":680,"y":160,"wires":[{"id":"3cdbaf03.01d94","port":0}]},{"x":680,"y":280,"wires":[{"id":"d7956efa.6d90b","port":0}]}],"env":[],"meta":{},"color":"#DDAA99"},{"id":"7eba2b65.f1ecd4","type":"change","z":"3a93e082.e06f8","name":"set msg.payload to sub-flow \"some_var\" parameter in a change node","rules":[{"t":"set","p":"payload","pt":"msg","to":"some_var","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":100,"wires":[[]]},{"id":"3cdbaf03.01d94","type":"function","z":"3a93e082.e06f8","name":"set msg.payload to sub-flow \"some_var\" parameter in a function node","func":"msg.payload = env.get(\"some_var\");\n\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":160,"wires":[[]]},{"id":"d7956efa.6d90b","type":"change","z":"3a93e082.e06f8","name":"set msg.payload to sub-flow \"some_var\" parameter in a change node with JSONata expressions","rules":[{"t":"set","p":"payload","pt":"msg","to":"$env('some_var')","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":220,"wires":[[]]},{"id":"ae95f225.51856","type":"subflow:3a93e082.e06f8","z":"1747bdb12f3df9d0","name":"test sub flow var","env":[{"name":"some_var","value":"not this one","type":"str"}],"x":300,"y":260,"wires":[["e8220033.5a99e"],["536c2dc2.21f7a4"],["d730a55a.546418"]]},{"id":"e06bc9da.7e5ac8","type":"inject","z":"1747bdb12f3df9d0","name":"just a manual trigger","props":[{"p":"payload","v":"","vt":"str"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":290,"y":200,"wires":[["ae95f225.51856"]]},{"id":"e8220033.5a99e","type":"debug","z":"1747bdb12f3df9d0","name":"Change Node >>> Select $ env variable and type some_var in the field","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":710,"y":200,"wires":[]},{"id":"536c2dc2.21f7a4","type":"debug","z":"1747bdb12f3df9d0","name":"Function Node >>> let/var foo = env.get(\"some_var\");","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":660,"y":260,"wires":[]},{"id":"d730a55a.546418","type":"debug","z":"1747bdb12f3df9d0","name":"JSONata >>> $env('some_var')","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":590,"y":320,"wires":[]},{"id":"b4863e65.35379","type":"comment","z":"1747bdb12f3df9d0","name":"Subflow Environment Variable settings *","info":"On the `subflow` node: \n* Click edit properties button\n * At the bottom of Environment Variables Tab click the +add button\n * A new row with 2 fields (Name & Default Value) shall appear within the Environement Variables Tab\n * In the Name Field... type your variable name (example: 'some_var')\n * Now you can use add 'some_var' throughtout the subflow.\n * Any values typed into the 'some_var' parameter field, will be used wherever 'some_var' variable is used within the subflow.","x":230,"y":320,"wires":[]},{"id":"8a9e7f63766fa42e","type":"comment","z":"1747bdb12f3df9d0","name":"Get Subflow variables from parent flow","info":"","x":470,"y":140,"wires":[]},{"id":"dc1a1c3b66ff7585","type":"comment","z":"1747bdb12f3df9d0","name":"Access flow variables in subflow.","info":"","x":500,"y":430,"wires":[]},{"id":"a88c04c0743eae1d","type":"change","z":"1747bdb12f3df9d0","name":"set `flow.example` with `msg.payload`","rules":[{"t":"set","p":"example","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":470,"wires":[[]]},{"id":"3a7947469363c259","type":"inject","z":"1747bdb12f3df9d0","name":"Set flow variable","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"example message","payloadType":"str","x":250,"y":470,"wires":[["a88c04c0743eae1d"]]},{"id":"e93ac63fe1624162","type":"inject","z":"1747bdb12f3df9d0","name":"Just a trigger signal","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":260,"y":520,"wires":[["ea090d89e3973113"]]},{"id":"ea090d89e3973113","type":"subflow:7d297bcb6d394137","z":"1747bdb12f3df9d0","name":"Get parent flow context","env":[],"x":560,"y":520,"wires":[["d863c884443c14e7"]]},{"id":"d863c884443c14e7","type":"debug","z":"1747bdb12f3df9d0","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":820,"y":520,"wires":[]}]