Notificando o mecanismo de regra de alterações de objetos

É possível notificar o mecanismo de regras da disponibilidade de novos objetos ou quando um objeto é atualizado ou retraído.

Sobre esta Tarefa

A notificação de alterações de objetos depende do modo de execução:

  • Quando o mecanismo de regras é executado no modo RetePlus , ele recalcula instantaneamente as regras correspondentes e replaneja uma agenda interna.
  • Quando o mecanismo de regra roda em modo sequencial ou Fastpath, ele usa o novo status dos objetos quando você entra em uma nova tarefa de regra.

Procedimento

  1. Use a estrutura de frase de código a seguir: insert object;

    Esta instrução notifica o algoritmo RetePlus que um novo objeto está disponível. Regras que dependem desse tipo de objeto executado quando os objetos atendem às condições de regras.

  2. Use a estrutura de código a seguir: insert ClassName(<constructor_arguments>) [{statement1; ... statement}] ;
  3. Se o mecanismo de regras for executado no modo RetePlus , use a estrutura de frase código a seguir: update object;

    Essa instrução notifica o algoritmo RetePlus de que as regras que dependem desse objeto devem ser reavaliadas Alguns deles não correm mais, e outros começam a correr.

  4. Se o mecanismo de regras for executado no modo RetePlus , use a estrutura de frase código a seguir: retract object;

    Essa instrução notifica o algoritmo RetePlus de que esse objeto não está mais disponível As regras que dependem desse objeto não são mais executadas.

Resultados

O código a seguir apresenta o padrão global para notificar o mecanismo de regra de alterações de objetos:

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

Exemplo:

Na parte da ação then deste exemplo, o algoritmo RetePlus é notificado que o novo objeto penalty está disponível e que o objeto account não está mais disponível. Como resultado, as regras podem ser executadas para objetos de pênalti, mas não para objetos de conta mais. Na parte da ação else , o algoritmo RetePlus é notificado que as regras que dependem do objeto account devem ser reavaliadas. Como resultado, algumas dessas regras param de correr e outras começam a correr.

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; 
   }
};