2016-04-19 11 views
0

私の組織では、Dolsを実行するためにKieServerを使用することに決めました。私たちはkieworkbenchを使用していません。これは、展開をより詳細に制御する必要があり、関連するアプリケーションと連携する必要があるためです。質問は、条件チェックを外部化することです。私は、データベース/インメモリキャッシュの実装と変化から、この値2008を取得する方法を考え出したDrools外部化条件

when 
    $customer:Customer(membersince <= "2008") 
then 
    $customer.setOfferPercent("50%") 

は、以下のようなルールでは、たとえば、「2008」のチェックは、データベースに格納されますそれは以下の通りです。これは私の質問、ときにそのグローバルおよび自動値を移入として宣言する他の方法がありますされて、私の操作/ビジネスはKIEサーバーで展開することなく、このような値を変更し、努力

when 
    $customer:Customer(membersince <= cache.get("Member_Since_Elite")) 
then 
    $customer.setOfferPercent("50%") 

の多くを軽減することができますデータベースで変更されました。注釈を使って以下のようなことをしたいと思っています。何か助けが必要です。

declare Properties 
    member_since_elite : String @Property("member_since_elite") 
end 
when 
    $customer:Customer(membersince <= Properties.member_since_elite) 
then 
    $customer.setOfferPercent("50%") 

この方法では、値が変更されたときにデータベース/キャッシュから値を自動挿入するのに役立ちます。

答えて

1

memberSinceEliteなどのフィールドを使用して、パラメータを保持するためだけに1つ(または複数)のクラスを作成できます(たとえば、Limit)。次に、ルールを定式化することができます

when 
    Limit($mse: memberSinceElite) 
    $c: Customer(membersince <= $mse, offerPercent != 50) 
then 
    modify($customer){ setOfferPercent(50) } 

これにより、進行中のセッション中に動的更新が可能になります。 Javaオブジェクトを自動収集できる場合は、セッションを開始する直前にLimitオブジェクトを挿入できます。更新は、DB更新をセッションに関連付ける方法によって異なります。

これが不要な場合は、グローバルを使用できます。事実を挿入する前にに設定してください。それはセッションの間続くでしょう。前と同じように自動集計します。

(テンプレートを使用して値をDRLコードに挿入することもできます。これにより、再生と編集が有効になります)

関連する問題