8 Replies Latest reply on Apr 1, 2016 8:52 AM by qngo RSS
    francky Explorer

    UpdatePropertyValues service

    Hi there

     

    I've tried everything I could think of but I could not correctly call the UpdatePropertyValues function.

    What Infotable is it waiting for ?

     

    I need it for updating logged properties simultaneously, to not create a new log for each one.

    if you have another solution for this problem, i'll gladly hear it, but I'd like an answer to the question because it has been bothering me for months.

     

    Thank you.

      • Re: UpdatePropertyValues service
        James Penney Explorer

        Francky,

         

        How are you calling the service?

         

        James

          • Re: UpdatePropertyValues service
            francky Explorer

            In many different ways.

             

            var params = {

                values: undefined /* INFOTABLE */ <-------- THIS is the problem, I've tried to put everything I could think of (only and always Infotables though)

            };

             

            me.UpdatePropertyValues(params);

              • Re: UpdatePropertyValues service
                James Penney Explorer

                How are you getting the updated values into the infotable? Are you calling the REST API?

                  • Re: UpdatePropertyValues service
                    francky Explorer

                    I tried :

                     

                    - creating objects (name, value) and pushing them into the rows array of an empty JSON Infotable

                    - creating a single object with an attribute for each property to update and pushing it into the rows array of an empty JSON Infotable

                     

                    - same as first two but with a JSON infotable with the datashape corresponding to my objects

                    - same as first two but with a "normal" infotable without shape

                    - same as above but with the AddRow() method

                    - with a "normal" Infotable but with the correct shape and both methods (AddRow() and rows.push())

              • Re: UpdatePropertyValues service
                qn Communicator

                Hi,

                 

                Here is how I use this service:

                 

                var params = {

                      infoTableName: "UpdatePropertiesInfoTableTMP" /* STRING */,

                      dataShapeName: "NamedVTQ" /* DATASHAPENAME */

                };

                 

                var updateValues = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);

                 

                var time = new Date();

                 

                updateValues.AddRow({'time': time, 'name': 'Property1Name', 'quality': 'GOOD', 'value': property1Value});

                updateValues.AddRow({'time': time, 'name': 'Property2Name', 'quality': 'GOOD', 'value': property2Value});

                ...

                me.UpdatePropertyValues({values: updateValues});

                • Re: UpdatePropertyValues service
                  James Penney Explorer

                  QD beat me to it! See below for my alternative (and verbose!) update call:

                   

                  // Create a new blank infotable for passing into the 'update' service
                  var params = {
                      infoTableName: "MyUpdateTable" /* STRING */
                  };
                  
                  // result: INFOTABLE
                  var myUpdate = Resources["InfoTableFunctions"].CreateInfoTable(params);
                  
                  // add the name field to the datashape for the update table
                  // this will hold the name of the property to update
                  var nameField = new Object();
                  nameField.name = "name";
                  nameField.baseType = 'STRING';
                  myUpdate.AddField(nameField);
                  
                  // add the value field to the datashape for the update table
                  // this will hold the value of the property to update
                  var valueField = new Object();
                  valueField.name = "value";
                  valueField.baseType = 'STRING';
                  myUpdate.AddField(valueField);
                  
                  // add the row that contains the update for temperature
                  var updateRow = new Object();
                  updateRow.name = 'temperature'; // << your actual property name here
                  updateRow.value = 32.0 // << your new value for that property here
                  
                  // add the temperature row new value to the infotable
                  myUpdate.AddRow(updateRow);
                  
                  var params = {
                      values: myUpdate /* INFOTABLE */
                  };
                  
                  // Finally, update my thing with the properties in the table
                  me.UpdatePropertyValues(params);
                  
                  • Re: UpdatePropertyValues service
                    francky Explorer

                    I'll be damned, it works.

                    I don't understand what was my mistake. I didn't try like James, but tried something similar to what QD did, but with a custom datashape containing name and value as Strings and it didnt work.

                    I now tried with a dynamic DS (like James) and it worked (probably the only way I had not tried yet)

                     

                    Thanks