首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cumulocity访问对象属性和Cumulocity函数

Cumulocity访问对象属性和Cumulocity函数
EN

Stack Overflow用户
提问于 2016-10-28 14:38:39
回答 1查看 168关注 0票数 0

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

代码语言:javascript
复制
create expression Number js:getTripId(deviceId) [
    function getTripIdorOrDefault(managedObject) {
        // ...
    }

    getTripIdorOrDefault(findManagedObjectById(deviceId));
];

但是,在测试时,输出告诉我“没有定义findManagedObjectById”。因此,我重写了我的函数,使它直接接受managedObject并继续如下所示:

代码语言:javascript
复制
create expression Number js:getTripId(managedObject) [
    function getTripIdorOrDefault(managedObject) {
        // treatments for nulls...
        return managedObject.tripId;
    }

    getTripIdorOrDefault(managedObject);
];

我的电话是:

代码语言:javascript
复制
getTripId(findManagedObjectById(getString(e.source, "value")))

但是,我得到了一个空值。当我输出managedObject时,我可以看到情况并非如此。然后,我尝试访问其他“默认”属性,如文本、时间和类型,并获得null。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 15:03:22

您不能在表达式中使用像findManagedObjectById这样的函数,因为基本上是将esper上下文留给执行表达式,然后函数就不再为人所知了。

如果您想在表达式中更改对象,我将在此之前查询它,然后将其交给参数中的表达式。

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

getString(e.source,"value")看上去不太对。如果e是EventCreated,则应该使用不带任何函数的e.event.source.value。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40307491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档