Проблемы с доступом к недвижимости - PullRequest
2 голосов
/ 02 апреля 2012

Я пытался использовать это правило:

rule "conformSyncConstraint"
    when
    $syn_con : SyncConstraint(
        $left_stp_period  : leftSTP.period,
        $right_stp_period : rightSTP.period)
    eval( ($left_stp_period.dayOfWeek == $right_stp_period.dayOfWeek &&
        $left_stp_period.dayOrder == $right_stp_period.dayOrder) == false) 

    then
    insertLogical(new IntConstraintOccurrence("conformSyncConstraint", 
        ConstraintType.NEGATIVE_HARD,
        1,
                $syn_con));
end

Но я сталкиваюсь с этой ошибкой, которая казалась чёрным ящиком:

Rule Compilation error : [Rule name='conformSyncConstraint']
    in/co/technovia/timetabler/domain/Rule_conformSyncConstraint_4401252830cd4ee7bc49416ead3da86c.java (8:1459) : The field Period.dayOfWeek is not visible
    in/co/technovia/timetabler/domain/Rule_conformSyncConstraint_4401252830cd4ee7bc49416ead3da86c.java (8:1490) : The field Period.dayOfWeek is not visible


    at org.drools.planner.config.solver.SolverConfig.buildRuleBase(SolverConfig.java:238)
    at org.drools.planner.config.solver.SolverConfig.buildSolver(SolverConfig.java:170)
    at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:103)
    at in.co.technovia.timetabler.TimeTableApp.createSolver(TimeTableApp.java:61)
    at in.co.technovia.timetabler.TimeTableApp.main(TimeTableApp.java:45)

Что здесь не так?

1 Ответ

3 голосов
/ 02 апреля 2012

Каждый раз, когда вы используете eval, вы возвращаетесь к используемому диалекту.В вашем случае вы используете Java-диалект, поэтому вам нужно написать выражение с синтаксисом Java: .getDayOfWeek () вместо .dayOfWeek.

Если вы не используете evals или если вы переключаете диалектДля mvel вы можете использовать упрощенный синтаксис.

Например:

when
    $syn_con : SyncConstraint(
        leftSTP.period.dayOfWeek != rightSTP.period.dayOfWeek ||
        leftSTP.period.dayOrder != rightSTP.period.dayOrder
    )
then
...