成人免费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:16:26

Kubernetes架構開源

2020-08-06 08:26:22

Kubernetes架構開發

2012-07-23 10:36:46

工作流

2023-01-04 08:02:16

工作流架構設計

2009-06-15 10:20:47

WF 4.0 Beta跟蹤機制

2009-07-16 10:41:40

WF 4.0 beta

2024-08-05 12:46:51

2021-03-12 06:44:09

Argo Workfl開源項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av免费观看在线 | 日韩久久成人 | 亚洲视频免费在线观看 | 国产成人99久久亚洲综合精品 | 天堂网色| 国户精品久久久久久久久久久不卡 | 999精品在线 | 在线男人天堂 | 91亚洲精品国偷拍自产在线观看 | aaaa一级毛片 | 91国内在线观看 | 日本精品一区二区三区在线观看视频 | 成人在线精品视频 | 日韩欧美在线不卡 | 国产成人免费视频网站视频社区 | 黄网免费看 | 女人毛片a毛片久久人人 | 中文字幕 欧美 日韩 | 日韩毛片播放 | 日韩在线中文字幕 | 毛片一区二区三区 | 国产欧美在线一区 | av在线视| 国产精品久久久久久久久久久新郎 | 国产在线不卡 | 亚洲午夜在线 | av永久免费 | 日韩精品专区在线影院重磅 | 国产精品伦理一区二区三区 | 黄色成人在线观看 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产成人精品午夜 | 国产精品视频免费观看 | 亚洲一区二区三区视频 | 精品av | 欧美性a视频 | 日日操操 | 亚洲欧美高清 | 一区欧美 | 自拍视频网 | 免费毛片www com cn |