WF4.0 基礎篇 (八) 控制流Activity
本節主要介紹IF, Switch<T>, While, DoWhile, ForEach<T> 的使用.
本文例子下載:
http://files.cnblogs.com/foundation/controlActivitySample.rar
本文例子說明
控制流Activity
IF 條件
類名 |
System.Activities.Statements.If |
檔案 |
System.Activities.dll |
結構說明 |
繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Condition]屬性的型別為[ System.Activities.InArgument<bool> ],可以接受一個結果為[bool]的表示式 [Then] 屬性 的型別為[System.Activities.Activity] [Else] 屬性 的型別為[System.Activities.Activity] |
功能說明 |
[Then] 屬性 Activity型別,如果[Condition]的表示式結果為[True],執行[Then]否則執行[Else] |
例:
1. 在流程中新增string變數[myVariable]
2. 新增[Assign]為變數[myVariable]賦值"wxd"
3. 新增[If],[Condition]的表示式為[ myVariable = "wxd" ]
4. 在[If]的[Then]中新增[WriteLine]列印[ "Then:" + myVariable ]
在[If]的[Else]中新增[WriteLine]列印[ "Else:" + myVariable ]
流程 |
|
宿主 |
WorkflowInvoker.Invoke(new IfWorkflow()); |
結果 |
Switch<T> 分支
類名 |
System.Activities.Statements.Switch<T> |
檔案 |
System.Activities.dll |
結構說明 |
繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Expression]屬性的型別為[System.Activities.InArgument<T>],是case的 表示式 [Default] 屬性 的型別為[System.Activities.Activity] [Cases] 屬性 的型別為[IDictionary<T, Activity>] |
功能說明 |
在新增[Switch<T>]時,需要為case 表示式 [Expression屬性] 指定型別 [Switch]會比效[Expression]的值與[Case集合]中每個分支值,如果有相等的就執行該分支,如果沒的相等的就執行[Default] [Switch]會自動檢查[Case集合]中是否有相同的分支條件 |
例:
1. 在流程中新增string變數[myVariable]
2. 新增[Assign]為變數[myVariable]賦值"wxwinter"
3. 新增[Switch],[Expression]的表示式型別為[string],內容為[ myVariable]
4. 在[Default]中新增[WriteLine]列印["Case Default :" + myVariable ]
新增[case],值為"wxd",在新新增的[case] 中新增[WriteLine]列印["Case wxd :" + myVariable]
新增[case],值為"lzm",在新新增的[case] 中新增[WriteLine]列印["Case lzm :" + myVariable]
流程 |
|
宿主 |
WorkflowInvoker.Invoke(new SwitchWorkflow()); |
結果 |
While 迴圈
類名 |
System.Activities.Statements.While |
檔案 |
System.Activities.dll |
結構說明 |
繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Variables] 屬性 的型別為[Collection<Variable>] [Condition]屬性 的型別為[Activity<bool>],可以接受一個結果為[bool]的表示式 [Body] 屬性 的型別為[System.Activities.Activity] |
功能說明 |
[While]中可以定義變數 當[Condition]條件為真時會執行[Body]中的內容 |
例:
1. 在流程中新增int變數[myVariable]
2. 新增[While],[Condition]的表示式為[myVariable<=10]
3. 在[While]的[Body]中新增[Assign],為變數[myVariable]賦值為 [myVariable + 1]
新增[WriteLine]列印變數[myVariable]的值
流程 |
|
宿主 |
WorkflowInvoker.Invoke(new WhileWorkflow()); |
結果 |
DoWhile 迴圈
類名 |
System.Activities.Statements.DoWhile |
檔案 |
System.Activities.dll |
結構說明 |
繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Variables] 屬性 的型別為[Collection<Variable>] [Condition]屬性 的型別為[Activity<bool>],可以接受一個結果為[bool]的表示式 [Body] 屬性 的型別為[System.Activities.Activity] |
功能說明 |
[DoWhile]中可以定義變數 當[Condition]條件為真時會執行[Body]中的內容, 當[Condition]條件為假時會執行[Body]中的內容一次 |
例:
1. 新增[DoWhile],[Condition]的表示式為[False]
2. 在[DoWhile]的[Body] 新增[WriteLine]列印"wxwinter"
流程 |
|
宿主 |
WorkflowInvoker.Invoke(new DoWhileWorkflow()); |
結果 |
ForEach<T> 迴圈
類名 |
System.Activities.Statements.ForEach<T> |
檔案 |
System.Activities.dll |
結構說明 |
繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Body] 屬性 的型別為[ActivityAction<T>] [Values] 屬性 的型別為[ InArgument<IEnumerable<T>> ] |
功能說明 |
[Values] 屬性為要迴圈的集合 [TypeArgument] 為要迴圈集合的的型別 [item]為迴圈時的臨時變數,可在[Body]中被訪問 |
例:
1. 建立一code activity 名為[CollectionActivity],
具有[Out]引數,型別為List<string>的引數[myOutCollection]
2. 在流程中新增List<string>變數[myCollection]
3. 在流程中新增[CollectionActivity],將[CollectionActivity.myOutCollection]引數繫結到 [myCollection] 變數
4. 在流程中新增[ForEach<T>],[TypeArgument]屬性指定[string]
[Values] 屬性繫結到 [myCollection] 變數
在[Body]中新增[writeLine],列印[item]
CollectionActivity |
public sealed class CollectionActivity : CodeActivity { public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; } protected override void Execute(CodeActivityContext context) { System.Collections.Generic.List<string> list = new List<string>(); list.Add("wxd"); list.Add("lzm"); list.Add("wxwinter"); context.SetValue (this.myOutCollection,list ); } } |
流程 |
|
宿主 |
WorkflowInvoker.Invoke(new ForEachWorkflow()); |
結果 |