通知规则引擎对象更改

您可以将新对象的可用性通知规则引擎,也可以在更新或收回对象时通知规则引擎。

关于本任务

对象更改的通知取决于执行方式:

  • 当规则引擎以 RetePlus 方式运行时,它会立即重新计算匹配的规则并重新调度内部议程。
  • 当规则引擎以顺序或快速路径方式运行时,当您输入新的规则任务时,它将使用对象的新状态。

过程

  1. 使用以下代码短语结构: insert object;

    此语句通知 RetePlus 算法新对象可用。 当对象满足规则条件时,将运行依赖于此类对象的规则。

  2. 使用以下代码结构: insert ClassName(<constructor_arguments>) [{statement1; ... statement}] ;
  3. 如果规则引擎以 RetePlus 方式运行,请使用以下代码短语结构: update object;

    此语句通知 RetePlus 算法必须重新评估依赖于此对象的规则。 其中一些不再运行,另一些开始运行。

  4. 如果规则引擎以 RetePlus 方式运行,请使用以下代码短语结构: retract object;

    此语句通知 RetePlus 算法此对象不再可用。 不再运行依赖于此对象的规则。

结果

以下代码提供了用于通知规则引擎对象更改的全局模式:

insert object;
insert ClassName(<constructor_arguments>) 
   [{statement1; ... statement}] ;
   update object;
   retract object;

示例

在此示例的 then 操作部分中,将通知 RetePlus 算法新对象 penalty 可用,并且 account 对象不再可用。 因此,可以对惩罚对象运行规则,但不再对帐户对象运行规则。 在 else 操作部分中,将通知 RetePlus 算法必须重新评估依赖于 account 对象的规则。 因此,这些规则中的某些规则将停止运行,而其他规则将开始运行。

rule financial.rules.CheckBalance {
   when {
     account: Account();
     evaluate (account.getBalance() < 0 );
   }
   then { // compute a penalty
      Penalty penalty = new Penalty(account);
      insert penalty;
      retract account;
   }
   else { // compute a bonus
      account.computeBonus();
      update account; 
   }
};