在我的一个Esper规则中,我需要获取托管对象的特定(自定义)属性,或者如果它不存在则需要默认值。所以我决定在js表达式中这样做。我开始是这样的:
create expression Number js:getTripId(deviceId) [
function getTripIdorOrDefault(managedObject) {
// ...
}
getTripIdorOrDefault(findManagedObjectById(deviceId));
];
然而,当测试时,输出告诉我“未定义findManagedObjectById”。就这样吧,我重写了我的函数,以便它直接接受托管对象并继续这样:
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。根据我的理解,Quumulocity getString,getNumber等函数在javascript中不可用。
那么,我如何在javascript表达式中操作我的设备对象?
答案 0 :(得分:0)
你不能在表达式中使用像findManagedObjectById这样的函数,因为你基本上离开esper上下文来执行表达式,然后函数就不再知道了。
如果你想改变表达式中的对象,我会先查询它,然后将它交给参数中的表达式。
将它传递给表达式时,它可能会成为一个Map(不确定是否需要测试自己)
getString(e.source,“value”)看起来不正确。什么是e。如果e是EventCreated,则应使用e.event.source.value而不使用任何函数