Teilen über


Erstellen von Faktenerstellern und -abrufern zur Verwendung mit Regeln und Regelsätzen (Vorschau)

Gilt für: Azure Logic Apps (Standard)

Wichtig

Diese Funktion befindet sich in der Vorschauphase und unterliegt den Zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauversionen.

Um Fakten für die Regel-Engine zu erstellen, die während der Entwicklung und Tests von Geschäftsregeln verwendet werden sollen, können Sie einen Faktenersteller erstellen, der Ihrer Engine ein Array von .NET-Objekten bereitstellt. Sie können außerdem einen Faktenersteller erstellen, der langfristige oder sich langsam verändernde Fakten zur Auswertung während der Ausführung in Ihre Regeln einfügt.

In dieser Schrittanleitung wird veranschaulicht, wie Sie einen Faktenersteller und einen Faktenabrufer für Ihr Regel-Engine-Projekt in Azure Logic Apps erstellen.

Erstellen eines Faktenerstellers

Um Ihre Fakteninstanzen zu erstellen, implementieren Sie die Schnittstelle IFactCreator und ihre Methoden CreateFacts und GetFactTypes. Nachdem Sie die .NET-Assembly (DLL-Datei) für Ihren ersten Faktenersteller erstellt haben, können Sie in Microsoft Rules Composer die Assembly aus der Testfunktion des Regelsatzes auswählen. Weitere Informationen finden Sie unter Testregelsätze.

Das folgende Beispiel veranschaulicht eine Beispielimplementierung für einen Faktenersteller:

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;
    }
}

Erstellen eines Faktenabrufers

Ein Faktenabrufer ist ein .NET-Objekt, das Standardmethoden implementiert und diese üblicherweise verwendet, um der Regel-Engine langfristige und sich langsam verändernde Fakten bereitzustellen, bevor die Engine den Regelsatz ausführt. Diese Fakten werden durch die Engine zwischengespeichert und in mehreren Ausführungszyklen verwendet. Der Faktenabrufer übermittelt beim ersten Mal die Fakten und aktualisiert die Fakten anschließend lediglich bei Bedarf im Arbeitsspeicher. Erstellen Sie einen Faktenabrufer, der die Fakten beim ersten Mal übermittelt und die Fakten anschließend lediglich bei Bedarf im Arbeitsspeicher aktualisiert, anstatt bei jedem Aufruf der Regel-Engine ein Fakt zu übermitteln.

Implementieren Sie die IFactRetriever-Schnittstelle und die UpdateFacts-Methode, um Ihrer Regel-Engine Fakten bereitzustellen. Anschließend können Sie die Version Ihres Regelsatzes so einrichten, dass diese Implementierung verwendet wird, um Fakten zur Laufzeit bereitzustellen. Die Version Ihres Regelsatzes ruft daraufhin bei jedem Ausführungszyklus die UpdateFacts-Methode auf.

Optional können Sie die IFactRemover-Schnittstelle für eine Komponente des Faktenabrufers implementieren. Die Regel-Engine kann anschließend die UpdateFactsAfterExecution-Methode aus der IFactRemover-Schnittstelle aufrufen, wenn der Regelsatz verworfen wird. Dadurch können Sie alle Aktionen nach der Ausführung durchführen – beispielsweise das Committen von Datenbankänderungen oder das Zurückziehen von Objektinstanzen aus dem Arbeitsspeicher der Regel-Engine.

Sie können Ihren Faktenabrufer mit der erforderlichen anwendungsspezifischen Logik entwerfen, damit dieser die folgenden Aufgaben ausführt:

  1. Herstellen einer Verbindung mit den erforderlichen Datenquellen

  2. Einfügen der Daten als langfristige Fakten in die Engine

  3. Angeben der Logik zum Aktualisieren der neuen Instanzen für langfristige Fakten in der Engine oder zum Einfügen dieser Instanzen in die Engine

    Die Engine verwendet in nachfolgenden Ausführungszyklen zunächst die eingefügten und zwischengespeicherten Werte, bis diese Werte aktualisiert werden.

Die Implementierung des Faktenabrufers gibt ein Objekt zurück, das einem Token entspricht, das der Abrufer mit dem factsHandleIn-Objekt verwenden kann, um zu bestimmen, ob vorhandene Fakten aktualisiert oder neue Fakten eingefügt werden sollen. Wenn eine Version des Regelsatzes den Faktenabrufer zum ersten Mal aufruft, wird das factsHandleIn-Objekt immer auf NULL festgelegt. Das Objekt übernimmt jedoch den Wert des Rückgabeobjekts, nachdem der Faktenabrufer die Ausführung abgeschlossen hat.

Der folgende Beispielcode veranschaulicht, wie .NET- und XML-Fakten mithilfe der Implementierung eines Faktenabrufers eingefügt werden:

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;
        }
    }
}

Schreiben Sie Ihre eigene Codeimplementierung, um die folgenden Funktionalitäten einzuschließen:

  • Bestimmen, wann die langfristigen Fakten aktualisiert werden sollen

  • Nachverfolgen, welche Regel-Engine-Instanz welche langfristigen Fakten verwendet

Angeben eines Faktenabrufers für einen Regelsatz

Um den Faktenabrufer für die Version Ihres Regelsatzes einzurichten, können Sie die Eigenschaft für den Faktenabrufer in Microsoft Rules Composer festlegen oder ihren eigenen Code schreiben. Dieser Code wird im folgenden Beispiel veranschaulicht und verwendet in der Assembly mit dem Namen „MyAssembly“ eine Klasse mit dem Namen „MyFactRetriever“:

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;

Hinweis

Wenn Sie als ersten Parameter für den RuleEngineComponentConfiguration-Konstruktor einen einfachen generischen Namen für die Assembly wie „MyAssembly“ verwenden, sucht die Regel-Engine im Anwendungsordner nach der Assembly.