2016-04-11 9 views
0

私はSessionに変数の2つのString型を挿入したSimple Ruleを持っています。今私は変数を取得する必要があります。同じのためにDroolsはセッションから同じタイプのオブジェクトを取り出します

コード:

rule "Header Account Null Check" 
    dialect "java" 
    ruleflow-group "TB:Header Account Null Check" 
    when 
     cAccount : AccountPair(headerAccount == null)  
    then 
     String error=new String(); 
     String validateMsg=new String(); 
     error="2528"; 
     validationMsg="Header Account must not be null" 
     modify(cAccount) { 
       setErrorCode("2528") 
     } 
     insert(error); 
     insert(validateMsg); 
     System.out.println("Header Account null check called"); 
end 

query "fetch validation variables" 
    #conditions 
    s:String(); 
end 

Javaコードは:

Collection<Object> myfacts = kSession.getObjects(new ClassObjectFilter(String.class)); 

myfactsにチェックした後、私は2つの値を得ました。

は今問題がString.classタイプを持つ2つの変数があるですが、私はエラーためである値と、我々は次のタスクを実行するようにvalidationMsgのためにある値を知る必要があります。

入力と同じSessionから2つの文字列変数を追加した場合でも、これらの変数に条件を追加する必要があります。同じ問題が同様に発生します。これで、変数variableをグローバル変数として宣言することで入力変数の問題を解決しました。私はまた、グローバル変数を宣言するための良い決定ではないので、この戦略を変更する必要があります。

私を助けてください。

答えて

1

これはかなり明白です。複数のStringオブジェクトがある場合、それらの値に特定の特性がない限り区別できません。 (あなたのケースでは、エラー文字列は数値であり、もう一つはエラーではありません)。しかし、これをベースにしたアプリケーションはお勧めしません。

したがって、String値にIDを付加する必要があります。このために、String nameString valueを含むオブジェクトを作成することができます。あなたのRHSは次のようになります。

insert(new Result("error", "2528")); 
    insert(new Result("message", "Header Account must not be null")); 
    modify(cAccount) { 
     setErrorCode("2528") 
    } 
    System.out.println("Header Account null check called"); 

複数の入力に対して同じ原則を使用できます。

+0

ありがとう、私はこのアプローチを知っています、私たちはJRuleで大規模なシステムを持っている、私たちはDroolsに変換している、JRuleは入力と出力のパラメータを設定する機能があります。私は、コードをjavaから将来的に変更したくないので、上記の機能が必要です。 – Viral

+0

まあ、あなたが知っているなら、それはどういう意味ですか? – laune

+0

ラッパークラスを作成しない方法が存在するかどうかを知りたいので、変数値を取得でき、変数の値を識別できるようにするためです。 – Viral

関連する問題