如何从 java 中的 drools 规则文件访问变量而不将它们声明为全局变量?
How to access variables from a drools rule file in java without declaring them as global?
我正在开发一个使用以下规则文件的应用程序。有没有一种方法可以在不将布尔变量 b1
、b2
和 b3
声明为全局变量的情况下获取它们的值?
Drools 文件
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
end
从我的脑海中,我可以想到 2 个简单的解决方案:
使用单一全球服务
声明可用于通知这些布尔值的单个全局服务。如果您担心 DRL 中有很多全局变量,这会很方便。
global MyService service;
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
service.notifyValues(b1, b2, b3);
end
这将使布尔值可用于您配置为 service
的任何对象。
使用事实和查询
这种方法的想法是将您的布尔值作为事实插入(包装在一个对象中),然后使用查询从会话中提取它们。
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
insert(new Result(b1, b2, b3));
end
query getResults()
$r: Result()
end
为了更好地理解查询,请参阅Drools' documentation。
希望对您有所帮助,
我正在开发一个使用以下规则文件的应用程序。有没有一种方法可以在不将布尔变量 b1
、b2
和 b3
声明为全局变量的情况下获取它们的值?
Drools 文件
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
end
从我的脑海中,我可以想到 2 个简单的解决方案:
使用单一全球服务
声明可用于通知这些布尔值的单个全局服务。如果您担心 DRL 中有很多全局变量,这会很方便。
global MyService service;
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
service.notifyValues(b1, b2, b3);
end
这将使布尔值可用于您配置为 service
的任何对象。
使用事实和查询
这种方法的想法是将您的布尔值作为事实插入(包装在一个对象中),然后使用查询从会话中提取它们。
rule ruleone
when
$fact : AppFact( name == "abcd")
then
boolean b1= $fact.id[422] && $fact.id[423] && $fact.id[372] && $fact.ruleId[373];
boolean b2= b1 && $fact.id[272];
boolean b3= b1 && $fact.id[273];
insert(new Result(b1, b2, b3));
end
query getResults()
$r: Result()
end
为了更好地理解查询,请参阅Drools' documentation。
希望对您有所帮助,