Reassert
Para volver a declarar significa llamar a la función Assert en un objeto que ya está en la memoria de trabajo del motor. Un comando reassert es equivalente a emitir un comando retract y, a continuación, un comando assert para el objeto.
En primer lugar, se retrae el objeto y se quita cualquier acción de la agenda para las reglas que usan el objeto (en un predicado o una acción). A continuación, el objeto se vuelve a imponer en la memoria de trabajo y se evalúa como cualquier objeto que se haya impuesto recientemente. Esto significa que se vuelve a evaluar cualquier regla que utilice el objeto en un predicado y que las acciones se agregan a la agenda según corresponda. Todas las reglas que se hayan evaluado previamente como true y que solo usen el objeto en sus acciones tendrán sus acciones de nuevo agregadas al programa.
Cuando se vuelve a afirmar un TypedXmlDocument (TXD) de nivel superior, los TXDsecundarios que se crean cuando el TXD de nivel superior se afirma inicialmente tienen comportamientos diferentes en función del estado de los TXDsecundarios. En el caso de un nuevo nodo secundario o un nodo secundario que está sucio, lo que significa que al menos uno de sus campos se ha cambiado en la directiva mediante una acción de regla, una aserción o una acción de reinserción se realiza en el nodo secundario. Cualquier nodo secundario existente no modificado se conservará en la memoria de trabajo. El siguiente ejemplo es un escenario simplificado que describe los comportamientos de los nodos secundarios cuando se vuelve a imponer el nodo primario.
Supongamos que hay tres TXDactualmente en la memoria de trabajo: P, C1, C2 y C3. P es el TXD de nivel superior, el nodo primario; cada nodo secundario contiene un campo x.
P
C1 (C1.x = 1)
C2 (C2.x = 1)
C3 (C3.x = 1)
Además, supongamos que se han realizado las siguientes operaciones como resultado de la acción de una regla:
El valor del campo (x) para C2 se actualiza.
C3 se elimina mediante el código de usuario.
Se agrega un nodo secundario adicional, D, a P mediante código de usuario.
Nota
El motor de reglas de negocios no marcará como modificados los nodos de los que no tenga conocimiento. Por ejemplo, agregar, eliminar o modificar un nodo mediante programación en una aplicación externa.
La nueva representación de los objetos en la memoria de trabajo es la siguiente:
P
C1 (C1.x = 1)
C2 (C2.x = 0)
D
Ahora, reassert P. En los puntos siguientes se resumen los comportamientos de los nodos secundarios:
El nodo C2 se vuelve a restablecer, ya que se ha modificado después de actualizar su campo.
El nodo C3 se retira de la memoria de trabajo.
El nodo D se afirma en la memoria de trabajo.
El nodo C1 permanece sin cambios en la memoria de trabajo, ya que no se actualizó antes de que se restableció P .
Si Se emite Reassert en un TypedDataRow, esa fila se retira y, a continuación, se afirma en la memoria de trabajo. Si Se emite Reassert en TypedDataTable, todos los TypedDataRowasociados se retiran y, a continuación, se declaran.
Todos los objetos TypedDataRowrecuperados a través de DataConnection se retiran. Todos los predicados que usan DataConnection se vuelven a evaluar, lo que hace que se vuelva a consultar DataConnection para crear los TypedDataRowcorrespondientes.