Efectos secundarios de acciones de reglas
Si la ejecución de una acción afecta al estado de un objeto o a un término empleado en las condiciones, se considera que dicha acción tiene un efecto secundario sobre el objeto.
Suponga que tenemos las siguientes reglas:
Regla 1
IF OrderForm.ItemCount > 100
THEN OrderForm.Status = "important"
Regla 2
IF OrderList.IsFromMember = true
THEN OrderForm.UpdateStatus("important")
En este caso, se dice que OrderForm.UpdateStatus tiene un efecto secundario en OrderForm.Status. Esto no significa que OrderForm.UpdateStatus tenga efectos secundarios; en su lugar, OrderForm.Status puede verse afectado por una o varias acciones.
De forma predeterminada, la propiedad SideEffects para los miembros de la clase .NET es true, lo que impide que el motor de reglas almacena en caché el miembro con efectos secundarios. En nuestro ejemplo, el motor de reglas no almacena en caché OrderForm.Status en la memoria de trabajo; en su lugar, obtiene el valor más actualizado de OrderForm.Status cada vez que se evalúa la regla 1. Si la propiedad SideEffects se establece en false, el motor de reglas almacena en caché el valor la primera vez que evalúa OrderForm.Status, pero para las evaluaciones posteriores (en escenarios de encadenamiento de reenvíos), usa el valor almacenado en caché.
Actualmente, el Compositor de reglas de negocios no proporciona una manera para que los usuarios modifiquen SideEffects; sin embargo, solo puede establecer la propiedad SideEffects mediante programación a través del marco de reglas de negocios. Para ello, se establece en el enlace, se usa la clase ClassMemberBinding para especificar métodos de objeto, propiedades y campos usados en las condiciones de regla y las acciones. ClassMemberBinding tiene una propiedad , SideEffects, que contiene un valor booleano que indica si el acceso al miembro cambia su valor.