Nuova asserzione
Per rivalutare significa chiamare la funzione Assert su un oggetto già presente nella memoria di lavoro del motore. Un comando di esecuzione di una nuova asserzione equivale all'esecuzione di un comando di ritrazione per l'oggetto, seguito da un comando di asserzione.
L'oggetto viene prima ritratto e tutte le azioni nell'agenda per le regole che utilizzano l'oggetto (in un predicato o un'azione) vengono rimosse. L'oggetto quindi viene dichiarato di nuovo nella memoria di lavoro e valutato come qualsiasi nuovo oggetto dichiarato. Ne consegue che tutte le regole che utilizzano l'oggetto in un predicato vengono nuovamente valutate e le relative azioni vengono aggiunte all'agenda in base alle esigenze. Tutte le regole che in precedenza valutavano true e utilizzeranno solo l'oggetto nelle azioni avranno le azioni aggiunte nuovamente all'agenda.
Quando viene rivalutato un typedXmlDocument (TXD) di livello superiore, il TXDfiglio creato quando il TXD di livello superiore viene inizialmente dichiarato ha comportamenti diversi a seconda dello stato del TXDfiglio. Nel caso di un nuovo nodo figlio o di un nodo figlio dirty, vale a dire che almeno uno dei relativi campi è stato modificato nei criteri usando un'azione regola, un'asserzione o un'azione di rivalutazione viene eseguita sul nodo figlio. Qualsiasi nodo figlio esistente non contrassegnato come modificato rimane nella memoria di lavoro. Nell'esempio seguente viene illustrato uno scenario semplificato che descrive i comportamenti dei nodi figlio quando il relativo nodo padre viene di nuovo dichiarato.
Si supponga che nella memoria di lavoro siano attualmente presenti tre TXD: P, C1, C2 e C3. P è il TXD di primo livello, il nodo padre; ogni nodo figlio contiene un campo x.
P
C1 (C1.x = 1)
C2 (C2.x = 1)
C3 (C3.x = 1)
Si supponga inoltre che siano state eseguite le operazioni seguenti in seguito all'azione della regola:
Il valore del campo (x) per C2 viene aggiornato.
C3 viene eliminato usando il codice utente.
Un nodo figlio aggiuntivo, D, viene aggiunto a P usando il codice utente.
Nota
Un nodo non viene contrassegnato come modificato dal Motore regole di business in seguito all'esecuzione di operazioni non supportate dal motore, ad esempio l'aggiunta, l'eliminazione o la modifica di un nodo a livello di codice in un'applicazione esterna.
Di seguito viene illustrata la nuova rappresentazione degli oggetti nella memoria di lavoro.
P
C1 (C1.x = 1)
C2 (C2.x = 0)
D
Ora, rivalutare P. I punti seguenti riepilogano i comportamenti dei nodi figlio:
Il nodo C2 viene rivalutato perché è diventato dirty dopo l'aggiornamento del relativo campo.
Il nodo C3 viene ritirato dalla memoria di lavoro.
Il nodo D viene asserito nella memoria di lavoro.
Il nodo C1 rimane invariato nella memoria di lavoro, perché non è stato aggiornato prima della rivalutazione di P .
Se Reassert viene emesso in un typedDataRow, tale riga viene ritirata e quindi asserta nella memoria di lavoro. Se reassert viene emesso in TypedDataTable, tutti gli oggetti TypedDataRowassociati vengono ritirati e quindi asserti.
Tutti gli s TypedDataRowrecuperati tramite DataConnection vengono ritirati. Tutti i predicati che usano DataConnection vengono quindi rivalutati, causando la nuova query di DataConnection per creare l'oggetto TypedDataRowpertinente.