1

Drools Rules Server をサービスとして使用しています。デシジョンテーブルを使用しています

Pre Rules Movie Object:  
actor: "unknown"  
movie: "Ghostbusters"  
rating: 9

Drools デシジョン テーブルに 2 つの単純なルールがあります。最初のルールは、値 ( movie=="Ghostbusters") をチェックしてから、そのオブジェクトの呼び出しを設定しますsetActor("Bill Murray")

2 番目のルールは、Actor が何であるかをチェックします。この 2 番目のルールには 2 つの行があります。 if Actor == "Bill Murray"のアクションを呼び出しますsetRating(10)。で、もしactor == "unknown" setRating(8)

最初のルールは期待どおりに実行され、getActor"Bill Murray" であることを示すために出力できますが、2 番目のルールでは、actor == "unknown"アクションは常に実行されます。その行にgetActor「Bill Murray」と印刷しても、「不明」ルールを使用しています。

オブジェクトがルールから戻ってくるActor = Bill Murrayと、すべての値がルールに「正しい」設定になっていますが、ルールを評価するときに、ルールの外部で作成した元のオブジェクトがルールで常に使用されているようです。

意思決定テーブルまたはルール テーブル間のオブジェクトを「更新」するために drools ルール サーバーを呼び出すための呼び出しに追加する必要があるものはありますか?

4

2 に答える 2

1

あなたが質問してから時間がかかりすぎていることは知っていますが、同じ問題を抱えている他の人にとっては、オブジェクトを変更して設定しないでください。意思決定表でこれを行うには、RuleTable にアクション列を追加し、2 行目に次を追加する必要があります。

modify($className){ setActor("Bill Murray")};

アクションの下の最初の行を空白のままにします。

于 2016-07-07T13:41:05.787 に答える
0

Drools ドキュメント (4.8.4.1、4.8.4.2) で説明されているように、updateまたはメソッドを使用する必要があります。modify

rule "modify stilton"
when
    $stilton : Cheese(type == "stilton")
then
    modify( $stilton ){
        setPrice( 20 ),
        setAge( "overripe" )
    }
end

これにより、オブジェクトが変更され、ルールが再適用されることがエンジンに通知されます。

于 2011-02-26T08:20:12.013 に答える