我需要能够创建一个事件处理规则,以便在添加新设备时从一个片段(例如: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") != "";
任何有关我们在哪里弄乱语法的指导都将不胜感激。
答案 0 :(得分:1)
应为:m.managedObject.id作为ID。
通常,您还会在编译时遇到错误,但可能是流还具有id,因此从技术上讲它在CEP中可以工作。您应该能够检查它是否在调试流上触发,并查看已设置的ID。
所有其他累积流都相同。流本身例如ManagedObjectCreated或AlarmUpdated等不是直接的对象。它们始终具有这样的属性,在这种情况下为managedObject,对于AlarmUpdated,则为警报。此属性是实际的有效载荷。
诸如getString之类的辅助方法以可以传递有效负载或完整流对象的方式编写,因此无关紧要。