2016-04-19 2 views
0

Je suis nouveau à ThingWorx et je veux avoir un aperçu pratique de l'implémentation des services sur cet exemple. J'ai tel modèle de données:Thingworx: Personnaliser le service `GetImplementingThings`

Thing 'Car' a 'Sensor' Thing (infotable)

Je veux avoir un service de CarTemplate qui renverra tous mis en œuvre Cars et au lieu de l'objet de capteur, il retournera la propriété 'nom' de Sensor.

Ce que j'ai maintenant:

"Car1Name" | SensorObject 

Ce que je veux:

"Car1Name" | "Accelerator1Name" 

S'il vous plaît, aidez-moi à faire ce qui se passe.

Répondre

1

Il n'y a pas de type de service "Static" sur ThingTemplates, si vous voulez récupérer toutes les choses d'implémentation d'un ThingTemplate avec des valeurs de propriétés, vous devriez construire un Thing Helper.

Qu'est-ce qu'une aide? C'est une autre chose, appelez ça comme vous voulez, disons CarHelpers, qui a un service appelé GetCarsWithSensors, qui fait un ThingTemplates ["ThingTemplateName"]. GetImplementingThings(), ou un GetImplementingThingsWithData et retourne l'Infotable désiré.

0

La réponse de Carles est valide, mais j'éviterais d'utiliser QueryImplementingThingsWithData. Le problème avec QueryImplementingThingsWithData est que Thingworx vérifie la visibilité, puis la sécurité pour chaque propriété sur chaque chose implémentée. C'est très bien si vous courez en tant qu'utilisateur dans le groupe Administrateurs, mais une fois que vous avez beaucoup de UserGroups et OrganizationalUnits cela va ralentir, BEAUCOUP.

faire plutôt quelque chose comme ceci: (Vous devrez créer un DataShape et définir que votre déclaration de service datashape)

var result; //result infotable, of your CarDataShape 
 

 
var myThings = ThingTemplates["CarTemplate"].QueryImplementingThings(); 
 
    for(var i=0; i< myThings.getRowCount(); i++) { 
 
    var myCar = Things[myThings.rows[i].name]; 
 
    
 
    for(var j=0; j < myCar.sensorProperty.getRowCount(); j++) { 
 
     var newRow = {}; 
 
     newRow.name = myCar.name; 
 
     newRow.sensor = myCar.sensorProperty.rows[j].sensorName; 
 
     result.AddRow(myCar); 
 
    } 
 
}