Правила Drools: как я могу использовать метод в разделе "когда"?

мне нужно выполнить метод в разделе "когда" файла DSLR, и я не уверен, что это возможно. Пример:

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 () и haveAtLeastOptIns () являются методами пользователя)

Я пробовал с 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

Как я могу решить эту проблему?

1 ответов


ваша вторая попытка выглядит довольно запутанной-также - у вас есть пользовательские шаблоны-вы хотите, чтобы они ссылались на один и тот же экземпляр пользователя? или они могут быть отдельными экземплярами (или должны быть отдельными?)- это немного изменит ситуацию в некоторых случаях в зависимости от вашего намерения.

С точки зрения простейшей переписать я могу думать:

  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 () - он также использует только один шаблон пользователя - а затем применяет ограничения к он. (В будущей версии inline evals будет работать без необходимости писать eval !).