Retract
È possibile utilizzare la funzione Ritiro per rimuovere oggetti dalla memoria di lavoro del motore regole business. Di seguito viene descritto il comportamento associato alla ritrazione di entità di diverso tipo dalla memoria di lavoro del Motore regole di business.
Un oggetto .NET viene ritirato in un criterio usando la funzione Ritiro . Questa funzione è disponibile in Business Rule Composer come elemento del vocabolario di Funzioni : trascinare la classe (non l'assembly o il metodo) nel parametro Retract .
Nota
Se si trascina un metodo nella funzione Retract , il motore tenta di ritirare l'oggetto restituito dal metodo .
Quando si ritrae un oggetto .NET, questo viene rimosso dalla memoria di lavoro del Motore regole di business, con le seguenti conseguenze:
Le azioni delle regole che utilizzano l'oggetto in un predicato vengono rimosse dall'agenda (se esistenti nell'agenda).
Le azioni nell'agenda che utilizzano gli oggetti vengono rimosse dall'agenda.
Nota
Altre azioni più in alto sull'agenda potrebbero essere già state eseguite prima della chiamata della funzione Ritiro .
L'oggetto non viene più valutato dal motore.
È possibile ritirare il TypedXmlDocument originale asseribile nel motore o ritirare uno dei TypedXmlDocumentfiglio creati da un nodo di XmlDocument padre.
Usando il codice XML seguente come esempio, è possibile ritirare il TypedXmlDocument associato all'ordine o a uno o entrambi i typedXmlDocumentassociati alla riga di ordine.
<order>
<orderline customer="Joe" linenumber="001">
<product name="router" quantity="10" cost="550" />
</orderline>
<orderline customer="Jane" linenumber="002">
<product name="switch" quantity="1" cost="300" />
</orderline>
</order>
Per ritrarre l'oggetto ordine è necessario trascinare il nodo superiore dello schema nel riquadro dei fact Schemi XML. Questo nodo termina con ".xsd" e rappresenta il nodo radice del documento (non il nodo dell'elemento documento); ha un selettore "/" che fa riferimento all'oggetto TypedXmlDocument iniziale. Quando typedXmlDocument padre viene ritirato, tutte le istanze TypedXmlDocument associate a TypedXmlDocument (tutte le proprietà TypedXmlDocumentcreate chiamando la funzione Assert in base ai selettori utilizzati nei criteri) vengono rimosse dalla memoria di lavoro.
Per ritirare solo un singolo elemento figlio TypedXmlDocument (ovvero una riga di ordine), è possibile trascinare questo nodo dal riquadro XML Schemas nella funzione Ritiro . È importante notare che tutti i TypedXmlDocumentsono associati al TypedXmlDocument di primo livello che è stato originariamente assertato e non con TypedXmlDocument visualizzato sopra di esso nella gerarchia dell'albero XML. Ad esempio, il prodotto è un TypedXmlDocument sotto l'oggetto orderline; pertanto, sarebbe associato all'ordine TypedXmlDocument e non alla riga di ordine TypedXmlDocument. Nella maggior parte dei casi questa distinzione non è importante. Tuttavia, se si ritrae l'oggetto ordine, vengono ritratti anche gli oggetti prodotto e riga ordine. Se si ritrae l'oggetto riga ordine, viene ritratto solo tale oggetto e non l'oggetto prodotto.
Il motore funziona solo con e tiene traccia delle istanze dell'oggetto (TypedXmlDocuments) create al momento dell'asserzione iniziale di TypedXmlDocument . Se si creano nodi aggiuntivi, ad esempio nodi di pari livello in un nodo selezionato tramite un selettore nei criteri, questi nodi non vengono valutati nelle regole a meno che non vengano creati e asserzionati da TypedXmlDocument. L'asserzione di questi nuovi typedXmlDocuments di livello inferiore li fa valutare nelle regole, ma il TypedXmlDocument di primo livello non ne ha conoscenza. Quando typedXmlDocument di primo livello viene ritirato, il nuovo typedXmlDocumentasserzione indipendente non viene ritirato automaticamente. Di conseguenza, se vengono creati nuovi nodi, è in genere più semplice ritirare e rivalutare l'xmlDocument completo.
La classe TypedXmlDocument supporta diversi metodi utili che possono essere chiamati all'interno di un membro .NET personalizzato come parte di un'azione. Questi includono la possibilità di ottenere xmlNode associato a TypedXmlDocument o al TypedXmlDocument padre.
È possibile ritirare i singoli typedDataRowo l'intero typedDataTable. Se si ritrae una tabella, tutte le righe contenute vengono ritratte dalla memoria di lavoro.
Per ritirare l'intera proprietà TypedDataTable , è necessario utilizzare una funzione helper per accedere alla proprietà Parent in TypedDataRow, ad esempio:
Retract(MyHelper.GetTypedDataTable(TypedDataRow))
Nell'azione precedente si trascina la tabella in TypedDataRow. In GetTypedDataTable viene restituito il valore di TypedDataRow.Parent.
Come per TypedXmlDocuments, se si asserisce un valore aggiuntivo, il nuovo TypedDataRows per la stessa DataTable dopo l'asserzione di TypedDataTable viene considerato come singole entità e il ritiro di TypedDataTable non comporta il ritiro di questi oggetti TypedDataRowaggiuntivi. Solo l'oggetto TypedDataRowcontenuto nell'oggetto TypedDataTable quando è stato asserito viene ritirato.
Quando un oggetto DataConnection viene ritirato, tutti gli s TypedDataRowrecuperati dal database tramite la query costruita da DataConnection vengono ritirati dalla memoria di lavoro. Anche DataConnection viene ritirato, vale a dire che non verranno recuperati altri oggetti TypedDataRowtramite DataConnection, ovvero tramite l'uso di DataConnection in altri predicati o azioni.
Quando si usa un oggetto DataConnection, qualsiasi operazione di ritiro su un singolo typedDataRow inserisce il motore in uno stato incoerente. Di conseguenza, le operazioni non sono consentite in singoli tipi TypedDataRowassociati a dataconnection. Se si trascina la tabella (usando il parametro DataConnection ) nella funzione Retract , si ritrae DataConnection.