QuarkIoE访问对象属性和Cumulocity函数

时间:2016-10-28 14:38:39

标签: cumulocity

在我的一个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表达式中操作我的设备对象?

1 个答案:

答案 0 :(得分:0)

你不能在表达式中使用像findManagedObjectById这样的函数,因为你基本上离开esper上下文来执行表达式,然后函数就不再知道了。

如果你想改变表达式中的对象,我会先查询它,然后将它交给参数中的表达式。

将它传递给表达式时,它可能会成为一个Map(不确定是否需要测试自己)

getString(e.source,“value”)看起来不正确。什么是e。如果e是EventCreated,则应使用e.event.source.value而不使用任何函数