drools规则将两个事实联系起来而不进行评估
所以我还是比较不喜欢流口水。我知道如何使用eval来比较事实,但我的印象是,我应该能够在没有eval声明的情况下编写规则。我希望得到一些帮助,了解在以下情况下我将如何这样做 我有一个事实,一位主管被要求提供一个给定用户的电子邮件地址:drools规则将两个事实联系起来而不进行评估,drools,Drools,所以我还是比较不喜欢流口水。我知道如何使用eval来比较事实,但我的印象是,我应该能够在没有eval声明的情况下编写规则。我希望得到一些帮助,了解在以下情况下我将如何这样做 我有一个事实,一位主管被要求提供一个给定用户的电子邮件地址: declare SupervisorRequested email : String end 以及从用户到其主管的映射(可能——有些用户没有主管) 因此,问题是,我如何在不使用eval的情况下编写此代码?下面的规则将针对映射(假定在工作内存中)包含映射到
declare SupervisorRequested
email : String
end
以及从用户到其主管的映射(可能——有些用户没有主管)
因此,问题是,我如何在不使用eval的情况下编写此代码?下面的规则将针对映射(假定在工作内存中)包含映射到电子邮件的用户的所有实例触发,如果
$supervisors.get($email)
返回null,则不会触发。在MVEL中使用Drools的最大便利之一是我们很少需要执行空检查
rule "Supervisor Inclusion Requested"
when
$request : SupervisorRequested($email: email)
$supervisors: Map()
$supervisorWithEmail : User() from $supervisors.get($email)
then
...
end
希望有帮助,干杯。尝试以下规则以获得所需的条件检查:
rule "Supervisor Inclusion Requested"
when
request : SupervisorRequested()
map : HashMap(this.get(request.getEmail()) != null)
then
// .............
end
实际上,您可以使用
这个
语法,因为它是get(…)
的别名。例如:Map($value:this[“foo”])
在功能上与$value=Map.get(“foo”)
相同
记住这一点,您可以编写如下规则:
rule "Supervisor Inclusion Requested"
when
SupervisorRequested( $email: email ) // gets the email
Map( this[$email] != null ) // checks that the map contains the email
then
// omitted
end
rule "Supervisor Inclusion Requested"
when
request : SupervisorRequested()
map : HashMap(this.get(request.getEmail()) != null)
then
// .............
end
rule "Supervisor Inclusion Requested"
when
SupervisorRequested( $email: email ) // gets the email
Map( this[$email] != null ) // checks that the map contains the email
then
// omitted
end