Reassert
Une nouvelle affirmation signifie appeler la fonction Assert sur un objet qui se trouve déjà dans la mémoire de travail du moteur. Une commande de redéclaration équivaut à émettre une commande Rétracter pour l'objet, suivie d'une commande Déclarer.
L'objet est d'abord rétracté et toutes les actions sur l'agenda pour les règles qui utilisent cet objet (dans un prédicat ou une action) sont supprimées. L'objet est ensuite redéclaré dans la mémoire de travail et évalué comme tout objet nouvellement déclaré. Cela signifie que toutes les règles qui utilisent l'objet dans un prédicat sont réévaluées et que leurs actions sont ajoutées à l'agenda selon les nécessités. Toutes les règles qui avaient précédemment la valeur true et qui utilisent uniquement l’objet dans leurs actions verront leurs actions réinscrites à l’ordre du jour.
Lorsqu’un TypedXmlDocument (TXD) de niveau supérieur est réaffirmé, les TXDenfants qui sont créés lorsque le TXD de niveau supérieur est initialement déclaré ont des comportements différents en fonction de l’état des TXDenfants. Dans le cas d’un nouveau nœud enfant ou d’un nœud enfant sale, ce qui signifie qu’au moins un de ses champs a été modifié dans la stratégie à l’aide d’une action de règle, une action d’assertion ou de nouvelle affirmation est effectuée sur le nœud enfant. Tout nœud enfant existant dont les champs n'ont pas été modifiés reste dans la mémoire de travail. L'exemple suivant est un scénario simplifié qui décrit le comportement des nœuds enfants quand leur nœud parent est redéclaré.
Supposons qu’il existe actuellement trois TXDdans la mémoire de travail : P, C1, C2et C3. P est le txd de niveau supérieur, le nœud parent ; chaque nœud enfant contient un champ x.
P
C1 (C1.x = 1)
C2 (C2.x = 1)
C3 (C3.x = 1)
Supposez ensuite que les opérations suivantes ont été effectuées suite à une action de règle :
La valeur du champ (x) pour C2est mise à jour.
C3 est supprimé à l’aide du code utilisateur.
Un nœud enfant supplémentaire, D, est ajouté à P à l’aide du code utilisateur.
Notes
Le moteur des règles d'entreprise ne pourra pas identifier un nœud ayant perdu son intégrité à cause d'opérations que le moteur ne reconnaît pas, comme l'ajout, la suppression ou la modification d'un nœud, par programme, dans une application externe.
Dans la mémoire de travail, les objets adoptent la nouvelle représentation suivante.
P
C1 (C1.x = 1)
C2 (C2.x = 0)
D
Maintenant, assermentez P. Les points suivants résument les comportements des nœuds enfants :
Le nœud C2 est réaffirmé, car il est devenu sale après la mise à jour de son champ.
Le nœud C3 est retiré de la mémoire de travail.
Le nœud D est déclaré dans la mémoire de travail.
Le nœud C1 reste inchangé dans la mémoire de travail, car il n’a pas été mis à jour avant que P ait été réaffirmé.
Si Reassert est émis sur un TypedDataRow, cette ligne est retirée, puis déclarée en mémoire de travail. Si Reassert est émis sur typedDataTable, tous les types TypedDataRowassociés sont retirés, puis déclarés.
Tous les TypesdDataRowrécupérés via DataConnection sont retirés. Tous les prédicats qui utilisent DataConnection sont ensuite réévalués, ce qui entraîne la requête de DataConnection pour créer les TypesdDataRowappropriés.