2010-03-23 10 views
6

Potrzebuję wykonać metodę w sekcji "when" pliku DSLR i nie jestem pewien, czy jest to możliwe. Przykład:Reguły gry Drools: Jak mogę użyć metody z sekcji "kiedy"?

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 

(uwaga: isInAgeRange() i haveAtLeastOptIns() są metodami użytkowników)

Próbowałem z eval() i pojawiły się żadne błędy, ale się nie zdarzyło wykonać. W ten sposób:

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 

Jak mogę rozwiązać ten problem?

Odpowiedz

7

Twoja druga próba wygląda na dość zagmatwaną - również - czy masz wzorce użytkownika - czy chcesz, aby odnosiły się do tej samej instancji użytkownika? czy mogą być oddzielnymi instancjami (lub muszą być oddzielne?) - to zmieni trochę rzeczy w niektórych przypadkach w zależności od twojego zamiaru.

chodzi o najprostszej przepisanie mogę myśleć:

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 

Uwaga użycie eval() element najwyższego poziomu - to również używa tylko jednego wzorca użytkownika - a następnie stosuje się ograniczenia do niego. (W przyszłej wersji inline evals zadziała bez konieczności pisania eval!).

+0

to działa! Dzięki! – manoelhc

Powiązane problemy