工作流程反映公用程式範例

Download sample

工作流程反映公用程式是用來擷取組件中的工作流程相關資訊的可擴充工具。每一個工作流程的階層、宣告式規則及必要的本機服務都會顯示在樹狀檢視中,如此可讓您輕鬆瀏覽已編譯之工作流程的結構。此外,組件中的每個工作流程都可以在 [記事本] 當做 XAML 進行檢視,或是在重新裝載的設計工具介面上進行檢視。最後,替換架構的宣告式規則評估工具會提供方法,讓使用者能夠進行所含運算式的 "what if" 分析。

使用範例

依照以下步驟來建置、執行和設定範例。

若要建置範例

  1. 按一下此主題中的 [下載範例] 來下載範例。

    這樣便會將範例專案擷取到本機硬碟上。

  2. 按一下 [開始],並依序指向 [程式集] 和 [Microsoft Windows SDK],再按一下 [CMD 殼層]。

  3. 移至範例的來源目錄。

  4. 在命令提示字元上,輸入 MSBUILD <Solution file name>

執行範例

  • 在 [SDK 命令提示字元] 視窗中,執行 WorkflowReflectionUtility\bin\debug 資料夾中的 .exe 檔案,該資料夾位於此範例的主要資料夾下方。

若要將組件載入到工作流程反映公用程式中:

  1. 啟動 WorkflowReflectionUtility.exe 程式。

  2. 在 [檔案] 功能表上選取 [開啟]。

  3. 選取包含所要瀏覽之工作流程內容的組件,然後按一下 [開啟]。

  4. 當組件載入時,展開各節點來瀏覽整個樹狀檢視。

    有些節點具有即時線上功能表。其中一個例子是 WorkflowNode,這個節點支援在 [記事本] 中檢視 XAML,或是在重新裝載的設計介面上檢視工作流程。

組態檔

工作流程反映公用程式會由應用程式組態檔控制。這個檔案包含 WorkflowReflectionUtilitySection,這個區段會將一個或多個 ReflectionComponent 物件新增到元件集合中。如果遺失這個組態檔,公用程式便會回到硬式編碼且為程式設計版本的預設組態檔。

根據預設,工作流程反映公用程式會設定為顯示包含於組件中的所有工作流程。對於每個工作流程,它都會顯示所有的宣告式規則、任何所使用的 DataExchangeService 介面,以及活動階層架構。透過宣告式規則樹狀節點的按滑鼠右鍵快顯功能表,即可存取替換架構的規則運算式評估工具。您也可以使用工作流程樹狀節點的按滑鼠右鍵快顯功能表,來存取 XAML 和設計工具檢視。

預設的組態

預設組態如下所示:

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

擴充性

工作流程反映公用程式是設計成可提供擴充性。若要將更多功能新增到工具中,您必須新增從含有兩個抽象方法的 WorkflowReflectionComponent 所衍生的元件:

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

Initialize 方法

Initialize 方法會在公用程式啟動時呼叫。此方法可以讓元件將自己設定成執行於反映時間。InitializationContext.AddChild 則是用來將目前的元件新增為某些現有元件類型的子系。在初始化之後,對這個方法的呼叫會建置元件的樹狀結構,而這個結構會呈現用來在組件上執行反映的步驟。例如,AssemblyComponent 會將自己新增為 RootComponent 的子系,WorkflowComponent 則會將自己新增為 AssemblyComponent 的子系。這樣便會建立下列在反映時間的呼叫結構:根 > 組件 > 工作流程。元件可以包含的子系數目並無任何限制。特定子系元件對於自己可加入其中的父系數目也沒有任何限制。

InitializationContext.AddImage 可用來將影像新增至可顯示於樹狀檢視中的一個清單。每個影像都會根據擁有者類型和字串名稱來進行快取。當擷取反映時間影像的 ImageList 索引時,便會使用這兩個值來做為索引鍵。

PerformReflection 方法

PerformReflection 方法會用來執行當載入元件時的實際工作。ReflectionContext 會向元件提供組件的存取子、目前的樹狀節點,以及整個樹狀檢視。此外,ReflectionContext 還會提供方法來取得所有子元件、取得先前快取的影像索引,以及建立複製的內容。

讓我們以 RuleComponent 來示範說明。RuleComponent 會將自己新增成為 WorkflowComponent 的子系,以及新增在初始化時間快取的影像。在反映時間,元件會存取目前樹狀節點 (在範例中是 WorkflowNode) 以取得工作流程類型。接著,元件就會反映於此類型,並尋找所有的宣告式規則以及新增每條規則的節點。對於所新增的每個節點,元件都會使用包含新增規則節點的複製 ReflectionContext 來呼叫 WorkflowReflectionComponent.InvokeChildComponents 方法。

這種一般模式可以用來將內容功能表新增至節點、變更節點的文字、重新組織節點,以及新增子節點。如需範例和詳細資訊,請參閱 OutOfBoxComponents.cs 檔案。

設定新元件

新元件都必須新增到組態檔中才能執行。如需組態檔的完整結構,請參閱本主題中的「組態檔」一節。

新的元件節點類似下列所示:

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

例如:

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

請參閱

其他資源

應用程式範例
Windows Workflow Foundation 範例

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.