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