在Drools规则引擎中设置局部变量/事实

时间:2017-10-04 10:18:56

标签: drools optaplanner

我有一个基于TaskPlanning示例的简单规则。它看起来像这样:

rule "It is better if user does not overexceeds its hours"
    when
        $emp : Employee()
        $task : Task( $taskType : taskType, employee == $emp)    
        accumulate( Task(employee == $emp);
                    $minutesOfEmplSpend : sum($taskType.getBaseDuration());
                    $emp.getMinutesAvailable() < $minutesOfEmplSpend
         )
    then
        scoreHolder.addMediumConstraintMatch(kcontext, 
$emp.getMinutesAvailable()-$minutesOfEmplSpend);    
end

好吧,它正在发挥作用。但我还想在那里增加额外的约束。 $ task 变量具有 isSerious 属性,该属性包含布尔值。我希望在添加媒介约束时也要考虑它。

我想实现这样的目标:

scoreHolder.addMediumConstraintMatch(kcontext, 
$emp.getMinutesAvailable()-$minutesOfEmplSpend - ($task.isSerious == true ? 100 : 10) ));

但我收到规则错误。我想我已经尝试了一切 - 请至少指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

正常的Java代码应该有效,请尝试$task.isSerious()而不是$task.isSerious