我是 ThingWorx 的新手,我想在此示例中获得一些实现服务的实用风格。我有这样的数据模型:
事物“汽车”具有事物“传感器”(信息表)
我想要 CarTemplate 服务,它将返回所有已实现的汽车,而不是传感器的对象,它将返回传感器的“名称”属性。
我现在拥有的:
"Car1Name" | SensorObject
我想要的是:
"Car1Name" | "Accelerator1Name"
请帮我实现它。
我是 ThingWorx 的新手,我想在此示例中获得一些实现服务的实用风格。我有这样的数据模型:
事物“汽车”具有事物“传感器”(信息表)
我想要 CarTemplate 服务,它将返回所有已实现的汽车,而不是传感器的对象,它将返回传感器的“名称”属性。
我现在拥有的:
"Car1Name" | SensorObject
我想要的是:
"Car1Name" | "Accelerator1Name"
请帮我实现它。
ThingTemplates 上没有“静态”服务,如果您想恢复具有属性值的 ThingTemplate 的所有实现事物,您应该构建一个 Thing Helper。
什么是事物助手?这是另一回事,随便你怎么称呼它,比如说 CarHelpers,它有一个名为 GetCarsWithSensors 的服务,它执行 ThingTemplates["ThingTemplateName"].GetImplementingThings() 或 GetImplementingThingsWithData 并返回所需的信息表。
Carles 的回答是有效的,但我会避免使用 QueryImplementingThingsWithData。QueryImplementingThingsWithData 的问题在于 Thingworx 将检查可见性,然后检查每个已实现事物上的每个属性的安全性。如果您作为管理员组中的用户运行,这很好,但是一旦您有很多用户组和组织单位,这会减慢很多。
而是执行以下操作:(您需要创建一个 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);
}
}