8

最近私は drools を扱っており、いくつかのオブジェクトに対していくつかの特別なチェックを行いたいと考えています。ルールのセクションで関数を使用する必要がありますwhenが、エラーが発生します。例:

function boolean newFunction(int a){
  if(a>0)
    return true;
  else
    return false;
}

rule "new rule"
salience 100
dialect "mvel"
when
  eval(newFunction(1))
then
  System.out.println("OK");
end

私がいつも得るエラーは次のとおりです。

unable to resolve method using strict-mode: java.lang.Object.newFunction(java.lang.Integer)

whenセクション内の関数の drools はサポートされていませんか?

ありがとう!

4

4 に答える 4

11

短い答えは次のとおりです。いいえ。

これは、ファクトがワーキング メモリにある必要があるためです。

できることは、作業メモリから特定のクラスのすべてのタイプを取得し、thenセクションに関数を適用し、その新しい値を作業メモリに挿入するルールを持つことです。

編集

元々2012年に投稿されたこの回答は、新しいバージョンのdroolsがwhen句の機能をサポートしているため、より関連性がありません。

于 2012-09-26T15:44:49.257 に答える
2

上記の選択した回答の行に沿って、いくつかの実験の後、クラスをルールファイルにインポートし、MVEL 関数ラッパー (ブール値) でラップできる外部 Java メソッドを作成できることがわかりました。 eval ステートメントへのパラメーターとして LHS から呼び出されます。

[External Java POJO_Class.myMethod]


import com.mypackage.POJO_Class;


function Boolean myFunctionName() {
   POJO_Class myClass = new POJO_Class();
   return myClass.myMethod(Parameters);
}



rule "Test Rule"
    when
      eval ( myFunctionName(parameters) )
    then
end
于 2015-02-03T19:40:23.917 に答える