0

1 つ以上の条件が満たされたときに起動する必要があるルールを作成しています。ルールは次のようになります。

rule "Demo Rule"
    when
         $data : Data (val == 1 || val == 2)
    then
        System.out.println($data);
end

2 つの一致する Data オブジェクト (val 1 と val 2) を持つルールのテストがあります。print ステートメントに到達すると、ルールは正しく実行されます。しかし、$data を解析して個々の一致する Data オブジェクトにアクセスする方法が見つかりません。println の結果は次のとおりです。

custom.package.Data< val: 1, text:'Test1' >
custom.package.Data< val: 2, text:'Test2' >

したがって、複数のエントリが存在することがわかります。しかし、配列 ($data[0]) または $data$1 または私が考えることができるすべてのものとして呼び出そうとすると、Drools による解析エラーが発生します ($data は Data オブジェクトであり、配列、リスト、またはその他の反復可能オブジェクトではないと不平を言います)。 .

4

1 に答える 1

3

ルールは、条件に一致するオブジェクトごとに 1 回実行されます。$data.valそのため、Data オブジェクトに直接アクセスする必要があります。data.text

リスト内のオブジェクトが必要/必要な場合は、collectそのために使用できます。次に、あなたのルールは次のようになります

rule "Demo Rule"
    when
         $dataList : ArrayList() from collect( Data (val == 1 || val == 2) )
    then
        System.out.println($dataList);
end
于 2013-10-17T05:05:15.407 に答える