程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF 4.0 beta1活動概覽(1):Procedural

WF 4.0 beta1活動概覽(1):Procedural

編輯:關於.NET

相比於WF 3.5,WF 4.0 beta1提供了大量開箱即用的活動,我們可以使用這些活動來創作工作流或者創建自定義活動。本文將會對這些活動做一個簡單快速的概覽,並介紹它們的關鍵特性。

活動是工作流程序的工作單元。在WF 4.0中,活動由簽名和正文組成。簽名是活動的公共參數的術語化定義,這些公共參數定義了活動的輸入和輸出數據流。而正文則是指活動的執行邏輯,此邏輯可以用其他活動聲明性地表示,也可以通過代碼來表示。

下面按照WF 4.0 beta1在Visual Studio 2010工具欄中的分類來簡單地介紹一下這些內置活動。

Procedural

程序性活動提供了一種模擬順序流控制的機制,我們已經在使用標准編程語言(比如C#、VB)的過程中對這種流控制非常熟悉了。程序性活動包含了可以用來表示順序行為的基本構造塊,覆蓋的方面包括流控制、對CLR對象的方法調用、集合維護以及錯誤處理。它還涉及了一些高端場景,比如並行活動、事務管理、補償、取消以及持久性。下表包含了Procedural分類中的所有活動。描述中的粗體字表示最重要的參數。

活動 描述 設計器外觀 集合管理 AddToCollection<T> 向Collection中添加 Item。   RemoveFromCollection<T> 將Item 從Collection中移除。 ClearCollection<T> 清空Collection,將其中存儲的所有子項都移除。 ExistsInCollection 驗證中Collection是否存在Item 。如果子項存在,活動的Result 參數就會被賦值為True。 流控制 If If活動會根據一個Boolean類型的表達式來執行一個子活動。

如果Boolean 表達式-Condition 計算為 True (並且配置了Then活動),就會計劃執行Then”活動。如果表達式計算為False(並且設置了Else活動),就會計算Else活動。 DoWhile 重復執行其 Body 直到 Condition 計算為 True。Body至少會執行一次。   ForEach / ForEach<T> ForEach活動包含一個Values 列表以及一個Body。在運行時,該列表會進行被循環,並且Body會為列表中的每一個值都執行一次。 Pick Pick活動在WF中提供了基於事件的流控制模型。 Pick唯一有效的子活動是PickBranches。

在Pick開始執行時,其Branches 的所有Trigger活動都會被計劃執行。當第一個Trigger完成了其計劃執行的相應Action活動之後,所有其他Trigger活動就都會被取消。 PickBranch PickBranch表示Pick活動的一個分支。它由Trigger 和Action組成。PickBranch 只能被添加到Pick活動中。 Sequence Sequence活動允許一個或多個 Activities按照順序執行。 Switch<T> Switch活動和c#的switch 語句很像。它包含一個Expression 和一組Cases (每個case都有一個鍵和一個活動)。當表達式計算完後,Switch活動就會查找匹配表達式結果的 Case,如果找到,就執行與該Case相關聯的活動。 While 當Boolean類型Condition 的計算為True時,While 活動就執行其 Body。 並行執行 Parallel Parallel活動允許它的子活動並行執行。它會在開始執行時計劃其Branches 集合中的每一個WorkflowElement的執行。當所有Branches都完成或其CompletionCondition 屬性計算為True時,它就會完成執行。   ParallelForEach /  ParallelForEach<T> ParallelForEach 活動會遍歷其Values集合並為該集合中的每一個元素都執行一個 Activity,它的執行方式和ForEach很像。主要的區別是嵌入的語句是以並行模式執行的。

就像Parallel活動那樣,ParallelForEach也有一個 CompletionCondition,所以 ParallelForEach 活動可以提前完成,條件是CompletionCondition返回True。 CompletionCondition會在每次迭代完成後進行計算。 錯誤處理 TryCatch TryCatch 活動類似於c#中的try..catch 結構:所有位於Try塊中的的活動都會被執行,如果發生了異常,就會計劃執行最為匹配的Catch 塊(如果沒有發現匹配的Catch,工作流就會被中斷)。所有Catch塊都位於一個名為Catches的集合中。

TryCatch活動還有一個Finally 塊,它會在Try(以及可能執行的Catch)之後執行。

關於未被處理的異常的提示:

TryCatch 提供了工作流級別的異常處理機制。當拋出未被處理的異常時,工作流就會被中斷,因此Finally塊也就不會被執行。此行為也和c#中的Try..Catch結構保持一致。 Catch<T> 表示用於 TryCatch活動中的一個Catch。如果Try元素中拋出了一個異常,TryCatch就會嘗試根據拋出異常的類型來尋找一個與之匹配的 Catch 元素。

Catch<T>只能用於TryCatch活動中。 Throw Throw 活動會在工作流中拋出一個異常。Throw 活動包含一個Exception 屬性,該屬性包含了將會在執行時拋出的異常。 實用工具 Assign Assign活動會將其Value 參數的值賦值給其To 參數。

這兩個參數的類型必須是兼容的。這種兼容性會在運行期間進行驗證。 Delay Delay活動,顧名思義,會將當前工作流的執行阻止一段時間,這段時間是由用戶通過其Duration參數指定的。延時過期後,工作流就會繼續執行。Delay的延時應該被設置為一個TimeSpan值。 InvokeMethod / InvokeMethod<T> InvokeMethod 是一個允許我們調用一個現有的CLR方法和靜態方法的活動。想要調用一個方法,我們所需要做的就是提供方法的所有者信息(靜態方法為TargetType ,實例方法為TargetObject )、 MethodName以及該方法的Parameters。

InvokeMethod支持下面幾種方法調用場景:

公共的實例方法和靜態方法

通過值或引用傳遞的參數

對參數數組的支持

對泛型參數的支持

異步方法調用 WriteLine 將文本輸出到配置好的輸出控制台中。

輸出到System.Console的背後:

WriteLine 有一個TextWriter 參數,它可以配置為不同的輸出。例如,我們可以將TextWriter屬性配置為發送文本到ASP.NET 頁面。如果沒有設置TextWriter ,就會選用其默認值-System Console。 高級(取消、補償、事務以及持久性) CancellationScope CancellationScope 活動包含兩個主要部分,Body 和 CancelHandler。Body包括正常執行的活動。如果活動被取消,就會執行CancelHandler。 CompensatableActivity CompensableActivity用來定義一個可能長期運行的活動,同時還會伴隨著 Compensation 和 Confirmation 邏輯。

Compensation 允許用戶指定執行糾正操作的活動,該活動將會在Body 成功完成之後執行。 Compensate Compensate用來顯式地調用CompensableActivity的補償處理程序。 Confirm Confirm用來顯式地調用CompensableActivity的確認處理程序。 Persist 持久化工作流實例。會根據執行中的WorkflowInstancethe (此活動不包含任何參數)的配置來完成工作流的持久性。 TransactionScopeActivity TransactionScopeActivity 提供了初始化新事務、構建事務處理環境(一個工作流執行屬性)以及在TransactionScope活動的Body 完成之後調用事務的完成操作。

TransactionScopeActivity 支持“要求”語義。如果已經有一個環境事務在使用中,否則就創建一個新的事務。

嵌套的事務范圍

TransactionScopeActivity 可以嵌套於另一個TransactionScopeActivity中。一個嵌套於另一個TransactionScopeActivity 中的TransactionScopeActivity 將會使用現有的事務。

本文到此暫時告一段落,下一篇文章我們接著來概覽WF 4.0 beta1提供的其他幾類活動:Flowchart、Messaging、PowerShell和Migration。

本文翻譯自:http://blogs.msdn.com/endpoint/archive/2009/05/29/a-tour-on-the-wf4-activity-palette.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved