Workflow Reflection Utility-Beispiel

Download sample

Workflow Reflection Utility ist ein umfassendes Tool zum Extrahieren von Informationen, die sich auf den Workflow beziehen, aus einer Assembly. Die Hierarchie, die deklarativen Regeln und die erforderlichen lokalen Dienste für die einzelnen Workflows werden in einer Strukturansicht angezeigt. Hierdurch wird das Suchen in der Struktur des kompilierten Workflows vereinfacht. Darüber hinaus kann jeder Workflow in der Assembly als XAML im Editor oder in einer neu gehosteten Designeroberfläche angezeigt werden. Schließlich bietet eine ersetzungsbasierte deklarative Regelauswertung dem Benutzer eine Möglichkeit, eine "what if"-Analyse der enthaltenen Ausdrücke durchzuführen.

Verwenden des Beispiels

Gehen Sie folgendermaßen vor, um das Beispiel zu erstellen, auszuführen und zu konfigurieren.

So erstellen Sie das Beispiel

  1. Laden Sie das Beispiel herunter, indem Sie in diesem Thema auf Beispiel downloaden klicken.

    Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.

  2. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.

  3. Wechseln Sie zum Quellverzeichnis des Beispiels.

  4. Geben Sie an der Eingabeaufforderung MSBUILD <Name der Projektmappendatei> ein.

So führen Sie das Beispiel aus

  • Führen Sie im Eingabeaufforderungsfenster des SDKs die EXE-Datei im Ordner WorkflowReflectionUtility\bin\debug aus, der sich unter dem Hauptordner des Beispiels befindet.

So laden Sie eine Assembly in Workflow Reflection Utility

  1. Starten Sie das Programm WorkflowReflectionUtility.exe.

  2. Klicken Sie im Menü Datei auf Öffnen.

  3. Wählen Sie die Assembly mit dem Workflowinhalt, den Sie überprüfen möchten, und klicken Sie dann auf Öffnen.

  4. Wenn die Assembly geladen wurde, navigieren Sie durch die Strukturansicht, indem Sie die Knoten erweitern.

    Einige Knoten verfügen über Kontextmenüs. Ein Beispiel hierfür ist der WorkflowNode, der die Anzeige von XAML im Editor oder die Anzeige des Workflows in einer neu gehosteten Designeroberfläche ermöglicht.

Konfigurationsdatei

Workflow Reflection Utility wird durch eine Anwendungskonfigurationsdatei gesteuert. Die Datei enthält einen WorkflowReflectionUtilitySection-Abschnitt, mit dem eines oder mehrere ReflectionComponent-Objekte zur Komponentenauflistung hinzugefügt werden. Wenn die Konfigurationsdatei fehlt, verwendet das Dienstprogramm stattdessen eine hartcodierte, programmgesteuerte Version der Standardkonfigurationsdatei.

Standardmäßig ist Workflow Reflection Utility so konfiguriert, dass alle in der Assembly enthaltenen Workflows angezeigt werden. Für jeden Workflow werden alle deklarativen Regeln, alle verwendeten DataExchangeService-Schnittstellen und die Aktivitätshierarchie angezeigt. Über das Kontextmenü der Strukturansichtsknoten der deklarativen Regeln kann auf die ersetzungsbasierte Regelausdrucksauswertung zugegriffen werden. Sie können auf die XAML- und Designeransichten zugreifen, indem Sie mit der rechten Maustaste auf das Kontextmenü für die Workflowstrukturknoten zugreifen.

Standardkonfiguration

Die Standardkonfiguration lautet wie folgt:

<configuration>
    <configSections>
        <section name="WorkflowReflectionUtilitySettings" type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowReflectionUtilitySection, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </configSections>
    <WorkflowReflectionUtilitySettings showAssemblyResolveExplanation="true">
        <components>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.XomlContextMenuComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RequiredServiceInterfacesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleEvaluatorComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowDesignerViewComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowActivitiesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        </components>
    </WorkflowReflectionUtilitySettings>
</configuration>

Erweiterbarkeit

Workflow Reflection Utility ist auf Erweiterbarkeit ausgelegt. Um dem Tool weitere Funktionen hinzuzufügen, müssen Sie eine neue Komponente hinzufügen, die von der WorkflowReflectionComponent abgeleitet wird, die zwei abstrakte Methoden beinhaltet:

public abstract void Initialize(InitializationContext context);
public abstract void PerformReflection(ReflectionContext context);

Initialize-Methode

Die Initialize-Methode wird beim Starten des Dienstprogramms aufgerufen. Sie ermöglicht der Komponente, sich selbst so zu konfigurieren, dass sie zum Zeitpunkt der Reflektion ausgeführt wird. InitializationContext.AddChild wird verwendet, um die aktuelle Komponente als untergeordnetes Element eines beliebigen bereits vorhandenen Komponententyps hinzuzufügen. Nach der Initialisierung erstellen Aufrufe dieser Methode eine Struktur der Komponenten, die die Schritte darstellt, die zum Durchführen der Reflektion für die Assembly ausgeführt wurden. So fügt beispielsweise AssemblyComponent sich selbst als untergeordnetes Element zu RootComponent hinzu, und WorkflowComponent fügt sich selbst als untergeordnetes Element von AssemblyComponent hinzu. Hierdurch wird zum Zeitpunkt der Reflektion die folgende Aufrufstruktur erstellt: Stamm > Assembly > Workflow. Die Anzahl der untergeordneten Elemente, über die eine Komponente verfügen kann, ist nicht beschränkt. Es gibt auch keine Beschränkung der Anzahl an übergeordneten Elementen, zu denen eine untergeordnete Komponente hinzugefügt werden kann.

InitializationContext.AddImage wird verwendet, um ein Bild zu der Liste von Bildern hinzuzufügen, die in der Strukturansicht angezeigt werden können. Jedes Bild wird basierend auf Besitzertyp und einem Zeichenfolgennamen zwischengespeichert. Diese beiden Werte werden als Schlüssel zum Abrufen des ImageList-Index für das Bild zum Zeitpunkt der Reflektion verwendet.

PerformReflection-Methode

Die PerformReflection-Methode wird zum Ausführen der eigentlichen Arbeit beim Laden einer Assembly verwendet. Der ReflectionContext stellt der Komponente Accessoren für die Assembly, den aktuellen Strukturknoten und die gesamte Strukturansicht bereit. Darüber hinaus stellt der ReflectionContext Methoden zum Abrufen aller untergeordneten Komponenten, zum Abrufen von zuvor zwischengespeicherten Bildindizes und zum Erstellen eines geklonten Kontexts zur Verfügung.

Sehen Sie sich als Beispiel die RuleComponent an. Die RuleComponent fügt sich selbst als untergeordnetes Element zur WorkflowComponent hinzu und fügt zum Zeitpunkt der Initialisierung ein zwischengespeichertes Bild hinzu. Zum Zeitpunkt der Reflektion greift die Komponente auf den aktuellen Strukturknoten zu (wobei es sich um einen WorkflowNode handelt), um den Workflowtyp abzurufen. Sie reflektiert dann für diesen Typ, um alle deklarativen Regeln zu ermitteln und jeweils Knoten für diese Regeln hinzuzufügen. Für jeden hinzugefügten Knoten wird die WorkflowReflectionComponent.InvokeChildComponents-Methode mit einem geklonten ReflectionContext, der den neu hinzugefügten Regelknoten enthält, aufgerufen.

Dieses allgemeine Muster kann verwendet werden, um Knoten Kontextmenüs hinzuzufügen, den Text für Knoten zu ändern, Knoten neu zu organisieren und untergeordnete Knoten hinzuzufügen. Beispiele und weitere Informationen hierzu finden Sie in der Datei OutOfBoxComponents.cs.

Konfigurieren der neuen Komponente

Neue Komponenten müssen zur Konfigurationsdatei hinzugefügt werden, damit sie ausgeführt werden können. Informationen zur vollständigen Struktur der Konfigurationsdatei finden Sie im Abschnitt "Konfigurationsdatei" in diesem Thema.

Der neue Komponentenknoten sieht wie folgt aus:

<add type="[AssemblyQualifiedName of component]"/>

Beispiel:

<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

Siehe auch

Weitere Ressourcen

Anwendungsbeispiele
Windows Workflow Foundation-Beispiele

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.