convertObjectList
A Workflow Engine function that extracts key and value pairs from a list of anonymous objects, and creates a new flatter key:value object.
For example, given the following list of anonymous objects:
[ { name : "test1", value : "pass" }, { name : "test2", value : "pass" }, { name : "test3", value : "fail" } ]
The resulting flatter object would look like:
{ "test1" : "pass", "test2" : "pass", "test3" : "fail" }
The action will return true unless the source object does not exist, or the target (destination) field cannot be updated.
This function is available as a feature of the Add-ons v2.4 download and later.
This function is available for event, alert, and Situation workflows.
Back to Workflow Engine Functions Reference.
Duplicate Entries
Whenever a key name is repeated, the values will be consolidated into an array. For example, given a source list:
[ { "name": "ServiceName", "value": "Service1", "location": "London" }, { "name": "ServiceName", "value": "Service2", "location": "Paris" } ]
and using “name” as the keyName and “value” as the valueName, the resulting object would be:
{ "ServiceName" : [ "Service1", "Service2"] }
The values are consolidated for the duplicate key value “ServiceName”.
Asymmetric Objects
If a list contains asymmetric objects (objects where the keys are not consistent), then items missing a keyName will be ignored, and the debug will show which items were unprocessed.
For example, in this list, items 2 and 3 did not contain the keyName “user”:
WARN : [0:Event Workflows][20211221 11:28:13.809 +0000] [actions/convertObjectList.js:172] +|Event Workflows::convertObjectList: Not all items in the list were processed: items 2,3 were not processed|+ WARN : [0:Event Workflows][20211221 11:28:13.809 +0000] [BotUtility.js:885] +| ITEMS NOT PROCESSED[2,3] : [ { "name": "NotifyUser", "userRole": "operator", "value": "true", "user": "fred@bigco.com" }, { "name": "NotifyUser", "userRole": "administrator", "value": "true", "user": "barney@bigco.com" }, { "name": "ServiceName", "value": "Service1", "location": "London" }, { "name": "ServiceName", "value": "Service2", "location": "Paris" } ]
For lists with asymmetric objects that require processing, repeat the action with different values for keyName and valueName. Make sure to choose a different destination (the destination is not merged into, it is replaced).
Note
In order to be processed, the objects in the list must have attributes defined for both keyName and valueName. If an object does not have both, it will be ignored.
Arguments
Workflow Engine function convertObjectList
takes the following arguments:
Name | Required | Type | Description |
---|---|---|---|
| yes | string | The CEvent or workflow context field name to use as the source list. |
| yes | string | The object attribute within each anonymous object in the list to use as the key in the final object. |
| yes | string | The object attribute within each anonymous object in the list to use as the value in the final object for the keyName. |
| yes | string | The CEvent or workflow context field to write the final object to. |
Example
The following example demonstrates typical use of Workflow Engine function convertObjectList
.
Symmetric Objects
Given the following custom_info
object:
labels: [ { “key”: “hostname”, “value”: “host0001” }, { “key”: “region”, “value”: “some_region” }, { "key" : "service", "value" : "ABC" } ]
Create a workflow using the convertObjectList
action:
convertObjectList
:
listField
:custom_info.labels
keyName
:key
valueName
:value
destination
:custom_info.eventLabels
In the UI, this would look like:
{"listField":"custom_info.labels","keyName":"key","valueName":"value","destination":"custom_info.eventLabels"}
This would produce the following output object in custom_info.eventLabels
:
custom_info : { ... "eventLabels": { "region": "some_region", "hostname": "host0001", "service": "ABC" }, }
Complex Asymmetric Objects
Given the following custom_info
object:
serviceData : [ { "name": "NotifyUser", "userRole": "operator", "value": "true", "user": "fred@bigco.com" }, { "name": "NotifyUser", "userRole": "administrator", "value": "true", "user": "barney@bigco.com" }, { "name": "ServiceName", "value": "Service1", "location": "London" }, { "name": "ServiceName", "value": "Service2", "location": "Paris" } ]
We could extract the “user” and “userRole” as an object using the following parameters:
listField
:custom_info.serviceData
keyName
:user
valueName
:userRole
destination
:custom_info.userDetails
This would result in the following output object:
custom_info : { ... "userDetails": { "barney@bigco.com": "administrator", "fred@bigco.com": "operator" } }
Had we used the following parameters with the same data:
listField
:custom_info.serviceData
keyName
:name
valueName
:user
destination
:custom_info.userDetails
The resulting object would be:
custom_info : { ... "userDetails": { "NotifyUser": ["fred@bigco.com","barney@bigco.com"] }, }
The common key value “NotifyUser” has values for both records.