Creare creatori e recuperatori di fatti da usare con regole e set di regole (anteprima)
Si applica: App per la logica di Azure (Standard)
Importante
Questa funzionalità è in anteprima ed è soggetta alle Condizioni supplementari per l'utilizzo per le anteprime di Microsoft Azure.
Per creare fatti per il motore regole da usare durante lo sviluppo e il test delle regole business, è possibile creare un creatore di fatti, che fornisce al motore una matrice di oggetti .NET. È anche possibile creare un retriever dei fatti che inserisce fatti a lungo termine o a modifica lenta nelle regole per la valutazione durante l'esecuzione.
Questa guida pratica illustra come creare un creatore di fatti e un retriever dei fatti per il progetto motore regole di App per la logica di Azure da usare.
Creare un creatore di fatti
Per creare le istanze dei fatti, implementare l'interfaccia IFactCreator e i relativi metodi, CreateFacts e GetFactTypes. Dopo aver compilato l'assembly .NET (file DLL) per il primo creatore di fatti, è possibile selezionare l'assembly dalla funzionalità di test del set di regole in Microsoft Rules Composer. Per altre informazioni, vedere Set di regole di test.
L'esempio seguente mostra un'implementazione dell'autore di fatti di esempio:
public class MyFactCreator : IFactCreator
{
private object[] myFacts;
public MyFactCreator()
{
}
public object[] CreateFacts ( RuleSetInfo rulesetInfo )
{
myFacts = new object[1];
myFacts.SetValue(new MySampleBusinessObject(),0);
return myFacts;
}
public Type[] GetFactTypes (RuleSetInfo rulesetInfo)
{
return null;
}
}
Creare un recuperatore di fatti
Un retriever dei fatti è un oggetto .NET che implementa i metodi standard e li usa in genere per fornire fatti a lungo termine e modificare lentamente i fatti al motore regole prima che il motore esecuzione del set di regole. Il motore memorizza nella cache questi fatti e li usa su più cicli di esecuzione. Il metodo di recupero dei fatti invia il fatto la prima volta e quindi aggiorna il fatto in memoria solo quando necessario. Anziché inviare un fatto ogni volta che si richiama il motore regole, creare un retriever dei fatti che invia il fatto la prima volta e quindi aggiorna il fatto in memoria solo quando necessario.
Per fornire istanze dei fatti al motore regole, implementare l'interfaccia IFactRetriever e il metodo UpdateFacts . È quindi possibile configurare la versione del set di regole per usare questa implementazione per introdurre fatti in fase di esecuzione. La versione del set di regole chiama quindi il metodo UpdateFacts in ogni ciclo di esecuzione.
Facoltativamente, è possibile implementare l'interfaccia IFactRemover in un componente di recupero dei fatti. Il motore regole può quindi chiamare il metodo denominato UpdateFactsAfterExecution dall'interfaccia IFactRemover quando il set di regole viene eliminato. In questo modo, è possibile eseguire qualsiasi operazione di post-esecuzione, ad esempio il commit di qualsiasi modifica del database o il ritiro di qualsiasi istanza di oggetto dalla memoria di lavoro del motore regole.
È possibile progettare il recupero dei fatti con la logica specifica dell'applicazione necessaria per eseguire le attività seguenti:
Connettersi alle origini dati necessarie.
Asserire i dati come fatti a lungo termine nel motore.
Specificare la logica per aggiornare o asserire nuove istanze dei fatti a lungo termine nel motore.
Il motore usa i valori inizialmente asserti e memorizzati nella cache nei cicli di esecuzione successivi fino a quando tali valori non vengono aggiornati.
L'implementazione del retriever dei fatti restituisce un oggetto analogo a un token che il retriever può usare con l'oggetto factsHandleIn per determinare se aggiornare i fatti esistenti o asserire nuovi fatti. Quando una versione del set di regole chiama il retriever dei fatti per la prima volta, l'oggetto factsHandleIn viene sempre impostato su null, ma assume il valore dell'oggetto restituito dopo il completamento dell'esecuzione del recupero dei fatti.
Il codice di esempio seguente illustra come asserire i fatti .NET e XML usando un'implementazione del retriever dei fatti:
using System;
using System.Xml;
using System.Collections;
using Microsoft.Azure.Workflows.RuleEngine;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace MyApplication.FactRetriever
{
public class myFactRetriever:IFactRetriever
{
public object UpdateFacts(RuleSetInfo rulesetInfo, RuleEngine engine, object factsHandleIn)
{
object factsHandleOut;
if (factsHandleIn == null)
{
// Create .NET object instances.
bookInstance = new Book();
magazineInstance = new Magazine();
// Create XML object instance.
XmlDocument xd = new XmlDocument();
// Load the XML document.
xd.Load(@"..\myXMLInstance.xml");
// Create and instantiate a TypedXmlDocument class instance.
TypedXmlDocument doc = new TypedXmlDocument("mySchema",xd1);
engine.Assert(bookInstance);
engine.Assert(magazineInstance);
engine.Assert(doc);
factsHandleOut = doc;
}
else
factsHandleOut = factsHandleIn;
return factsHandleOut;
}
}
}
Per includere le funzionalità seguenti, scrivere un'implementazione del codice personalizzata:
Determinare quando aggiornare i fatti a lungo termine.
Tenere traccia dell'istanza del motore regole che utilizza i fatti a lungo termine.
Specificare un retriever dei fatti per un set di regole
Per configurare il recupero dei fatti per la versione del set di regole, è possibile impostare la proprietà Fact Retriever in Microsoft Rules Composer oppure scrivere codice personalizzato, come illustrato nell'esempio seguente, che usa una classe denominata "MyFactRetriever" nell'assembly denominato "MyAssembly":
RuleEngineComponentConfiguration fr = new RuleEngineComponentConfiguration("MyAssembly", "MyFactRetriever");
RuleSet rs = new RuleSet("ruleset");
// Associate the execution configuration with a ruleset version.
RuleSetExecutionConfiguration rsCfg = rs.ExecutionConfiguration;
rsCfg.FactRetriever = factRetriever;
Nota
Se si usa un semplice nome di assembly generico, ad esempio "MyAssembly", come primo parametro per il costruttore RuleEngineComponentConfiguration , il motore regole cerca l'assembly nella cartella dell'applicazione.