2016-11-15 4 views
0
global Integer rank1; 
global Integer rank2; 


rule "Data" 
salience 10 
when 
     req : Requests(status == "ON") 
then 
    drools.getWorkingMemory().setGlobal("rank1", 8); 
    drools.getWorkingMemory().setGlobal("rank2", 6); 
end 

rule "1" extends "Data" 
salience 8 
    when 
     req1 : Requests() 
    then 
     System.out.print("1"); 
end 

rule "2" extends "Data" 
salience 6 
    when 
    req2 : Requests() 
    then 
    System.out.print("2"); 
end 

Здесь rank1 и rank2 инициализируются как 0 в java-коде. вывод 11112222. Я хочу тот же выход, но вместо использования статической значимости, я хочу, чтобы он был динамичным.Drools dynamic salience

rule "1" extends "Data" 
    salience rank1 
    ....... 

но выходной код 21212121.

ответ

0

Вы должны установить глобалам, прежде чем вставить факты. Глобалы не оцениваются динамически.

Если вам действительно нужен более динамичный выпукло вы должны создать класс

class Salience { 
    private int rank1; 
    private int rank2; 
    // ... 
} 

и вставить факт с соответствующими значениями и менять их по мере необходимости. Вам потребуется шаблон добавляется к корневому правилу:

rule "Data" 
when 
    Salience($rank1: rank1, $rank2: rank2) 
    Requests(...) 
then 

и вы можете использовать $rank1$rank2 и в выпуклости атрибутов.

Примечание: почти наверняка есть решение вашей проблемы, которое может быть выражено в логике и без значительности, использование, которое почти всегда является недостатком дизайна.

+0

thats not working –

+0

Что не работает? Что ты сделал? – laune