node-red-contrib-literal-utils 1.0.2

Node Red Utility Nodes to work with literals and arrays.

npm install node-red-contrib-literal-utils

Overview

Utility nodes for working with literal values.

Note, we also describe some cases where Out of the Box functionality may also compare.

Array

Nodes to help with working with Arrays.

Pick Array Value

Given an array of objects, picks a value within each object to put inside of an array.

(This works very well with other nodes like node-red-contrib-serial-iterator

For example, we want the following:

[
	 "/services/data/v42.0/sobjects/AcceptedEventRelation",
	 "/services/data/v42.0/sobjects/Account",
	 "/services/data/v42.0/sobjects/AccountChangeEvent",
	 "/services/data/v42.0/sobjects/AccountCleanInfo"
]

From a message like the following:

{
  "payload": {
	"results": {
	  "sobjects": [
		{
		  "name": "AcceptedEventRelation",
		  "urls": {
			"sobject": "/services/data/v42.0/sobjects/AcceptedEventRelation"
		  }
		},
		{
		  "name": "Account",
		  "urls": {
			"sobject": "/services/data/v42.0/sobjects/Account"
		  }
		},
		{
		  "name": "AccountChangeEvent",
		  "urls": {
			"sobject": "/services/data/v42.0/sobjects/AccountChangeEvent"
		  }
		},
		{
		  "name": "AccountCleanInfo",
		  "urls": {
			"sobject": "/services/data/v42.0/sobjects/AccountCleanInfo"
		  }
		}
	  ]
	}
  }
}

We would like a collection of all the 'sobject' values...

If we configure the node with the following

  • arrayPath: 'payload.results.sobjects'
  • valuePath: 'urls.sobject'
  • targetPath: 'payload.objectUrls'

We'll get:

{
   "payload":{
	  "results":{
		 "sobjects":[
			...
		 ]
	  },
	  "objectUrls":[
		 "/services/data/v42.0/sobjects/AcceptedEventRelation",
		 "/services/data/v42.0/sobjects/Account",
		 "/services/data/v42.0/sobjects/AccountChangeEvent",
		 "/services/data/v42.0/sobjects/AccountCleanInfo"
	  ]
   }
}

Example Flow

[{"id":"195e7da2.f7e152","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"84b77a17.25be68","type":"inject","z":"195e7da2.f7e152","name":"Inject example data","topic":"","payload":"{\"results\":{\"sobjects\":[{\"name\":\"AcceptedEventRelation\",\"urls\":{\"sobject\":\"/services/data/v42.0/sobjects/AcceptedEventRelation\"}},{\"name\":\"Account\",\"urls\":{\"sobject\":\"/services/data/v42.0/sobjects/Account\"}},{\"name\":\"AccountChangeEvent\",\"urls\":{\"sobject\":\"/services/data/v42.0/sobjects/AccountChangeEvent\"}},{\"name\":\"AccountCleanInfo\",\"urls\":{\"sobject\":\"/services/data/v42.0/sobjects/AccountCleanInfo\"}}]}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":140,"wires":[["f19fef07.d63f1","a03caddb.c460d"]]},{"id":"f19fef07.d63f1","type":"pick-array-value","z":"195e7da2.f7e152","name":"","arrayPath":"payload.results.sobjects","valuePath":"urls.sobject","targetPath":"payload.urls","x":440,"y":140,"wires":[["a896839a.1e206"]]},{"id":"a896839a.1e206","type":"debug","z":"195e7da2.f7e152","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":140,"wires":[]},{"id":"f42689cd.93e158","type":"comment","z":"195e7da2.f7e152","name":"pick values into array","info":"","x":440,"y":100,"wires":[]},{"id":"a03caddb.c460d","type":"change","z":"195e7da2.f7e152","name":"JSONata example","rules":[{"t":"set","p":"payload.urls","pt":"msg","to":"(\t    $map(payload.results.sobjects, function($val, $index, $array) {\t       $val.urls.sobject\t    })\t)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":450,"y":260,"wires":[["f8952828.8b4148"]]},{"id":"cc3f35ab.8b7218","type":"comment","z":"195e7da2.f7e152","name":"Recreate with standard JSONata - although not as safely and more confusing..","info":"","x":540,"y":220,"wires":[]},{"id":"f8952828.8b4148","type":"debug","z":"195e7da2.f7e152","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":720,"y":260,"wires":[]}]

Screenshot

Props

Name Description Value
Array Path The path within the message to the Array to iterate over payload.describe.sobjects
Value Path The path within the array's objects to the value we should collect. urls.layoutURL
Target Path The path within the message we should put the resulting array of collected values. payload.layouts

Extending

Running Tests

  • To test the project run npm run test or npm run test:watch to continuously test.

Running Linter

  • To run linters on the project, run npm run lint or npm run lint:watch to continously lint.

Node Info

Version: 1.0.2
Updated 7 years, 7 months ago
License: MIT
Rating: not yet rated

Categories

Actions

Rate:

Downloads

6 in the last week

Nodes

  • pick-array-value

Keywords

  • node-red
  • literals
  • array
  • utility

Maintainers