Eseguire attività avanzate sui set di regole con Microsoft Rules Composer (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.
Questa guida descrive le operazioni più avanzate che è possibile eseguire sui set di regole in Microsoft Rules Composer.
Prerequisiti
Scaricare e installare Microsoft Rules Composer.
File XML contenente il set di regole su cui si desidera lavorare.
Copiare una versione del set di regole
È possibile creare una copia di una versione del set di regole esistente, ma con un numero di versione diverso.
Aprire Microsoft Rules Composer. Nella finestra Esplora set di regole aprire il menu di scelta rapida della versione del set di regole e selezionare Copia.
Aprire il menu di scelta rapida del set di regole e selezionare Incolla versione del set di regole.
Microsoft Rules Composer crea una nuova versione del set di regole con gli stessi elementi della versione copiata ma con un numero diverso.
Nota
Se si aggiorna l'assembly .NET usato per fornire fatti al set di regole, assicurarsi di aggiornare i riferimenti della versione del set di regole a tale assembly. Per altre informazioni, vedere Aggiornare i riferimenti agli assembly .NET.
Creare una versione vuota del set di regole
Dopo aver aggiunto regole a una versione del set di regole, è possibile creare una nuova versione del set di regole vuota con un numero diverso e salvare tale versione in un secondo momento.
Aprire Microsoft Rules Composer. Dal menu di scelta rapida del set di regole selezionare Aggiungi nuova versione.
Microsoft Rules Composer crea una nuova versione vuota del set di regole con un numero diverso.
Aprire il menu di scelta rapida della nuova versione del set di regole e selezionare Salva.
È ora possibile copiare le regole da altre versioni del set di regole e incollarle nella nuova versione.
Passare tipi di fatti a un set di regole
Anche se non è possibile specificare direttamente un tipo restituito per un set di regole, è possibile passare uno dei tipi di fatti seguenti al set di regole, impostare il set di regole per modificare il valore del fatto in true
o false
e quindi controllare il valore della proprietà o dell'elemento/colonna dopo l'esecuzione del set di regole:
- Oggetto .NET con una proprietà di
Boolean
tipo - Documento XML con un elemento con
Boolean
tipo
Configurare un retriever dei fatti per un set di regole
Quando si usa un retriever dei fatti con il set di regole, è possibile archiviare fatti che spesso non cambiano in modo che prima del primo ciclo di esecuzione dell'applicazione host. In questo modo, è possibile recuperare questi fatti dall'archiviazione, presentarli una volta al motore regole per la memorizzazione nella cache e riutilizzarli in più cicli di esecuzione. Per altre informazioni, vedere Creare creatori di fatti e retriever.
Esistono due modi per associare un retriever dei fatti a un set di regole:
Selezionare manualmente un retriever dei fatti per una versione del set di regole in Microsoft Rules Composer.
A livello di codice tramite l'oggetto
RuleSetExecutionConfiguration
.
Nota
È possibile associare un'unica implementazione del retriever dei fatti a una versione del set di regole.
Selezionare manualmente un retriever dei fatti per un set di regole
Aprire Microsoft Rules Composer. In Esplora set di regole selezionare la versione del set di regole da associare al recupero dei fatti.
Nella finestra Proprietà selezionare la riga della proprietà FactRetriever e quindi selezionare il pulsante con i puntini di sospensione (...) per trovare e selezionare un oggetto retriever dei fatti esistente.
Nota
Il pulsante con i puntini di sospensione (...) non viene visualizzato finché non si seleziona la riga FactRetriever nella finestra Proprietà .
Chiamare un set di regole figlio da un set di regole padre
Per questa attività, usare uno dei metodi seguenti:
Chiamare il
Ruleset.Execute
metodo direttamente dal set di regole padre.Dal set di regole padre chiamare un metodo di un componente .NET helper che esegue il wrapping del
Ruleset.Execute
metodo .Con il secondo metodo è possibile aggiungere codice di pre-elaborazione e post-elaborazione al
Ruleset.Execute
metodo . Ad esempio, è possibile creare tutti i fatti necessari dal set di regole figlio all'interno di questo metodo wrapper. Le sezioni seguenti forniscono un esempio per ogni metodo.
Chiamare il metodo Ruleset.Execute direttamente dal set di regole padre
Questa sezione illustra i passaggi generali per chiamare il set di regole figlio direttamente dal set di regole padre usando il Ruleset.Execute
metodo . La procedura seguente illustra i passaggi per aggiungere il Ruleset.Execute
metodo come azione al set di regole padre che passa un documento XML come fatto al set di regole figlio.
Nota
In questo scenario di esempio, un documento XML viene inviato come fatto al set di regole padre. Questo documento viene passato come fatto al set di regole figlio. Tuttavia, è possibile chiamare un metodo .NET che crea invece i fatti per il set di regole figlio.
Aprire Microsoft Rules Composer. Nella finestra Esplora fatti selezionare la scheda Classi .NET.
Aprire il menu di scelta rapida per assembly .NET e selezionare Sfoglia.
Nell'elenco Assembly .NET selezionare Microsoft.RuleEngine e quindi selezionare OK.
Espandere Il set di regole e trascinare Execute(Object facts) o Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) nel riquadro THEN .
Selezionare il nodo XML Schema, aprire il menu di scelta rapida per Schemi e selezionare Sfoglia.
Selezionare lo schema per il documento XML da passare come fatto e quindi selezionare Apri.
Per passare il documento XML passato al set di regole padre come fatto al set di regole figlio, trascinare <schema-name.xsd> al primo argomento nel metodo Ruleset.Execute.
Se si usa il metodo Execute che non accetta IRuleSetTrackingInterceptor come secondo argomento, ignorare i passaggi seguenti.
Selezionare la scheda Classi .NET e trascinare DebugTrackingInterceptor in Microsoft.RuleEngine nel secondo argomento del metodo Ruleset.Execute .
Nota
Se si esegue questa azione, il client deve passare un'istanza della classe DebugTrackingInterceptor come fatto al set di regole padre, che quindi passa l'istanza come fatto al set di regole figlio. È invece possibile trascinare il costruttore della classe DebugTrackingInterceptor in modo che l'istanza venga creata automaticamente.
Modificare l'applicazione client che chiama il set di regole padre
Il client che richiama il set di regole padre crea un'istanza della classe Ruleset con il nome del set di regole figlio come parametro e passa tale istanza come fatto al set di regole padre insieme ad altri fatti. Il codice di esempio seguente illustra questa azione:
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt");
Ruleset Ruleset = new Ruleset("ParentRuleset");
object[] facts = new object[3];
facts[0] = txd;
facts[1] = new Ruleset("ChildRuleset");
facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt");
Ruleset.Execute(facts, dti);
Ruleset.Dispose();
Se il client è un'orchestrazione BizTalk, potrebbe essere necessario inserire il codice in una forma Expression per creare fatti e quindi passare i fatti come parametri alla forma Regole di chiamata.
Chiamare un metodo wrapper .NET dal set di regole padre
Questa sezione presenta i passaggi generali per richiamare un metodo .NET che esegue il wrapping della chiamata al metodo Ruleset.Execute dal set di regole padre.
Creare la classe .NET dell'utilità
Creare un progetto di libreria di classi .NET. Aggiungere una classe al progetto.
Aggiungere un metodo statico che chiama il
Ruleset.Execute
metodo per richiamare il set di regole il cui nome viene passato come parametro, ad esempio, come illustrato nel codice di esempio seguente:public static void Execute(string RulesetName, TypedXmlDocument txd) { DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt"); Ruleset Ruleset = new Ruleset("ParentRuleset"); object[] facts = new object[3]; facts[0] = txd; facts[1] = new Ruleset("ChildRuleset"); facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt"); Ruleset.Execute(facts, dti); Ruleset.Dispose(); }
Il client richiama il set di regole padre e il set di regole padre chiama il metodo helper che richiama il set di regole figlio, ad esempio, come illustrato nel codice di esempio seguente per il client:
facts[0] = txd; facts[1] = new RulesetExecutor(txd); // Call the first or parent ruleset. Ruleset Ruleset = new Ruleset(RulesetName); DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt"); Ruleset.Execute(facts, dti); Ruleset.Dispose();
Nota
Se il metodo è un metodo di istanza, il client deve creare un'istanza della classe .NET helper e passare tale istanza come fatto al set di regole padre.
Analizzare più oggetti con lo stesso tipo in una regola
In molti scenari si scrive una regola business in base a un tipo e si prevede che il motore analizzi e agisca separatamente su ogni istanza del tipo asserito nel motore. In alcuni scenari, tuttavia, si vuole che il motore analizzi contemporaneamente più istanze con lo stesso tipo. Ad esempio, la regola di esempio seguente usa più istanze della classe FamilyMember :
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
La regola identifica più istanze FamilyMember in cui uno è padre e un altro è figlio. Se le istanze sono correlate in base al cognome, la regola aggiunge l'istanza di Son a una raccolta di elementi figlio nell'istanza padre . Se il motore analizza separatamente ogni istanza di FamilyMember , la regola non viene mai attivata perché in questo scenario, FamilyMember ha un solo ruolo, Padre o Figlio.
In questo scenario è quindi necessario indicare che il motore analizza più istanze insieme nella regola ed è necessario un modo per distinguere l'identità di ogni istanza nella regola. È possibile usare il campo ID istanza per fornire questa funzionalità. Questo campo è disponibile nella finestra Proprietà quando si seleziona un fatto in Esplora fatti.
Importante
Se si sceglie di usare il campo ID istanza, assicurarsi di modificarne il valore prima di trascinare un fatto o un membro in una regola.
Quando si usa il campo ID istanza, la regola viene ricompilata. Per gli argomenti della regola che usano l'istanza Son della classe FamilyMember, modificare il valore ID istanza dal valore predefinito 0 a 1. Quando si modifica il valore di ID istanza da 0 e si trascina il fatto o il membro nell'Editor regole, il valore id istanza viene visualizzato nella regola seguente, ad esempio:
IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))
Si supponga ora che nel motore venga asserta un'istanza padre e un'istanza figlio . Il motore valuta la regola rispetto alle varie combinazioni di queste istanze. Supponendo che l'istanza padre e figlio abbiano lo stesso cognome, l'istanza figlio viene aggiunta all'istanza padre come previsto.
Nota
Il campo ID istanza viene usato solo all'interno del contesto di una valutazione di una regola specifica. Questo campo non è affisso a un'istanza dell'oggetto nell'esecuzione del set di regole e non è correlato all'ordine usato per l'asserzione degli oggetti. Ogni istanza dell'oggetto viene valutata in tutti gli argomenti della regola per quel tipo.