Leggere in inglese

Condividi tramite


Assert

L'asserzione è il processo di aggiunta di istanze di oggetto nella memoria di lavoro del motore di regole business. Il motore elabora ogni istanza in base alle condizioni e alle azioni scritte rispetto al tipo di istanza, utilizzando le fasi corrispondenza-conflitto risoluzione-azione.

Gli argomenti seguenti descrivono i comportamenti che derivano dall'uso della funzione Assert per tipi di fatti diversi.

Oggetti .NET

Ogni oggetto viene dichiarato nella memoria utilizzata come istanza separata. Ciò significa che l'istanza viene analizzata da ogni predicato che fa riferimento al tipo di oggetto, ad esempio IF Object.Property = 1. Viene inoltre messa a disposizione delle azioni regola che fanno riferimento al tipo, in base ai risultati delle condizioni delle regole.

Si consideri l'esempio seguente.

Regola 1

IF A.Value = 1  
THEN A.Status = "good"  

Regola 2

IF B.Value = 1  
THEN A.Status = "good"  

Nella regola 1 solo le istanze di A con valore 1 avranno la proprietà Status aggiornata. Nella regola 2, tuttavia, se la condizione restituisce true, tutte le istanze di A avranno lo stato aggiornato. In effetti, se sono presenti più istanze di B, le istanze A verranno aggiornate ogni volta che la condizione restituisce true per un'istanza B.

Per affermare un oggetto .NET dall'interno di una regola, è possibile aggiungere la funzione Assert predefinita come azione regola. Si noti che il motore delle regole ha una funzione CreateObject , ma non viene visualizzata come funzione separata in Business Rule Composer. La sua richiamata viene creata trascinando il metodo costruttore dell'oggetto che si desidera creare dalla visualizzazione Classe .NET di Facts Explorer al riquadro Azioni. Business Rule Composer converte quindi il metodo del costruttore in una chiamata CreateObject nella definizione della regola.

TypedXmlDocument

Quando un TypedXmlDocument viene asserito, il motore regole business crea istanze TypedXmlDocument figlio in base ai selettore definiti nella regola.

I selettori e i campi sono entrambi espressioni XPath. I selettori possono essere considerati come un modo per isolare i nodi di un documento XML e campi come elementi specifici di identificazione all'interno del selettore. Tutti i campi all'interno di un selettore sono raggruppati come oggetto dal motore. Quando si seleziona un nodo nella scheda XML Schemas in Esplora fatti, Business Rule Composer inserisce automaticamente la proprietà XPath Selector per tutti i nodi e la proprietà XPath Field per qualsiasi nodo che non contiene nodi figlio. In alternativa, è possibile immettere le proprie espressioni XPath per XPath Selector e XPath Field , se necessario.

Se il selettore corrisponde a più parti del documento XML, più oggetti di questo tipo vengono dichiarati o ritratti dalla memoria utilizzata del Motore regole di business. Si supponga di avere l'XML seguente.

<root>  
   <order customer="Joe">  
      <item name="router" quantity="10" cost="550" />  
      <item name="switch" quantity="3" cost="300" />  
   </order>  
   <order customer="Jane">  
      <item name="switch" quantity="1" cost="300" />  
      <item name="cable" quantity="23" cost="9.99" />  
   </order>  
</root>  

Se si utilizza il selettore /root/order (o //order), alla memoria utilizzata vengono aggiunti due oggetti.

1)

<order customer="Joe">  
   <item name="router" quantity="10" cost="550" />  
   <item name="switch" quantity="3" cost="300" />  
</order>  

2)

<order customer="Jane">  
   <item name="switch" quantity="1" cost="300" />  
   <item name="cable" quantity="23" cost="9.99" />  
</order>  

All'interno di ogni selettore, ai singoli campi viene fatto riferimento dagli XPath.

Se si usa il selettore /root/order/item (o (/order/item o //item), quattro oggetti vengono aggiunti alla memoria di lavoro del motore delle regole, i due elementi per Joe e i due elementi per Jane.

<root>  
   <order customer="Joe">  
  
   </order>  
   <order customer="Jane">  
  
   </order>  
</root>  

Ogni oggetto ha accesso a tre campi: @name, @quantitye @cost. Poiché l'oggetto è un riferimento nel documento originale, è possibile fare riferimento ai campi padre (ad esempio, "../@customer").

È possibile utilizzare più selettori all'interno dello stesso documento. Ciò consente di visualizzare diverse parti del documento, ad esempio se una sezione è l'ordine e un'altra sezione contiene l'indirizzo di spedizione. Tenere tuttavia presente che gli oggetti creati vengono definiti dalla stringa XPath che li ha creati. L'uso di un'espressione XPath diversa, anche se si risolve nello stesso nodo, genera un typedXmlDocument univoco.

Il Motore regole di business supporta tipi scalari di base .NET a livello nativo e oggetti per i tipi di riferimento. I documenti XML sono fondamentalmente testo ma sono basati sul tipo specificato al momento della creazione della regola, il valore del campo può essere di qualsiasi tipo. Inoltre, poiché i campi sono espressioni XPath, possono restituire un set di nodi, nel qual caso come valore viene utilizzato il primo elemento nel set.

Dietro le quinte, il motore delle regole può convertire un valore di campo di testo in uno dei tipi supportati tramite la funzione XmlConvert . Questo può essere specificato impostando il tipo in Creazione regole di business. Se una conversione non è possibile, viene generata un'eccezione. I tipi bool e double possono essere recuperati solo come rispettivi tipi, stringhe o oggetti.

TypedDataTable

Quando un typedDataTable è asseribile, tutti i DataRow contenuti in DataTable vengono asserti automaticamente nel motore come TypedDataRows. Ogni volta che una tabella o una colonna di tabella viene usata come argomento regola, l'espressione viene valutata rispetto ai singoli TypedDataRows e non rispetto a TypedDataTable.

Si supponga, ad esempio, che venga creata la regola seguente su una tabella "Customers":

IF Northwind.Customers.CustomerID = 001  
THEN Northwind.Customers.ContactTitle = "Purchasing Manager"  

Nota

Per compilare una regola su una tabella di database, è necessario usare tabella/riga di dati come tipo di associazione del database.

Si supponga di affermare la tabella Dati seguente con tre DataRows nel motore (come TypedDataTable).

CustomerID ContactTitle
001 Addetto alle forniture
002 Addetto alle forniture
003 Addetto alle forniture

Il motore inserisce tre TypedDataRows: 001, 002 e 003.

Ogni TypedDataRow viene valutato in modo indipendente rispetto alla regola. Il primo TypedDataRow soddisfa la condizione della regola e i due secondi hanno esito negativo. I risultati sono i seguenti.

CustomerID ContactTitle
001 Responsabile acquisti
002 Addetto alle forniture
003 Addetto alle forniture

Nota

Le TypedDataRow possono inoltre venire dichiarate direttamente nel motore. Vengono elaborate come descritto in precedenza.

DataSetName.DataTableName è considerato un identificatore univoco. Pertanto, se un secondo TypedDataTable viene asseribile con lo stesso nome DataSet e il nome di DataTable , sostituisce il primo TypedDataTable. Tutti gli s TypedDataRowassociati al primo TypedDataTable vengono ritirati e il secondo TypedDataTable viene affermato.

DataConnection

Come per un oggetto TypedDataTable, trascinando una tabella o una colonna come argomento di regola in Business Rule Composer vengono restituite regole compilate rispetto a TypedDataRowrestituite anziché a DataConnection stesso.

Si supponga che la regola seguente venga creata e che un DataConnection sia affermato che contiene un oggetto SqlConnection a Northwind.Customers:

IF Northwind.Customers.CustomerID = 001  
THEN Northwind.Customers.ContactTitle = "Purchasing Manager"  

Quando il motore valuta la regola usata nella sezione TypedDataTable , compila dinamicamente una query simile a:

SELECT *  
FROM Northwind.Customers  
WHERE CustomerID = 1  

Poiché solo una riga nel database soddisfa questo criterio, viene creata una sola typedDataRow e asserta nel motore per un'ulteriore elaborazione.

Riepilogo delle entità dichiarate e dei tipi di istanza

Nella tabella seguente è riassunto il comportamento di asserzione per i vari tipi, viene visualizzato il numero di istanze risultanti create nel motore per ogni entità dichiarata e il tipo applicato a ognuna di quelle istanze per identificarle.

Entità Numero di istanze dichiarate Tipo di istanza
.NET (oggetto) 1 (l'oggetto stesso) Classe .NET completa
TypedXmlDocument 1-N TypedXmlDocument(s): in base alle associazioni del selettore create e al contenuto del documento DocumentType.Selector
TypedDataTable 1-N TypedDataRow:

Uno per ogni DataRow in DataTable
DataSetName.DataTableName
TypedDataRow 1 (la TypedDataRow dichiarata) DataSetName.DataTableName
DataConnection 1-N (uno per ogni TypedDataRow restituita eseguendo una query su DataConnection) DataSetName.DataTableName

Vedere anche

Funzioni di controllo del motore