Skip to main content
1-Visitor
Sep 5, 2018 8:59 PM UTC
Solved

Overwriting an Infotable Property

I have the following code with which i never assign the variable back to the property however my property on the "Thing" changes to match the service result. Does anyone know why this is happening?

var original=Things["Thing"].Property;
var variable=original;

var newField = new Object();
newField.name = "Setpoint";
newField.baseType = 'STRING';
variable.AddField(newField);

for (var i=0;i<variable.rows.length;i++){
 variable.rows[i].Setpoint=/*somevalue*/;
}
var result=variable;
This topic has been closed for replies.
1-Visitor
Sep 6, 2018 10:17 AM UTC

Doing that:

var original=Things["Thing"].Property;

or that:

var variable=original;

 you don't clone Property contents, you get a reference to it, that's why property it's changing, if you want to work with a cloned copy:

var variable = Resources["InfotableFunctions"].Clone({ t1: original });

4 replies

1-Visitor
Sep 6, 2018 10:17 AM UTC

Doing that:

var original=Things["Thing"].Property;

or that:

var variable=original;

 you don't clone Property contents, you get a reference to it, that's why property it's changing, if you want to work with a cloned copy:

var variable = Resources["InfotableFunctions"].Clone({ t1: original });
Translate
agondek1-VisitorAuthor
1-Visitor
Sep 6, 2018 5:16 PM UTC

Hi Carles,

 

That makes sense as far as cloning goes. What troubles me is that operations on a variable in my service only impact infotable type properties. For example, if I use a number property as a reference and then proceed to multiply the variable by 20, in my service, the corresponding property value is not multiplied by 20 unless I assign the variable value to the property.

Translate
22-Sapphire I
Sep 6, 2018 6:26 PM UTC

Infotable properties indeed are treated a bit different as well as XML and JSON properties.

This is also why you have to specifically write back the full table to update the property if persisted.

Translate