Cumulocity 访问对象属性和 Cumulocity 函数

Cumulocity access object properties and Cumulocity functions

在我的 Esper 规则之一中,我需要获取托管对象的特定(自定义)属性,或者如果不存在则获取默认值。所以我决定在 js 表达式中执行此操作。我是这样开始的:

create expression Number js:getTripId(deviceId) [
    function getTripIdorOrDefault(managedObject) {
        // ...
    }

    getTripIdorOrDefault(findManagedObjectById(deviceId));
];

但是在测试时,输出告诉我 "findManagedObjectById is not defined"。就这样吧,我重写了我的函数,以便它直接获取 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 时,我发现情况并非如此。然后我尝试访问其他 "default" 属性,如文本、时间和类型,并也获取 null。

所以我尝试使用括号表示法 myObject['myProperty'] 但 Cumulocity 不允许我保存我的模块(语法不正确)。我尝试使用 Object.keys(managedObject) 检查对象的可用属性,但 javascript 版本似乎早于 1.8.5。据我了解,Cumulocity getString、getNumber 等函数在 javascript 中不可用。

那么,如何在 javascript 表达式中操作我的设备对象?

您不能在表达式中使用 findManagedObjectById 之类的函数,因为您基本上是在离开 esper 上下文来执行表达式,然后该函数就不再为人所知了。

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

可能是传给一个表达式就变成了一个Map(不确定这个需要自己测试)

getString(e.source, "value") 看起来不对。什么是e。如果 e 是 EventCreated 而不是你应该使用 e.event.source.value 没有任何函数