我需要在DSLR文件的“when”部分执行一个方法,但我不确定它是否可行。例如:
rule "WNPRules_10"
when
$reminder:Reminder(source == "HMI")
$user:User(isInAgeRange("30-100")==true)
Reminder(clickPercentual >= 10)
User(haveAtLeastOptIns("1,2,3,4") == true)
then
$reminder.setPriority(1);update($reminder);
end
(注意:isInAgeRange()和hasAtLeastOptIns()是User的方法)
我尝试使用eval()并且没有出现任何错误,但它没有执行。像这样:
rule "WNPRules_10"
when
$reminder:Reminder(source == "HMI")
$user:User(eval($user.isInAgeRange("30-100")==true))
Reminder(clickPercentual >= 10)
User(eval($user.haveAtLeastOptIns("1,2,3,4") == true))
then
$reminder.setPriority(1);update($reminder);
end
如何解决此问题?
答案 0 :(得分:8)
你的第二次尝试看起来相当混乱 - 也 - 你有这样的用户模式 - 你想让他们引用相同的用户实例吗?或者它们可以是单独的实例(或者它们必须分开吗?) - 这会在某些情况下根据您的意图改变一些事情。
就最简单的重写而言,我可以想到:
rule "WNPRules_10"
when
$reminder:Reminder(source == "HMI")
$user:User()
eval($user.isInAgeRange("30-100") && $user.haveAtLeastOptIns("1,2,3,4"))
Reminder(clickPercentual >= 10)
then
$reminder.setPriority(1);update($reminder);
end
注意使用eval()顶级元素 - 它也只使用一个用户模式 - 然后将约束应用于它。 (在未来的版本中,内联evals将无需编写eval即可工作!)。