2010-03-23 2 views
6

Мне нужно выполнить метод в разделе «когда» файла DSLR, и я не уверен, что это возможно. Например:Drools Rules: Как я могу использовать метод в разделе «когда»?

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() и без ошибок появились, но didn't выполнить. Пример:

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 

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

ответ

7

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

В терминах простейшей переписывание я могу думать:

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!).

+0

это работает! Благодаря! – manoelhc

 Смежные вопросы

  • Нет связанных вопросов^_^