2010-03-23 6 views
6

Ho bisogno di eseguire un metodo sulla sezione "quando" di un file DSLR e non sono sicuro che sia possibile. Esempio:Regole Drools: Come posso usare un metodo nella sezione "quando"?

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 

(nota: isInAgeRange() e haveAtLeastOptIns() sono metodi di utente)

Ho provato con eval() e nessun errore è apparso, ma hanno ragione't eseguire. Mi piace:

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 

Come posso risolvere questo problema?

risposta

7

Il tuo secondo tentativo sembra abbastanza confuso - anche - hai così Pattern utente - vuoi che si riferiscano alla stessa istanza di utente? oppure possono essere istanze separate (o devono essere separate?) - questo cambierà un po 'le cose in alcuni casi a seconda delle tue intenzioni.

In termini di riscrittura più semplice mi viene in mente:

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 

Nota l'uso della funzione eval() elemento di livello superiore - Utilizza anche un solo modello utente - e poi applica i vincoli ad esso. (In una versione futura le eval in linea funzioneranno senza dover scrivere eval!).

+0

funziona! Grazie! – manoelhc

Problemi correlati