Skip to main content
1-Visitor
September 5, 2018
Solved

Overwriting an Infotable Property

  • September 5, 2018
  • 4 replies
  • 2241 views

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.
Best answer by CarlesColl

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
September 6, 2018

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 });
agondek1-VisitorAuthor
1-Visitor
September 6, 2018

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.

22-Sapphire I
September 6, 2018

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.