2016-07-22 9 views
0

1- Droolで特定の顧客に対して選択したルールのみを起動することは可能ですか?私は100のルールを持っているとします。これは、異なる顧客のルールです。だから、特定の顧客がアプリケーションを開くとき、彼に属するルールだけを発射したい。 1つのルールが複数の顧客に属している可能性があります。Droolで選択したルールを起動する方法

2 - 特定の顧客に対して発動する必要があるルールのリストと、そのルールを起動するためのファクトのリストを取得して、その特定のファクトのみをデータベースから取得できるようにしたい。それらを取得した後、その顧客に固有のルールを実行してください。

答えて

0

ルールを持つ所有顧客を特定するか、顧客とルールを関連付けるデータを維持する必要があります。私は後者が優先されると思っていますが、私は両方のソリューションの概要を説明します。いずれの場合でも、顧客は事実によって特定されなければならない。

rule "some rule" 
when 
    Customer(id in ("Smith&Co", "Brown&Sons", "Jones Inc.")) 
    ... 
then ... end 

あなたが必要とするルールにお客様associcateするには:

class Customer { 
    private String name; 
    private List<String> rules; 
    //... 
} 

とAgendaFilter

class RuleFilter implements AgendaFilter { 
    static List<Customer> customers = new ArrayList<>(); 
    static { 
     customers.add(...); 
     ... 
    } 
    static RuleFilter getFilterFor(String custname){ 
     for(Customer cust: customers){ 
      if(cust.getName().equals(custname)){ 
       return cust; 
      } 
     } 
     throw IllegalArgumentException("no customer: " + custname); 
    } 
    Customer current; 
    RuleFilter(Customer current){ 
     this.current = current; 
    } 
    // ... getters & setters 
    boolean accept(Match match){ 
     return current.getRules().contains(match.getRule().getName()); 
    } 
} 

を書いて、フィルタインスタンスを提供することにより、顧客のためのセッションを実行します。

AgendaFilter currFilter = RuleFilter(getFilterFor(customername)); 
fireAllRules(currFilter); 
+0

各顧客のアジェンダを作成し、アジェンダに基づいてルールを起動します。 – pratik2392

+0

いいえ、私はそれを言っていません。顧客に応じてアジェンダフィルタのインスタンスを作成する必要があります。 – laune

+0

ok ...私はこれが私にとってはうまくいくと思います。あなたは同じものの完全な実装を見ることができ、さらにそれを理解できるいくつかのリンクを共有できますか? – pratik2392

関連する問題