Teilen über


Ausführen erweiterter Aufgaben für Regelsätze mit Microsoft Rules Composer (Preview)

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.

In diesem Leitfaden werden erweiterte Vorgänge beschrieben, die Sie für Regelsätze in Microsoft Rules Composer ausführen können.

Voraussetzungen

  • Das heruntergeladene und installierte Tool Microsoft Rules Composer

  • Die XML-Datei mit dem Regelsatz, an dem Sie arbeiten möchten

Kopieren einer Regelsatzversion

Sie können eine Kopie von einer bestehenden Regelsatzversion mit einer anderen Versionsnummer erstellen.

  1. Öffnen Sie Microsoft Rules Composer. Öffnen Sie im Fenster RuleSet Explorer (Regelsatz-Explorer) das Kontextmenü der betreffenden Regelsatzversion, und wählen Sie Kopieren aus.

  2. Öffnen Sie das Kontextmenü des Regelsatzes, und wählen Sie Paste RuleSet Version (Regelsatzversion kopieren) aus.

    Microsoft Rules Composer erstellt eine neue Regelsatzversion mit den gleichen Elementen wie in der kopierten Version, jedoch mit einer anderen Versionsnummer.

    Hinweis

    Wenn Sie die .NET-Assembly aktualisieren, die zum Bereitstellen von Fakten für Ihren Regelsatz verwendet wird, aktualisieren Sie unbedingt die Verweise auf dieses Assembly in Ihrer Regelsatzversion. Weitere Informationen finden Sie unter Aktualisieren von .NET-Assemblyverweisen.

Erstellen einer leeren Regelsatzversion

Nachdem Sie einer Regelsatzversion Regeln hinzugefügt haben, können Sie eine neue leere Regelsatzversion mit einer anderen Nummer erstellen und diese Version speichern, damit Sie später daran arbeiten können.

  1. Öffnen Sie Microsoft Rules Composer. Wählen Sie im Kontextmenü des Regelsatzes die Option Neue Version hinzufügen aus.

    Microsoft Rules Composer erstellt dann eine neue leere Regelsatzversion mit einer anderen Nummer.

  2. Öffnen Sie das Kontextmenü der neuen Regelsatzversion, und wählen Sie Speichern aus.

Sie können jetzt Regeln aus anderen Regelsatzversionen kopieren und in der neuen Version einfügen.

Weitergeben von Faktentypen an einen Regelsatz

Sie können zwar nicht direkt einen Rückgabetyp für einen Regelsatz angeben, aber Sie können einen der folgenden Faktentypen an den Regelsatz weitergeben, dafür sorgen, dass der Regelsatz den Wert des Fakts in true oder false ändert, und anschließend nach dem Ausführen des Regelsatzes den Wert der Eigenschaft oder des Elements bzw. der Spalte überprüfen:

  • Ein .NET-Objekt mit einer Eigenschaft mit dem Typ Boolean
  • Ein XML-Dokument mit einem Element mit dem Typ Boolean

Einrichten eines Faktenabrufers für einen Regelsatz

Wenn Sie einen Faktenabrufer mit Ihrem Regelsatz verwenden, können Sie Fakten, die sich nicht oft ändern, vor dem ersten Ausführungszyklus der Hostanwendung speichern. Auf diese Weise können Sie diese Fakten aus dem Speicher abrufen, einmal an die Regel-Engine zum Zwischenspeichern weitergeben und in mehreren Ausführungszyklen wiederverwenden. Weitere Informationen finden Sie unter Erstellen von Faktenerstellern und -abrufern.

Sie haben zwei Möglichkeiten, einen Faktenabrufer mit einem Regelsatz zu verknüpfen:

  • Wählen Sie manuell einen Faktenabrufer für eine Regelsatzversion in Microsoft Rules Composer aus.

  • Führen Sie die Verknüpfung programmgesteuert mithilfe des Objekts RuleSetExecutionConfiguration durch.

Hinweis

Sie können immer nur eine Faktenabruferimplementierung mit einer Regelsatzversion verknüpfen.

Manuelles Auswählen eines Faktenabrufers für einen Regelsatz

  1. Öffnen Sie Microsoft Rules Composer. Wählen Sie im Fenster RuleSet Explorer (Regelsatz-Explorer) die Regelsatzversion aus, die Sie mit dem Faktenabrufer verknüpfen möchten.

  2. Wählen Sie im Fenster Eigenschaften die Eigenschaftszeile FactRetriever aus und anschließend die Schaltfläche mit den Auslassungspunkten (), um nach einem bestehenden Faktenabruferobjekt zu suchen und dieses auszuwählen.

    Hinweis

    Die Schaltfläche mit den Auslassungspunkten (...) wird erst angezeigt, wenn Sie im Fenster Eigenschaften auf die Zeile FactRetriever klicken.

Aufrufen eines untergeordneten Regelsatzes in einem übergeordneten Regelsatz

Verwenden Sie für diese Aufgabe eine der folgenden Methoden:

  • Rufen Sie die Ruleset.Execute-Methode direkt im übergeordneten Regelsatz auf.

  • Rufen Sie im übergeordneten Regelsatz eine Methode einer .NET-Hilfskomponente auf, die die Ruleset.Execute-Methode umschließt.

    Mit der zweiten Methode können Sie Vor- und Nachverarbeitungscode zur Ruleset.Execute-Methode hinzufügen. Beispielsweise können Sie alle für den untergeordneten Regelsatz erforderlichen Fakten in dieser Wrappermethode erstellen. In den folgenden Abschnitten finden Sie für jede Methode ein Beispiel.

Rufen Sie die Ruleset.Execute-Methode direkt im übergeordneten Regelsatz auf.

Dieser Abschnitt enthält die allgemeinen Schritte zum Aufrufen des untergeordneten Regelsatzes mithilfe der Ruleset.Execute-Methode direkt im übergeordneten Regelsatz. Im folgenden Prozess werden die Schritte zum Hinzufügen der Ruleset.Execute-Methode zum übergeordneten Regelsatz als eine Aktion gezeigt, die ein XML-Dokument als Fakt an den untergeordneten Regelsatz weitergibt.

Hinweis

In diesem Beispielszenario wird ein XML-Dokument als Fakt an den übergeordneten Regelsatz übermittelt. Dieses Dokument wird als Fakt an den untergeordneten Regelsatz weitergegeben. Alternativ können Sie jedoch eine .NET-Methode aufrufen, die die Fakten für den untergeordneten Regelsatz erstellt.

  1. Öffnen Sie Microsoft Rules Composer. Klicken Sie im Fenster Facts Explorer (Fakten-Explorer) auf die Registerkarte .NET-Klassen.

  2. Öffnen Sie das Kontextmenü für .NET-Assemblys, und wählen Sie Durchsuchen aus.

  3. Wählen Sie in der Liste .NET-Assemblys die Assembly Microsoft.RuleEngine aus, und klicken Sie dann auf OK.

  4. Erweitern Sie den Abschnitt Regelsatz, und ziehen Sie entweder Execute(Object facts) oder Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) in den Bereich THEN.

  5. Wählen Sie den Knoten XML Schemas (XML-Schemas) aus, öffnen Sie das Kontextmenü für Schemas, und wählen Sie Durchsuchen aus.

  6. Wählen Sie das Schema für das XML-Dokument aus, das als Fakt weitergegeben werden soll, und klicken Sie dann auf Öffnen.

  7. Ziehen Sie zum Weitergeben des XML-Dokuments, das als Fakt an den untergeordneten Regelsatz weitergegeben wird, <Schemaname>.xsd zum ersten Argument in der Ruleset.Execute-Methode.

  8. Wenn Sie die Execute-Methode ohne IRuleSetTrackingInterceptor als zweites Argument verwenden, können Sie die folgenden Schritte überspringen.

  9. Wählen Sie die Registerkarte .NET-Klassen aus, und ziehen Sie DebugTrackingInterceptor in Microsoft.RuleEngine zum zweiten Argument der Ruleset.Execute-Methode.

    Hinweis

    Wenn Sie diese Aktion ausführen, muss der Client eine Instanz der Klasse DebugTrackingInterceptor als Fakt an den übergeordneten Regelsatz weitergeben, der diese Instanz dann als Fakt an den untergeordneten Regelsatz weitergibt. Alternativ können Sie den Konstruktor der Klasse DebugTrackingInterceptor ziehen, sodass die Instanz automatisch für Sie erstellt wird.

Ändern der Clientanwendung, die den übergeordneten Regelsatz aufruft

Der Client, der den übergeordneten Regelsatz aufruft, erstellt eine Instanz der Klasse Ruleset mit dem Namen des untergeordneten Regelsatzes als Parameter und gibt diese Instanz als Fakt zusammen mit anderen Fakten an den übergeordneten Regelsatz weiter. Der folgende Beispielcode veranschaulicht dieses Aktion:

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();

Wenn es sich bei dem Client um eine BizTalk-Orchestrierung handelt, müssen Sie möglicherweise den Code zum Erstellen von Fakten in eine Ausdruck-Form einfügen und die Fakten dann als Parameter an die Aufrufregeln-Form weitergeben.

Aufrufen einer .NET-Wrappermethode im übergeordneten Regelsatz

Im folgenden Abschnitt werden die allgemeinen Schritte zum Aufrufen einer .NET-Methode erläutert, die als Wrapper für den Aufruf der Ruleset.Execute-Methode im übergeordneten Regelsatz dient.

Erstellen der .NET-Hilfsklasse

  1. Erstellen Sie ein .NET-Klassenbibliotheksprojekt. Fügen Sie dem Projekt eine Klasse hinzu.

  2. Fügen Sie zum Beispiel eine statische Methode zum Aufrufen der Ruleset.Execute-Methode hinzu, um den Regelsatz aufzurufen, dessen Name als Parameter weitergegeben wird, wie im folgenden Beispielcode zu sehen:

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

    Der Client ruft den übergeordneten Regelsatz auf und der übergeordnete Regelsatz dann die Hilfsmethode, die den untergeordneten Regelsatz aufruft, z. B. wie im folgenden Beispielcode für den Client zu sehen:

    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();
    

    Hinweis

    Wenn es sich bei der Methode um eine Instanzmethode handelt, muss der Client eine Instanz der .NET-Hilfsklasse erstellen und diese Instanz als Fakt an den übergeordneten Regelsatz weitergeben.

Analysieren mehrerer Objekte vom selben Typ in einer Regel

In vielen Szenarios erstellen Sie eine Geschäftsregel für einen Typ und erwarten, dass jede Instanz des Typs, die an die Engine weitergegeben wird, von dieser separat analysiert und behandelt wird. In einigen Szenarios soll die Engine jedoch mehrere Instanzen vom selben Typ gleichzeitig analysieren. Die folgende Beispielregel verwendet beispielsweise mehrere Instanzen der Klasse FamilyMember:

IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)

Von der Regel werden mehrere FamilyMember-Instanzen identifiziert, wobei es sich bei der einen um Father und bei der anderen um Son handelt. Wenn die Instanzen über den Nachnamen miteinander verbunden sind, wird die Son-Instanz zu einer Sammlung von untergeordneten Elementen der Father-Instanz hinzugefügt. Wenn die Engine alle FamilyMember-Instanzen separat analysiert, wird die Regel nie ausgelöst, da FamilyMember in diesem Szenario nur über eine Rolle verfügt, entweder Father oder Son.

In diesem Szenario müssen Sie daher in der Regel angeben, dass die Engine mehrere Instanzen zusammen analysiert. Außerdem benötigen Sie eine Möglichkeit, in der Regel zwischen den Identitäten der einzelnen Instanzen zu unterscheiden. Sie können das Feld Instanz-ID verwenden, um diese Funktionalität bereitzustellen. Dieses Feld steht im Fenster Eigenschaften zur Verfügung, wenn Sie im Fenster Facts Explorer (Fakten-Explorer) einen Fakt auswählen.

Wichtig

Wenn Sie sich entschließen, das Feld Instanz-ID zu verwenden, ändern Sie unbedingt den Wert für das Feld, bevor Sie einen Fakt oder ein Mitglied in die Regel ziehen.

Wenn Sie das Feld Instanz-ID verwenden, wird die Regel neu erstellt. Ändern Sie für die Regelargumente, die die Son-Instanz der Klasse FamilyMember verwenden, den Wert für die Instanz-ID vom Standardwert 0 in 1. Wenn Sie den Wert für die Instanz-ID von 0 ändern und den Fakt oder das Mitglied in den Regel-Editor ziehen, wird der Wert für die Instanz-ID- in der Regel nach der Klasse angezeigt, z. B.:

IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))

Angenommen, eine Father-Instanz und eine Son-Instanz werden an die Engine weitergegeben. Die Engine wertet die Regel für die verschiedenen Kombinationen dieser Instanzen aus. Wenn die Father-Instanz und die Son-Instanz denselben Nachnamen haben, wird die Son-Instanz der Father-Instanz wie erwartet hinzugefügt.

Hinweis

Das Feld Instanz-ID wird nur im Kontext einer bestimmten Regelauswertung verwendet. Das Feld ist nicht während der gesamten Regelsatzausführung mit einer Objektinstanz verknüpft und hängt auch nicht mit der Reihenfolge der Weitergabe von Objekten zusammen. Jede Objektinstanz wird in allen Regelargumenten für diesen Typ ausgewertet.