在我的Esper规则中,我需要获得托管对象的特定(自定义)属性,如果不存在,则需要获取默认值。所以我决定在js表达式中这样做。我是这样开始的:
create expression Number js:getTripId(deviceId) [
function getTripIdorOrDefault(managedObject) {
// ...
}
getTripIdorOrDefault(findManagedObjectById(deviceId));
];但是,在测试时,输出告诉我“没有定义findManagedObjectById”。因此,我重写了我的函数,使它直接接受managedObject并继续如下所示:
create expression Number js:getTripId(managedObject) [
function getTripIdorOrDefault(managedObject) {
// treatments for nulls...
return managedObject.tripId;
}
getTripIdorOrDefault(managedObject);
];我的电话是:
getTripId(findManagedObjectById(getString(e.source, "value")))但是,我得到了一个空值。当我输出managedObject时,我可以看到情况并非如此。然后,我尝试访问其他“默认”属性,如文本、时间和类型,并获得null。
所以我尝试使用括号表示法myObject['myProperty'],但是Cumulocity不允许我保存我的模块(不正确的语法)。我试着使用Object.keys(managedObject)来检查对象的可用属性,但是javascript版本似乎早于1.8.5。而且,据我所知,javascript中没有Cumulocity getString、getNumber等函数。
那么,如何在javascript表达式中操作设备对象呢?
发布于 2016-10-28 15:03:22
您不能在表达式中使用像findManagedObjectById这样的函数,因为基本上是将esper上下文留给执行表达式,然后函数就不再为人所知了。
如果您想在表达式中更改对象,我将在此之前查询它,然后将其交给参数中的表达式。
可能是当将它传递给表达式时,它变成了一个Map (不确定是否需要测试自己)。
getString(e.source,"value")看上去不太对。如果e是EventCreated,则应该使用不带任何函数的e.event.source.value。
https://stackoverflow.com/questions/40307491
复制相似问题