Condividi tramite


Creare funzioni di creazione e recupero fact da utilizzare con regole e insiemi di regole

Si applica: Azure Logic Apps (Standard)

Per creare fatti per il motore di regole da usare durante lo sviluppo e il test delle regole aziendali, si può costruire un creatore di fatti, che fornisce al motore una matrice di oggetti .NET. È anche possibile creare un recuperatore di fatti che inserisce fatti a lungo termine o che cambiano lentamente nelle regole di valutazione durante l'esecuzione.

Questa guida illustra come creare funzioni di creazione e recupero fact da utilizzare nel proprio progetto del motore di regole di App per la logica di Azure.

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 generatore 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 di un creatore 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 funzioni di recupero fact

Un recuperatore di fatti è un oggetto .NET che implementa i metodi standard e li usa in genere per fornire al motore di regole fatti a lungo termine e fatti che cambiano lentamente, prima che il motore esegua il 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. Piuttosto che inviare un fatto ogni volta che si invoca il motore di regole, crea un modulo di recupero dei fatti che invia il fatto la prima volta e poi aggiorna il fatto in memoria solo quando necessario.

Per fornire istanze dei fatti al motore di regole, implementare l'interfaccia IFactRetriever e il metodo UpdateFacts. È quindi possibile configurare la versione del set di regole per usare questa implementazione per introdurre fact 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 operazioni di post-esecuzione, come confermare eventuali modifiche al database o ritirare istanze di oggetti dalla memoria di lavoro del motore di regole.

È possibile progettare la funzione di recupero fact con la logica necessaria specifica dell'applicazione per svolgere le attività seguenti:

  1. Connettersi alle origini dati necessarie.

  2. Inserire i dati come fatti a lungo termine nel motore di elaborazione.

  3. Specificare la logica per aggiornare o introdurre nuove istanze di 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 delle regole chiama il recuperatore di fatti per la prima volta, l'oggetto factsHandleIn viene sempre impostato su null, ma assume il valore dell'oggetto restituito al termine dell'esecuzione.

Il codice di esempio seguente mostra come verificare i fatti .NET e i fatti XML usando un'implementazione del recuperatore 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.

  • Identificare quale istanza del motore di regole utilizza quali dati persistenti.

Specificare un estrattore di fatti per un insieme 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.