成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

#T#

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

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

工作流設計器

WorkflowDesigner

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

  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: 
另外一件需要做的事情是注冊流程活動設計的metadata;它只是一個簡單的調用,但是如果舍棄它,就意味著所有活動都只是一個收起的小圖像,也不可能擴展。
 
 
  1. new DesignerMetadata().Register(); 
 

 將Activity顯示在工具欄上

左邊的工具欄使用另外一個標準的WPF控件:ToolboxControl。它也非常容易添加到WPF的表單上面。將Activity的類型添加ToolboxItemWrapper。這樣,不需要做其它工作,就能將Activity直接拖放到設計界面上。在下面的代碼只是通過掃描幾個程序集得到所有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); 

當前的selection

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

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

Handler一樣也不復雜:

  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();  

驗證workflow

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

  1. var validationErrorService = new ValidationErrorService(WorkflowErrors.Items);  
  2. _workflowDesigner.Context.Services.Publish<IValidationErrorService>(validationErrorService); 
 
IValidationErrorService由一個簡單的函數組成。將錯誤寫在一個參數列表中。
  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.     }  
運行workflow:
為了運行工作流,我添加一些代碼,使用WorkflowApplication來運行工作流。加載也非常容易,ActivityXamlServices.Load()需要傳遞一個文件來調用。它會返回一個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(); 
 
 
 

原文標題:WF4.0工作流設計器

 

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

 

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

責任編輯:彭凡 來源: 博客園
相關推薦

2009-06-17 10:51:58

WF4.0規則引擎

2009-10-28 09:23:27

WF4.0 Beta2

2009-03-03 09:13:36

工作流BPM業務流程

2009-04-15 11:00:31

Workflow工作流角色

2010-01-14 14:12:14

Visual Stud

2010-02-01 09:19:32

WF 4.0

2009-10-30 09:04:18

WF4 Beta2

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

微型工作流引擎設計

2021-10-14 11:34:05

技術工作流引擎

2020-08-06 08:26:22

Kubernetes架構開發

2020-08-06 08:16:26

Kubernetes架構開源

2012-07-23 10:36:46

工作流

2023-01-04 08:02:16

工作流架構設計

2009-07-16 10:41:40

WF 4.0 beta

2009-06-15 10:20:47

WF 4.0 Beta跟蹤機制

2024-08-05 12:46:51

2021-03-12 06:44:09

Argo Workfl開源項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人午夜精品 | 久久久久久色 | 国产精品视频免费观看 | 免费播放一级片 | av在线免费观看网站 | 日本三级线观看 视频 | 国产精品久久久久久一区二区三区 | 激情一区二区三区 | 日韩欧美网 | 亚洲国产精品成人 | 日韩高清中文字幕 | 久久精品二区亚洲w码 | 国产精品久久久久久久久图文区 | a免费视频| 国内精品久久久久 | 国产乱码久久久 | 日韩视频一区 | 精品欧美一区免费观看α√ | 国产精品视频偷伦精品视频 | 999观看免费高清www | 日本人和亚洲人zjzjhd | 欧美涩| 国产一区二区三区久久久久久久久 | 久久久久国产精品午夜一区 | 亚洲精品9999久久久久 | 欧美一级大片 | 久草综合在线视频 | 一级在线免费观看 | 亚洲一区二区综合 | 色片在线观看 | 成人在线视频一区二区三区 | 国产在线网址 | 国产精品99久久久久久动医院 | 欧美精品综合在线 | 国产精品不卡一区 | 精品成人在线视频 | 午夜视频在线播放 | 日本久久黄色 | 国产第一页在线观看 | 在线免费看91 | 毛色毛片免费看 |