首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >managedObject的Cumulocity更新片段

managedObject的Cumulocity更新片段
EN

Stack Overflow用户
提问于 2017-02-22 16:35:48
回答 1查看 377关注 0票数 1

在我们的应用程序中,当我们通过API创建一个新对象时,我们在c8y_Mobile片段中发送与SIM和GSM模块相关的信息。该对象对一个功能有限的嵌入式设备进行建模,因此我们直接使用HTTPS。

代码语言:javascript
复制
PUT /inventory/managedObjects/myid HTTP/1.1
Host: mytenant.cumulocity.com
Authorization: Basic ....
Content-Type: application/vnd.com.nsn.cumulocity.managedObject+json
Accept: application/vnd.com.nsn.cumulocity.managedObject+json

{
    "c8y_Mobile": {
        "imei": 1234567890123456,
        "imsi": 23456789011234567890,
        "iccid": 01234567890123456789
        ... 
    }
}

托管对象按预期显示新片段:

代码语言:javascript
复制
   ...
   "c8y_IsDevice": {},
   "c8y_Mobile": {
        "imei": 1234567890123456,
        "imsi": 23456789011234567890,
        "iccid": 01234567890123456789
        ... 
    },
    ...

当用户更改嵌入式单元上的SIM卡时,应在managedObject c8y_Mobile片段中更新IMSI和ICCID属性。但是,如果我们只发送这些属性,则整个片段将被覆盖:

代码语言:javascript
复制
PUT /inventory/managedObjects/myid HTTP/1.1
Host: mytenant.cumulocity.com
Authorization: Basic ....
Content-Type: application/vnd.com.nsn.cumulocity.managedObject+json
Accept: application/vnd.com.nsn.cumulocity.managedObject+json

{
    "c8y_Mobile": {
        "imsi": 23456789011234567890,
        "iccid": 01234567890123456789
    }
}

因此,托管对象显示如下:

代码语言:javascript
复制
   ...
   "c8y_IsDevice": {},
   "c8y_Mobile": {
        "imsi": 23456789011234567890,
        "iccid": 01234567890123456789
    },
    ...

请注意,imei属性和其他属性已丢失,并且不再存在于托管对象中。

为了保存数据和最小化事务,我想知道是否有一种方法可以更新片段,而不必再次发送所需的所有属性。

我尝试使用HTTP而不是PUT,但这给了我一个method not allowed错误,如文档中所述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 20:25:06

没有直接的方法可以做到这一点(只是一个解决办法)。通常,当您对任何对象执行PUT时,它将仅在JSON的根级别上合并,这意味着如果PUT包含c8y_Mobile,它将替换当前的c8y_Mobile (不管包含什么)。

以下是你能做的事:

首先,您发明了如此新的片段,并将其用作临时片段:

代码语言:javascript
复制
PUT /inventory/managedObjects/myid HTTP/1.1
Host: mytenant.cumulocity.com
Authorization: Basic ....
Content-Type: application/vnd.com.nsn.cumulocity.managedObject+json
Accept: application/vnd.com.nsn.cumulocity.managedObject+json

{
    "c8y_Mobile_imsi": "23456789011234567890",
    "c8y_Mobile_iccid": "01234567890123456789"
}

此外,您还创建了一个事件处理规则,例如,当您更新"c8y_Mobile_imsi“时,它将将此值合并到现有的c8y_Mobile片段中(保留其他子片段)。

重要

您可以将PUT作为瞬态发送(因此这些值不会持久化在设备对象中),或者您的规则会立即删除临时片段(在与c8y_Mobile合并的相同更新操作中)。这一点很重要,因为在CEP中,您不知道在听ManagedObjectUpdated时更新了哪个片段。因此,如果将临时片段保留在设备对象中,规则将在一个无休止的循环中触发(这将导致规则的自动取消部署)。

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

https://stackoverflow.com/questions/42397240

复制
相关文章

相似问题

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