首页 > 解决方案 > 用于更新托管对象中的片段的 CEP 规则

问题描述

我需要能够创建一个事件处理规则,当您添加新设备时,您从一个片段(例如:c8y_Hardware.imei)中获取一个字符串值,并使用该字符串填充另一个片段(例如:c8y_Mobile.imei)。因此,新设备在 c8y_Hardware.imei 和 c8y_Mobile.imei 中将具有相同的值。

我们已尝试设置适当的 CEP 规则,但它们不起作用(它们会编译并保存)。

insert into UpdateManagedObject

    select

        m.id as id,

        {
            "c8y_Mobile.imei", getString(m,"c8y_Hardware.imei")
        } as fragments

    from 

        ManagedObjectCreated as m 

    where

        getString(m,"c8y_Hardware.imei") != "";

任何关于我们在哪里弄乱我们的语法的指导将不胜感激。

标签: cumulocity

解决方案


它应该是:m.managedObject.id 作为 id。

通常你也会在编译时得到一个错误,但可能是流也有一个 id,因此它在技术上可以在 CEP 中工作。您应该能够检查它是否在调试流上触发并查看已设置的 id。

同样适用于所有其他 Cumulocity 流。流本身,例如 ManagedObjectCreated 或 AlarmUpdated 等,并不是直接的对象。在这种情况下,它们总是有一个属性 managedObject 或对于 AlarmUpdated 它是警报。此属性是实际的有效负载。

像 getString 这样的辅助方法的编写方式是,您可以传递有效负载或完整的流对象,因此这无关紧要。


推荐阅读