Freigeben über


Aufrufen einer Richtlinie aus einer anderen Richtlinie

Sie können eine (untergeordnete) Richtlinie aus einer anderen (übergeordneten) Richtlinie mit einer der folgenden Methoden aufrufen:

  • Aufrufen der Policy.Execute-Methode direkt aus der übergeordneten Richtlinie

  • Aufrufen einer Methode einer .NET-Hilfskomponente, die die Policy.Execute-Methode aus der übergeordneten Richtlinie umschließt

    Der Vorteil der zweiten Methode besteht darin, dass Sie der Policy.Execute-Methode Vor- und Nachverarbeitungscode hinzufügen können. Sie können beispielsweise alle für die untergeordnete Richtlinie erforderlichen Fakten in der Wrappermethode erstellen. Im folgenden Abschnitt wird ein Beispiel für jede Methode dargestellt.

Direktes Aufrufen der Policy.Execute-Methode aus der übergeordneten Richtlinie.

In diesem Abschnitt werden die allgemeinen Schritte zum direkten Aufrufen der untergeordneten Richtlinie aus der übergeordneten Richtlinie mit der Policy.Execute-Methode beschrieben.

Hinzufügen der Policy.Execute-Aktion zur übergeordneten Richtlinie

Das folgende Verfahren enthält Schritte zum Hinzufügen der Policy.Execute-Methode als Aktion zur übergeordneten Richtlinie, die ein XML-Dokument als Fakt an die untergeordnete Richtlinie übergibt.

So fügen Sie die Policy.Execute-Methode als Aktion zu einer Richtlinie hinzu
  1. Klicken Sie im Fenster Fakten Explorer auf die Registerkarte .NET-Klassen.

  2. Klicken Sie mit der rechten Maustaste auf .NET-Assemblys, und klicken Sie dann auf Durchsuchen.

  3. Wählen Sie microsoft.RuleEngine aus der Liste .NET-Assemblys aus, und klicken Sie dann auf OK.

  4. Erweitern Sie Richtlinie.

  5. Ziehen Sie Execute(Object facts) or Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) in den THEN-Bereich.

  6. Klicken Sie auf den Knoten XML-Schemas .

    Hinweis

    In diesem Beispielszenario wird ein XML-Dokument, das als Fakt an die übergeordnete Richtlinie übermittelt wurde, als Fakt an die untergeordnete Richtlinie übergeben. Stattdessen können Sie eine .NET-Methode aufrufen, die die Fakten für die untergeordnete Richtlinie erstellt.

  7. Klicken Sie mit der rechten Maustaste auf Schemas, und klicken Sie dann auf Durchsuchen.

  8. Wählen Sie das Schema für das XML-Dokument aus, das Sie als Fakt übergeben möchten, und klicken Sie dann auf Öffnen.

  9. Ziehen Sie <Schemaname.xsd> auf das erste Argument der Policy.Execute-Methode , um das XML-Dokument, das an die übergeordnete Richtlinie übergeben wird, als Fakt an die untergeordnete Richtlinie zu übergeben.

  10. Wenn Sie die Execute-Methode verwenden, die nicht IRuleSetTrackingInterceptor als zweites Argument verwendet, überspringen Sie die folgenden Schritte.

  11. Klicken Sie auf die Registerkarte .NET-Klassen .

  12. Ziehen Sie DebugTrackingInterceptor in Microsoft.RuleEngine auf das zweite Argument der Policy.Execute-Methode .

    Hinweis

    Wenn Sie diese Aktion ausführen, muss der Client eine instance der DebugTrackingInterceptor-Klasse als Fakt an die übergeordnete Richtlinie übergeben, die wiederum die instance als Tatsache an die untergeordnete Richtlinie übergibt. Stattdessen können Sie den Konstruktor der DebugTrackingInterceptor-Klasse ziehen, sodass die instance automatisch für Sie erstellt wird.

Bearbeiten der Clientanwendung, von der aus die übergeordnete Richtlinie aufgerufen wird

Der Client, der die übergeordnete Richtlinie aufruft, erstellt eine instance der Policy-Klasse mit dem untergeordneten Richtliniennamen als Parameter und übergibt ihn zusammen mit anderen Fakten als Fakt an die übergeordnete Richtlinie. Der folgende Beispielcode veranschaulicht dieses Aktion:

DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");  
Policy policy = new Policy("ParentPolicy");  
object[] facts = new object[3];  
facts[0] = txd;  
facts[1] = new Policy("ChildPolicy");  
facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");  
policy.Execute(facts, dti);  
policy.Dispose();  

Wenn es sich beim Client um eine BizTalk-Orchestrierung handelt, müssen Sie möglicherweise den Code platzieren, um Fakten in einem Ausdrucks-Shape zu erstellen, und dann die Fakten als Parameter an das Shape Aufrufregeln übergeben.

Aufrufen einer .NET-Wrappermethode aus der übergeordneten Richtlinie

In diesem Abschnitt werden die allgemeinen Schritte zum Aufrufen einer .NET-Methode vorgestellt, die den Aufruf der Policy.Execute-Methode aus der übergeordneten Richtlinie umschließt.

Erstellen der .NET-Dienstprogrammklasse

So erstellen Sie die Dienstprogrammklasse
  1. Erstellen Sie ein .NET-Klassenbibliotheksprojekt, und fügen Sie diesem Projekt dann ein Klasse hinzu.

  2. Fügen Sie eine statische Methode hinzu, die die Policy.Execute-Methode aufruft, um die Richtlinie aufzurufen, deren Name als Parameter übergeben wird, wie im folgenden Beispielcode gezeigt:

    public static void Execute(string policyName, TypedXmlDocument txd)  
    {  
        DebugTrackingInterceptor dti = new   DebugTrackingInterceptor("PolicyTracking.txt");  
        Policy policy = new Policy("ParentPolicy");  
        object[] facts = new object[3];  
        facts[0] = txd;  
        facts[1] = new Policy("ChildPolicy");  
        facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");  
        policy.Execute(facts, dti);  
        policy.Dispose();  
    }   
    
  3. Stellen Sie sicher, dass der StaticSupport-Registrierungsschlüssel auf 1 oder 2 festgelegt ist. Weitere Informationen zum Registrierungsschlüssel finden Sie unter Aufrufen statischer Member einer Klasse.

    Hinweis

    Sie können statt einer statischen Methode auch eine Instanzmethode aufrufen. Beachten Sie beim Verwenden einer Instanzmethode, dass der Client eine Instanz der .NET-Hilfsklasse als Fakt an die übergeordnete Richtlinie übergeben muss.

Ändern der Clientanwendung

Der Client ruft die übergeordnete Richtlinie auf, und die übergeordnete Richtlinie ruft die Hilfsmethode auf, die die untergeordnete Richtlinie aufruft. Der Beispielcode für den Client sieht wie folgt aus:

facts[0] = txd;  
facts[1] = new PolicyExecutor(txd);  
//call the first or parent policy  
Policy policy = new Policy(policyName);  
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");  
policy.Execute(facts, dti);  
policy.Dispose();  

Hinweis

Wenn es sich bei der Methode um eine Instanzmethode handelt, muss der Client eine Instanz der .NET-Hilfsklasse erstellen und diese als Fakt an die übergeordnete Richtlinie übergeben.

Hinweis

Wenn es sich beim Client um eine BizTalk-Orchestrierung handelt, müssen Sie möglicherweise den Code platzieren, um Fakten in einem Ausdrucks-Shape zu erstellen, und dann die Fakten als Parameter an das Shape Aufrufregeln übergeben.