【问题标题】:CEP rule to update fragments within a managed object用于更新托管对象中的片段的 CEP 规则
【发布时间】:2019-03-27 05:41:56
【问题描述】:

我需要能够创建一个事件处理规则,当您添加一个新设备时,您从一个片段(例如:c8y_Hardware.imei)中获取一个字符串值并使用该字符串填充另一个片段(例如:c8y_Mobile.imei)。 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


    【解决方案1】:

    应该是:m.managedObject.id as id。

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

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

    getString 等辅助方法的编写方式可以让您传递有效负载或完整的流对象,因此无所谓。

    【讨论】:

    • 我做了那个改变。谢谢你。不幸的是,它仍然不起作用。有没有办法调试这个? UI 右侧的窗口不是很有帮助。
    • 嗯,对我来说它正在工作。由于您只收听 ManagedObjectCreated,您应该检查 IMEI 是否也在创建时设置,而不是在之后使用 PUT 添加。右侧的调试仅显示语句的输出。因此,如果您的语句从未触发,您将什么也看不到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多