现在,在我的drools项目中,我在单独的DRL文件中有两组规则,这些规则按议程组分开 . 对于议程组“preCheck”,我将自动焦点设置为该议程组中每个规则的true . 例:
rule "preCheckDuplicate"
agenda-group "preCheck"
auto-focus true
no-loop true
salience 50
when
$f : IngestFileMetadata(isDuplicate.equalsIgnoreCase("True"))
then
$f.setIsDuplicate("True");
end
对于其他议程组 - “defaultRules” - 规则没有设置自动焦点属性 . 例:
rule "duplicate file default"
agenda-group "defaultRules"
activation-group "isDuplicate"
no-loop true
salience 0
when
$f : IngestFileMetadata(isDuplicate.equals("True"))
then
insert(createResponse($f));
end
在通过其余API调用规则时,我还尝试通过JSON有效负载将焦点设置为“preCheck”议程组 . 例:
{
"lookup": "defaultStatelessKieSession",
"set-focus": "preCheck",
"commands": [
{
"insert": {
"out-identifier": "IngestFileMetadata",
"return-object": "true",
"entry-point": "DEFAULT",
"object": {
"com.hms.ingestion.rules.IngestFileMetadata": {
* * * * * data attributes here * * * * *
}
}
}
},
{
"fire-all-rules": {"out-identifier": "fired"}
},
{
"query": {"name": "rulesResponses", "out-identifier": "rulesResponses"}
}
]
}
但是,当执行规则时,似乎首先评估“defaultRules”议程组中的规则 . 我不知道为什么 . 我对drools相对较新,所以我完全有可能无法正确理解议程组的概念,但我确信这种设计可以确保“preCheck”规则首先进行评估 .
任何人都可以提供有关为什么没有发生这种情况的任何见解如果我需要提供更多细节,我可以 .
提前致谢 .
2 回答
结果我的问题是,在我的预检查规则中更新属性后,必须对我的事实发出明确的更新 . 这解决了这个问题 .