Define a collection owner

Description

In this tutorial you will learn how to define a collection owner. This owner will update a value when the associated collection is updated. The value will then contain the updated element from the collection. We will then use a callback to call a script each time the value is updated.

If you have never created a collection, you can follow this example to create one.

Steps

1. Define a new value

Create a value.ospp file with a TEXT type:

root/collections/owner/value.ospp

{
    "name": "Device",
    "description": "Last updated ip device",
    "type": "TEXT"
}

2. Define a collection owner to update the value

A collection owner is linked to a collection by specifying :

  • schemaId: the id of the collection.

  • filterId: the id of the filter. If the updated document matches this filter, the value will be updated.

  • type: Type of operation done when an update is found.

root/collections/owner/owner.collections

{
    "schemaId": "root.collections.device",
    "filterId": "filter_status_connected",
    "type": "ON_COLLECTION"
}

1. Write a JS script to call with the content of the updated value

In this example, we use a script to do something when the value is updated. For that, we need to have an output.scripts.

root/collections/on_update/output.scripts

{
    "scriptId": "root.collections.on_update"
}

This output is linked to this detached.scripts.

root/collections/on_update/detached.scripts

{
    "moduleId": "modules.scripts.scripts-1",
    "sourceFile": "root/collections/on_update/device_updated.js",
    "accessedValues": []
}

Which is linked to this script:

root/collections/on_update/device_updated.js

function main() {
    let device = JSON.parse(trigger.content);
    log.info("Updated device contains : " + JSON.stringify(device) + "");

    //do something
}

main();

4. Define a callback for the value

The last step is to define a callback to link the value and the script output.

root/collections/owner/callback.ospp

{
    "linkedOutputs": [
        {
            "outputId": "root.collections.on_update"
        }
    ]
}