有没有办法从 DRL 文件中的规则调用查询?
Is there a way to call query from a rule in DRL file?
我需要将 window 规则链接到 window 规则。我的用例是:
如果 5 分钟内温度 > 50 的出现次数 window 大于 10,则找到该 window 帧或任何其他链式规则中温度的最大值(平均值)window数据。
我尝试了以下方法:
query getFactFromMemory(long time)
$fact : Fact(timepoing < (drools.getWorkingMemory().getSessionClock().getCurrentTime() + time))
end
rule "window rule"
when
//condition
then
//action
end
rule "chain rule"
when
//condition
then
getFactFromMemory(1000L)
//loop over facts and then perform some action
end
我在调用查询时遇到错误。我尝试在 when 部分调用查询并将其分配给变量,但这也给出了错误(Query's must use positional or bindings, not field constraints:1000L
和 Query binding is not supported by non-abductive queries : $variable
)。
任何人都可以帮助我解决这个错误或提出任何其他解决问题的方法吗?
我们可以通过调用 drools.getKieRuntime()
在 drl 中获取 drools 运行时对象。所以,这个问题的工作规则是:
query getFactFromMemory(long time)
$fact : Fact(timepoing < (drools.getWorkingMemory().getSessionClock().getCurrentTime() + time))
end
rule "window rule"
when
//condition
then
//action
end
rule "chain rule"
when
//condition
then
getFactFromMemory(1000L)
//loop over facts and then perform some action
end
我需要将 window 规则链接到 window 规则。我的用例是:
如果 5 分钟内温度 > 50 的出现次数 window 大于 10,则找到该 window 帧或任何其他链式规则中温度的最大值(平均值)window数据。
我尝试了以下方法:
query getFactFromMemory(long time)
$fact : Fact(timepoing < (drools.getWorkingMemory().getSessionClock().getCurrentTime() + time))
end
rule "window rule"
when
//condition
then
//action
end
rule "chain rule"
when
//condition
then
getFactFromMemory(1000L)
//loop over facts and then perform some action
end
我在调用查询时遇到错误。我尝试在 when 部分调用查询并将其分配给变量,但这也给出了错误(Query's must use positional or bindings, not field constraints:1000L
和 Query binding is not supported by non-abductive queries : $variable
)。
任何人都可以帮助我解决这个错误或提出任何其他解决问题的方法吗?
我们可以通过调用 drools.getKieRuntime()
在 drl 中获取 drools 运行时对象。所以,这个问题的工作规则是:
query getFactFromMemory(long time)
$fact : Fact(timepoing < (drools.getWorkingMemory().getSessionClock().getCurrentTime() + time))
end
rule "window rule"
when
//condition
then
//action
end
rule "chain rule"
when
//condition
then
getFactFromMemory(1000L)
//loop over facts and then perform some action
end