自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解WF4.0中工作流設(shè)計器的配置與使用

開發(fā) 后端
本文將對大家講解的是WF4.0中工作流設(shè)計器的配置與使用,希望對大家了解WF 4.0 Beta有所幫助。

本文將為大家討論的是WF4.0中工作流設(shè)計器的配置與使用,希望本文能讓大家在WF的開發(fā)工作中能更加得心應(yīng)手。

#T#

在WF3.0里面,就能將工作流設(shè)計器宿主到你自己的應(yīng)用程序中,但是除了做一些基本的操作,做一些復(fù)雜的操作將非常的難。

在WF4.0中應(yīng)用移植性變得更好,只需200行代碼就能創(chuàng)建一個功能完全也非常有用的工作流設(shè)計器。WF 4.0中新增加的工作流服務(wù)功能,可以直接把工作流發(fā)布為WCF服務(wù),當(dāng)然工作流也必須設(shè)計為具有WCF應(yīng)答功能才行。4.0提供4個與WCF相關(guān)的活動:Receive、ReceiveReply、Send、SendReply,通過這些活動可以可視化定義WCF的服務(wù)操作。
 

工作流設(shè)計器

WorkflowDesigner

WorkflowDesigner是工作流設(shè)計器運(yùn)行的主類。它通過View屬性給出了實(shí)際的設(shè)計界面。通過PropertyInspectorView屬性給出了相關(guān)屬性。如果宿主在WPF中,這兩個屬性準(zhǔn)備給WPF UIElement使用,很容易將他們添加到表單上。加載和保存一個工作流也非常容易,需要Load() 和 Save()函數(shù),它們需要使用一個XAML文件做參數(shù)。部分代碼如下:

  1. _workflowDesigner = new WorkflowDesigner();  
  2. _workflowDesigner.Load(_fileName);  
  3. var view = _workflowDesigner.View;  
  4. Grid.SetColumn(view, 1);  
  5. Grid.SetRow(view, 1);  
  6. LayoutGrid.Children.Add(view);  
  7. var propInspector = _workflowDesigner.PropertyInspectorView;  
  8. Grid.SetColumn(propInspector, 2);  
  9. Grid.SetRow(propInspector, 1);  
  10. LayoutGrid.Children.Add(propInspector);  
  11. DesignerMetadata: 
另外一件需要做的事情是注冊流程活動設(shè)計的metadata;它只是一個簡單的調(diào)用,但是如果舍棄它,就意味著所有活動都只是一個收起的小圖像,也不可能擴(kuò)展。
 
 
  1. new DesignerMetadata().Register(); 
 

 將Activity顯示在工具欄上

左邊的工具欄使用另外一個標(biāo)準(zhǔn)的WPF控件:ToolboxControl。它也非常容易添加到WPF的表單上面。將Activity的類型添加ToolboxItemWrapper。這樣,不需要做其它工作,就能將Activity直接拖放到設(shè)計界面上。在下面的代碼只是通過掃描幾個程序集得到所有Activity類型,如果它是有效的Activity,我們就將它添加到工具欄上。

  1. var toolbox = new ToolboxControl();  
  2. var cat = new ToolboxCategory("Standard Activities");  
  3. var assemblies = new List<Assembly>();  
  4. assemblies.Add(typeof(Send).Assembly);  
  5. assemblies.Add(typeof(Delay).Assembly);  
  6. assemblies.Add(typeof(ReceiveAndSendReplyFactory).Assembly);  
  7. var query = from asm in assemblies  
  8.             from type in asm.GetTypes()  
  9.             where type.IsPublic &&  
  10.             !type.IsNested &&  
  11.             !type.IsAbstract &&  
  12.             !type.ContainsGenericParameters &&  
  13.             (typeof(Activity).IsAssignableFrom(type) ||  
  14.             typeof(IActivityTemplateFactory).IsAssignableFrom(type))  
  15.             orderby type.Name  
  16.             select new ToolboxItemWrapper(type);  
  17. query.ToList().ForEach(ti => cat.Add(ti));  
  18. toolbox.Categories.Add(cat);  
  19. Grid.SetColumn(toolbox, 0);  
  20. Grid.SetRow(toolbox, 1);  
  21. LayoutGrid.Children.Add(toolbox); 

當(dāng)前的selection

在表單的頂部,我顯示當(dāng)前選擇的activity和它的父Activity。WorkflowDesigner有一個項(xiàng)目集合,里面有一組有用的對象。其中有一個就是Selection 對象,我們可以周期性地檢查此Selection,使用Subscribe()函數(shù)和在一個handler中傳遞,當(dāng)selection改變的時候就會觸發(fā),這樣可能更容易實(shí)現(xiàn)。

  1. _workflowDesigner.Context.Items.Subscribe<Selection>(SelectionChanged); 
 
 

Handler一樣也不復(fù)雜:

  1. private void SelectionChanged(Selection selection)  
  2. {  
  3.     var modelItem = selection.PrimarySelection;  
  4.     var sb = new StringBuilder();  
  5.     while (modelItem != null)  
  6.     {  
  7.         var displayName = modelItem.Properties["DisplayName"];  
  8.         if (displayName != null)  
  9.         {  
  10.             if (sb.Length > 0)  
  11.                 sb.Insert(0, " - ");  
  12.             sb.Insert(0, displayName.ComputedValue);  
  13.         }  
  14.         modelItem = modelItem.Parent;  
  15.     }  
  16.     CurrentActivityName.Text = sb.ToString();  

驗(yàn)證workflow

讓用戶知道設(shè)計的工作流是否有效是非常完美的事情。這也非常簡單,在WorkflowDesigner services中添加一個IValidationErrorService。在這個例子中,我在表單上添加一個listbox。讓IValidationErrorService將每項(xiàng)錯誤添加到ListBox項(xiàng)中。不需要去調(diào)用任何函數(shù),一旦工作流有改變,IValidationErrorService會被自動的調(diào)用。

  1. var validationErrorService = new ValidationErrorService(WorkflowErrors.Items);  
  2. _workflowDesigner.Context.Services.Publish<IValidationErrorService>(validationErrorService); 
 
IValidationErrorService由一個簡單的函數(shù)組成。將錯誤寫在一個參數(shù)列表中。
  1. public class ValidationErrorService : IValidationErrorService  
  2. {  
  3.     private IList _errorList;  
  4.     public ValidationErrorService(IList errorList)  
  5.     {  
  6.         _errorList = errorList;  
  7.     }  
  8.     public void ShowValidationErrors(IList<ValidationErrorInfo> errors)  
  9.     {  
  10.         _errorList.Clear();  
  11.         foreach (var error in errors)  
  12.         {  
  13.             _errorList.Add(error.Message);  
  14.         }  
  15.     }  
運(yùn)行workflow:
為了運(yùn)行工作流,我添加一些代碼,使用WorkflowApplication來運(yùn)行工作流。加載也非常容易,ActivityXamlServices.Load()需要傳遞一個文件來調(diào)用。它會返回一個DynamicActivity。
 
  1. var writer = new StringWriter();  
  2. var workflow = ActivityXamlServices.Load(_fileName);  
  3. var wa = new WorkflowApplication(workflow);  
  4. wa.Extensions.Add(writer);  
  5. wa.Completed = WorkflowCompleted;  
  6. wa.OnUnhandledException = WorkflowUnhandledException;  
  7. wa.Run(); 
 
 
 

原文標(biāo)題:WF4.0工作流設(shè)計器

 

鏈接:http://www.cnblogs.com/zhuqil/archive/2010/01/13/1646771.html

 

【責(zé)任編輯:彭凡 TEL:(010)68476606】

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-06-17 10:51:58

WF4.0規(guī)則引擎

2009-10-28 09:23:27

WF4.0 Beta2

2009-03-03 09:13:36

工作流BPM業(yè)務(wù)流程

2009-04-15 11:00:31

Workflow工作流角色

2009-10-30 09:04:18

WF4 Beta2

2010-01-14 14:12:14

Visual Stud

2010-02-01 09:19:32

WF 4.0

2009-06-22 09:36:06

WF 4.0 beta跟蹤配置

2009-11-18 09:14:49

Visual Stud

2017-04-05 10:06:59

工作流界面抽象組件

2015-07-14 09:26:28

微型工作流引擎設(shè)計

2021-10-14 11:34:05

技術(shù)工作流引擎

2020-08-06 08:26:22

Kubernetes架構(gòu)開發(fā)

2012-07-23 10:36:46

工作流

2023-01-04 08:02:16

工作流架構(gòu)設(shè)計

2020-08-06 08:16:26

Kubernetes架構(gòu)開源

2024-08-05 12:46:51

2009-07-16 10:41:40

WF 4.0 beta

2009-06-15 10:20:47

WF 4.0 Beta跟蹤機(jī)制

2023-08-02 18:48:23

Flowable工作流引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號