Drools在运行时从数据库获取事实

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

我需要一些关于Drools eval和变量赋值的帮助

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 )