如何解决过滤事件类型
我只尝试接收来自特定事件类型的事件。这个想法是然后为服务器上每个可用的 EventType 创建一个自定义的 Eventfilter,只允许接收 EventType 特定的属性。但是一旦我实现了 Contentfilter(where 子句),就不会再收到任何事件。
在这个例子中,我想过滤掉除 BaseEvents 之外的所有事件。有人知道如何为此编写正确的 Contentfilter 吗?提前致谢。
EventFilter eventFilter = new EventFilter(
new SimpleAttributeOperand[]{
new SimpleAttributeOperand(
Identifiers.BaseEventType,new QualifiedName[]{new QualifiedName(0,"EventId")},AttributeId.Value.uid(),null)
},new ContentFilter(new ContentFilterElement[]{
new ContentFilterElement(
FilterOperator.Equals,new ExtensionObject[]{
ExtensionObject.encode(client.getSerializationContext(),new SimpleAttributeOperand(
Identifiers.BaseEventType,"BaseEventType")},null))
}
)
})
);
解决方法
我不知道这是否是全部错误,但一方面,保存事件类型的变量的 BrowseName 是“EventType”,而不是“BaseEventType”,因此您的 SimpleAttributeOperand
定位错误财产。
其次,Equals 运算符将需要 2 个操作数(它将“EventType”的值与什么进行比较?)。因此,您需要另一个操作数,它只是 BaseEventType 的 NodeId(因此可能包含 LiteralOperand
的 Variant
包含 Identifiers.BaseEventType
)。
所以可能是这样的:
ContentFilter contentFilter = new ContentFilter(new ContentFilterElement[]{
new ContentFilterElement(
FilterOperator.Equals,new ExtensionObject[]{
ExtensionObject.encode(
client.getStaticSerializationContext(),new SimpleAttributeOperand(
Identifiers.BaseEventType,new QualifiedName[]{new QualifiedName(0,"EventType")},AttributeId.Value.uid(),null
)
),ExtensionObject.encode(
client.getStaticSerializationContext(),new LiteralOperand(new Variant(Identifiers.BaseEventType))
)
}
)
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。