Condividi tramite


Ritrarre

È possibile utilizzare la funzione Ritiro per rimuovere oggetti dalla memoria di lavoro del motore regole business. I paragrafi seguenti descrivono il comportamento associato alla ritrazione di entità di diversi tipi dalla memoria di lavoro del motore di regole.

Oggetti .NET

Un oggetto .NET viene ritirato in una policy usando la funzione Retract. Questa funzione è disponibile in Business Rule Composer come elemento vocabolario di Funzioni : trascinare la classe (non l'assembly o il metodo) nel parametro Retract .

Annotazioni

Se si trascina un metodo nella funzione Retract , il motore tenta di ritirare l'oggetto restituito dal metodo .

Il ritiro di un oggetto .NET lo rimuove dalla memoria di lavoro del motore regole e ha l'impatto seguente:

  • Le regole che usano l'oggetto in un predicato hanno le relative azioni rimosse dall'ordine del giorno (se presenti nell'agenda).

  • Le azioni sull'agenda che utilizzano gli oggetti vengono rimosse dall'agenda.

    Annotazioni

    Altre azioni più in alto nell'agenda potrebbero essere già state eseguite prima della chiamata della funzione Ritiro .

  • L'oggetto non viene più valutato dal motore.

TypedXmlDocument

È possibile ritirare il TypedXmlDocument originale che è stato asserito 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 ritirare l'oggetto ordine, trascinare il nodo radice dello schema nel riquadro dei fatti degli 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 al TypedXmlDocument iniziale. Quando il TypedXmlDocument padre viene ritirato, tutte le istanze TypedXmlDocument associate a TypedXmlDocument (tutte le istanze TypedXmlDocument create chiamando la funzione Assert in base ai selettori utilizzati nei criteri) vengono rimosse dalla memoria di lavoro.

Per ritirare solo un elemento figlio di TypedXmlDocument (ovvero una riga di ordine), è possibile trascinare questo nodo dal riquadro XML Schemas nella funzione Ritrai. È importante notare che tutti i TypedXmlDocumentsono associati al TypedXmlDocument di primo livello che è stato originariamente asserito 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 ritira l'oggetto ordine, vengono ritirati anche gli oggetti riga d'ordine e prodotto. Se si ritira l'oggetto orderline, viene ritirato solo l'oggetto e non l'oggetto prodotto.

Il motore funziona solo e tiene traccia delle istanze di oggetti (TypedXmlDocument) che ha creato 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 asseriti utilizzando TypedXmlDocument. L'asserzione di questi nuovi typedXmlDocuments di livello inferiore determina la loro valutazione nelle regole, ma il TypedXmlDocument di primo livello non ne ha conoscenza. Quando il TypedXmlDocument di primo livello viene ritirato, i nuovi TypedXmlDocument asserti in modo indipendente non vengono ritirati automaticamente. Di conseguenza, se vengono creati nuovi nodi, è in genere più semplice ritirare e rivalutare il documento 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 l'XmlNode associato al TypedXmlDocument o al TypedXmlDocument padre.

TypedDataTable

È possibile ritirare singoli typedDataRowo l'intero oggetto TypedDataTable. Se si ritira una tabella, tutte le righe contenenti vengono ritirate 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 i TypedXmlDocument, se si asseriscono nuovi TypedDataRow per lo stesso DataTable dopo aver asserito il TypedDataTable, questi vengono considerati come entità singole e il ritiro del TypedDataTable non comporta il ritiro di questi TypedDataRow aggiuntivi. Solo gli oggetti TypedDataRowcontenuti in TypedDataTable quando è stato asserito vengono ritirati.

DataConnection

Quando un oggetto DataConnection viene ritirato, tutti i TypedDataRow recuperati dal database tramite la query costruita dall'oggetto DataConnection vengono rimossi dalla memoria di lavoro. Il DataConnection stesso viene anche ritirato, ovvero non verranno recuperati altri TypedDataRow tramite DataConnection, cioè 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 sui singoli TypedDataRow associati a un DataConnection. Se si trascina la tabella (usando il parametro DataConnection ) nella funzione Retract , si ritrae DataConnection.

Vedere anche

Funzioni di controllo motore