2010-03-23 15 views
6

Bir DSLR dosyasının "ne zaman" bölümüne bir yöntem uygulamalıyım ve mümkün olup olmadığından emin değilim. Örnek: Drools Kurallar: "When" bölümündeki bir yöntemi nasıl kullanabilirim?

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 

(not: isInAgeRange() ve haveAtLeastOptIns() Kullanıcı yöntemleridir)

Ben eval ile çalıştı() ve hiçbir hata ortaya çıktı, ama etmedin yürütün. Bunun gibi:

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 

Bu sorunu nasıl çözebilirim?

cevap

7

İkinci denemeniz oldukça karışık görünüyor - ayrıca - Kullanıcı kodlarınız var mı? - Aynı kullanıcı örneğine başvurmalarını ister misiniz? ya da ayrı örnekler olabilirler (ya da ayrı olmalılar mı?) - bazı durumlarda niyetinize bağlı olarak bazı şeyleri değiştirecektir. Aklıma gelen en basit yeniden yazma açısından

:

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 

Not eval() üst düzey öğe kullanımı - bu da yalnızca bir kullanıcı deseni kullanır - ve sonra buna kısıtlamaları uygular. (Gelecek bir sürümde, inline değerlendirmeler, değerlendirmeye gerek kalmadan çalışacaktır!).

+0

işe yarıyor! Teşekkürler! – manoelhc

İlgili konular