Drools在运行时从数据库获取事实
我需要一些关于Drools eval和变量赋值的帮助Drools在运行时从数据库获取事实,drools,Drools,我需要一些关于Drools eval和变量赋值的帮助 rule "check that no previously submitted requests exist" when $user : UserFormField( name == 'employeeId', value != null ) $repository : Repository( ) $activeRequests : List( ) from $repository.findActiveReques
rule "check that no previously submitted requests exist"
when
$user : UserFormField( name == 'employeeId', value != null )
$repository : Repository( )
$activeRequests : List( ) from $repository.findActiveRequestsByEmployee( $user.getValue() ) # call to repository
eval( $activeRequests.size() > 0 )
then
System.err.println(' You have active requests: ' + ((Request)$activeRequests.get(0)).getTitle);
insert(Boolean.TRUE);
end
在此规则中,我尝试访问存储库并获取当前用户的活动请求。规则编译和执行时没有任何异常或警告。在调试模式下,可以看到存储库返回非空列表,我希望看到控制台消息“Youhaveactiverequests”,但这并没有发生。我认为问题出在这方面
$activeRequests : List( ) from $repository.findActiveRequestsByEmployee( $user.getValue() )
因为这个规则很好用
rule "check that no previously submitted requests exist"
when
$user : UserFormField( name == 'employeeId', value != null )
$repository : Repository( )
eval( $repository.findActiveRequestsByEmployee($user.getValue()).size() > 0 )
then
System.err.println(' You have active requests !' );
insert(Boolean.TRUE);
end
有人能告诉我怎么解决这个问题吗
谢谢 有人帮我找到了解决办法。我应该使用
from collect
表达式而不是简单的from
将事实捆绑到集合中:
$activeRequests : ArrayList() from collect ( Request() from $repository.findActiveRequestsByEmployee( $user.getValue() ) )
您必须区分(即,阅读
文件)介于“从”和“从收集”之间。如果你想要规则
为由生成的每个收集元素单独激发
在“from”之后表达,然后使用“from”。但是,如果你想
将所有内容捆绑到一个集合中,您必须使用“from collect”
请注意,不需要单独评估。你可以把这个
约束到ArrayList模式中:
ArrayList( size > 0 )
ArrayList( size > 0 )