日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
詳解WF4.0中工作流設(shè)計(jì)器的配置與使用

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

成都創(chuàng)新互聯(lián)專(zhuān)注于萬(wàn)安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。萬(wàn)安網(wǎng)站建設(shè)公司,為萬(wàn)安等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

#T#

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

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

WorkflowDesigner

WorkflowDesigner是工作流設(shè)計(jì)器運(yùn)行的主類(lèi)。它通過(guò)View屬性給出了實(shí)際的設(shè)計(jì)界面。通過(guò)PropertyInspectorView屬性給出了相關(guān)屬性。如果宿主在WPF中,這兩個(gè)屬性準(zhǔn)備給WPF UIElement使用,很容易將他們添加到表單上。加載和保存一個(gè)工作流也非常容易,需要Load() 和 Save()函數(shù),它們需要使用一個(gè)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: 

另外一件需要做的事情是注冊(cè)流程活動(dòng)設(shè)計(jì)的metadata;它只是一個(gè)簡(jiǎn)單的調(diào)用,但是如果舍棄它,就意味著所有活動(dòng)都只是一個(gè)收起的小圖像,也不可能擴(kuò)展。    

 
 
 
 
  1. new DesignerMetadata().Register(); 

 

 將Activity顯示在工具欄上

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

 
 
 
 
  1. var toolbox = new ToolboxControl();  
  2. var cat = new ToolboxCategory("Standard Activities");  
  3. var assemblies = new List();  
  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有一個(gè)項(xiàng)目集合,里面有一組有用的對(duì)象。其中有一個(gè)就是Selection 對(duì)象,我們可以周期性地檢查此Selection,使用Subscribe()函數(shù)和在一個(gè)handler中傳遞,當(dāng)selection改變的時(shí)候就會(huì)觸發(fā),這樣可能更容易實(shí)現(xiàn)。

 
 
 
 
  1. _workflowDesigner.Context.Items.Subscribe(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

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

 
 
 
 
  1. var validationErrorService = new ValidationErrorService(WorkflowErrors.Items);  
  2. _workflowDesigner.Context.Services.Publish(validationErrorService); 

  IValidationErrorService由一個(gè)簡(jiǎn)單的函數(shù)組成。將錯(cuò)誤寫(xiě)在一個(gè)參數(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 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來(lái)運(yùn)行工作流。加載也非常容易,ActivityXamlServices.Load()需要傳遞一個(gè)文件來(lái)調(diào)用。它會(huì)返回一個(gè)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(); 

     


網(wǎng)站名稱(chēng):詳解WF4.0中工作流設(shè)計(jì)器的配置與使用
分享路徑:http://www.5511xx.com/article/cogchgh.html