Drools 6规则项目比较

时间:2014-05-30 13:24:55

标签: drools rule-engine

假设我有一个包含成员数据MyObjectsomeValue的对象类型otherValue,我按如下方式插入两个逻辑规则:

Rule "Checks Some Value"
  when
    $myO : MyObject( someValue == Constants.someValueChecker )
  then
    insertLogical(new SomeValueChecked($myO));
end

Rule "Checks Other Value"
  when
    $myO : MyObject( otherValue == Constants.otherValueChecker )
  then 
    insertLogical(new OtherValueChecked($myO));
end

我的问题是,有没有办法验证这些规则是否针对同一个MyObject实例触发了?另外,在给定MyObject的特定实例的情况下,有没有办法知道这些规则是否已经为它启动了?

1 个答案:

答案 0 :(得分:1)

验证是否已为同一对象检查“some”和“other”值(并假设MyObject的引用保留在成员myObject中):

rule "some and other value"
when
    SomeValueChecked( $obj: myObject )
    OtherValueChecked( myObject == $obj )
then
  ...
end

并检查两者是否都针对特定MyObject实例:

rule "some and other checked for green"
when
    $obj: MyObject( color == Colour.GREEN ) // or some other property
    SomeValueChecked( myObject == $obj )
    OtherValueChecked( myObject == $obj )
then
  ...
end

显然,单独检查“某些”或“其他”需要什么。