Thingworx:自定义“GetImplementingThings”服务

Thingworx: Customize `GetImplementingThings` service

我是 ThingWorx 的新手,我想了解在此示例中实现服务的一些实际情况。 我有这样的数据模型:

Thing 'Car' has Thing 'Sensor'(Infotable)

我想要 CarTemplate 服务,它将 return 所有实现的汽车,而不是传感器的对象,它将 return 传感器的 'name' 属性.

我现在拥有的:

"Car1Name" |  SensorObject

我想要的:

"Car1Name" | "Accelerator1Name"

请帮我实现它。

ThingTemplates 上没有任何一种 "Static" 服务,如果您想恢复具有属性值的 ThingTemplate 的所有实现事物,您应该构建一个事物助手。

什么是事物助手?这是另一回事,随便你怎么称呼它,比方说 CarHelpers,它有一个名为 GetCarsWithSensors 的服务,它执行 ThingTemplates["ThingTemplateName"].GetImplementingThings() 或 GetImplementingThingsWithData 和 returns 所需的信息表。

Carles 的回答是有效的,但我会避免使用 QueryImplementingThingsWithData。 QueryImplementingThingsWithData 的问题在于 Thingworx 将检查可见性,然后检查每个已实现事物上每个 属性 的安全性。如果您是 运行 作为 Administrators 组中的用户,这很好,但是一旦您拥有大量 UserGroups 和 OrganizationalUnits,这将减慢很多。

改为执行如下操作:(您需要创建一个 DataShape 并将其设置为您的服务 return 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);
    }
}