在WF3.0裡面,就能将工作流設計器宿主到你自己的應用程式中,但是除了做一些基本的操作,做一些複雜的操作将非常的難。
在WF4.0中應用移植性變得更好,隻需200行代碼就能建立一個功能完全也非常有用的工作流設計器。
WorkflowDesigner
WorkflowDesigner是工作流設計器運作的主類。它通過View屬性給出了實際的設計界面。通過PropertyInspectorView屬性給出了相關屬性。如果宿主在WPF中,這兩個屬性準備給WPF UIElement使用,很容易将他們添加到表單上。加載和儲存一個工作流也非常容易,需要Load() 和 Save()函數,它們需要使用一個XAML檔案做參數。部分代碼如下:
代碼
DesignerMetadata:
另外一件需要做的事情是注冊流程活動設計的metadata;它隻是一個簡單的調用,但是如果舍棄它,就意味着所有活動都隻是一個收起的小圖像,也不可能擴充。
new DesignerMetadata().Register();
将Activity顯示在工具欄上
左邊的工具欄使用另外一個标準的WPF控件:ToolboxControl。它也非常容易添加到WPF的表單上面。将Activity的類型添加ToolboxItemWrapper。這樣,不需要做其它工作,就能将Activity直接拖放到設計界面上。在下面的代碼隻是通過掃描幾個程式集得到所有Activity類型,如果它是有效的Activity,我們就将它添加到工具欄上。
目前的selection
在表單的頂部,我顯示目前選擇的activity和它的父Activity。WorkflowDesigner有一個項目集合,裡面有一組有用的對象。其中有一個就是Selection 對象,我們可以周期性地檢查此Selection,使用Subscribe()函數和在一個handler中傳遞,當selection改變的時候就會觸發,這樣可能更容易實作。
_workflowDesigner.Context.Items.Subscribe<Selection>(SelectionChanged);
Handler一樣也不複雜:
驗證workflow
讓使用者知道設計的工作流是否有效是非常完美的事情。這也非常簡單,在WorkflowDesigner services中添加一個IValidationErrorService。在這個例子中,我在表單上添加一個listbox。讓IValidationErrorService将每項錯誤添加到ListBox項中。不需要去調用任何函數,一旦工作流有改變,IValidationErrorService會被自動的調用。
var validationErrorService = new ValidationErrorService(WorkflowErrors.Items);
_workflowDesigner.Context.Services.Publish<IValidationErrorService>(validationErrorService);
IValidationErrorService由一個簡單的函數組成。将錯誤寫在一個參數清單中。
運作workflow:
為了運作工作流,我添加一些代碼,使用WorkflowApplication來運作工作流。加載也非常容易,ActivityXamlServices.Load()需要傳遞一個檔案來調用。它會傳回一個DynamicActivity。
本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/01/13/Workflow-Designer.html,如需轉載請自行聯系原作者