2010-03-23 6 views
6

Ich muss eine Methode auf "wann" Abschnitt einer DSLR-Datei ausführen, und ich bin mir nicht sicher, ob es möglich ist. Beispiel:Drools Regeln: Wie kann ich eine Methode auf "Wann" Abschnitt verwenden?

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 

(Anmerkung: isInAgeRange() und haveAtLeastOptIns() sind Methoden der Benutzer)

Ich habe versucht, mit eval() und keine Fehler erschienen, aber es Artikel nicht ausführen. Gefällt mir:

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 

Wie kann ich dieses Problem lösen?

Antwort

7

Ihr zweiter Versuch sieht ziemlich verwirrt aus - auch - haben Sie so Benutzermuster - wollen Sie, dass sie sich auf dieselbe Benutzerinstanz beziehen? oder können sie separate Instanzen sein (oder müssen sie getrennt sein?) - das wird die Dinge in einigen Fällen je nach Ihrer Absicht etwas ändern.

In Bezug auf die einfachste Rewrite ich mir vorstellen kann:

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 

Beachten Sie die Verwendung der eval() Top-Level-Element - es nutzt auch nur ein Benutzermuster - und wendet dann die Einschränkungen zu. (In einer zukünftigen Version wird inline evals funktionieren, ohne eval schreiben zu müssen!).

+0

es funktioniert! Vielen Dank! – manoelhc