已經寫了兩篇關於WF4.0的博客,算是基礎博客,若是是WF比較熟悉就直接跳過吧,若是你對工做流不是很熟悉,或者想了解一下基礎的東西,本文仍是比較適合你的。工做流中變量,參數,表達式屬於數據模型中概念,變量表示存儲區,參數表示流入和流出活動的數據,經過變量使用表達式能夠給參數賦值.
程序員
變量是數據的存儲位置,變量被聲明爲工做流定義的一部分。變量在運行時獲取值,並將這些值存儲爲工做流實例狀態的一部分。變量定義指定了變量的類型,還可指定變量的名稱。首先簡單的看一個小例子,設置一個變量,給變量賦值,而後輸出變量:app
從工具箱拖一個Sequence,而後拖入一個Assign,最後拖入一個WriteLine:ide
一樣的咱們能夠再後臺本身寫代碼實現以上過程,代碼以下:工具
//定義變量 Variable<string> vars = new Variable<string> { Name = "MyName", }; Sequence sequence = new Sequence() { //活動中維護了一個變量組,將變量放入變量組中 Variables = { vars }, Activities = { new Assign<string>{ To=vars, Value="中山郎" }, //輸出變量 new WriteLine(){ Text=vars } } }; //調用活動 WorkflowInvoker.Invoke(sequence);
變量在運行時的生存期與聲明該變量的活動的生存期相同。活動完成後,其變量將被清除,而且沒法再引用。特別說明一下,若是你給變量一個默認值或者但願變量時只讀的,能夠進行以下設置:this
Variable<string> vars = new Variable<string> { Default = "MyName", Modifiers = VariableModifiers.ReadOnly };
參數來定義數據流入流出活動的方式,每一個參數都有特定的方向,In,Out,InOut;參數是WF的輸出和輸入接口,在同一個流程內,全部Activity共享一組參數.活動做者可以使用強類型機制來公開該活動的參數。實現方法是聲明 InArgument、OutArgument 和 InOutArgument類型的屬性。簡單的看一個Demo:spa
拖Sequence,設置參數argument1,argument2,argument3,賦值,輸出:blog
後臺調用,注意一下這裏調用使用的WorkflowApplication而不是WorkflowInvoke,以後的文章會單獨講訴一下二者的區別:接口
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("argument1", 21); dic.Add("argument2", 87); WorkflowApplication application = new WorkflowApplication(new Argument(), dic); application.Run();
自定義活動中InArgument,OutArgument的使用:字符串
1.定義一個HelloActivityget
public sealed class HelloActivity : CodeActivity { // 定義一個字符串類型的活動輸入參數 public InArgument<string> Text { get; set; } // 定義一個字符串類型的活動輸出參數 public OutArgument<string> OutText { get; set; } protected override void Execute(CodeActivityContext context) { // 獲取 Text 輸入參數的運行時值(兩種不一樣取值的方式) string text = context.GetValue(this.Text); string value = Text.Get(context); context.SetValue(OutText, "FlyElephant"); Console.WriteLine("姓名:"+text); Console.WriteLine("姓名:"+value); } }
2.流程圖中定義個變量outName,一個輸出參數myValue,將outName賦值給HellActivity的OutText,myValue賦值給Text,流程圖以下:
3.調用方式以下:
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("myValue", "Programer"); WorkflowApplication application = new WorkflowApplication(new In(), dic); application.Run();
經過以上小例子應該明白的就是InArgument能夠接收參數沒法傳出,OutArgument無需傳入能夠直接傳出;上面若是不是很清晰的話,繼續看一個簡單賦值自定義活動:
定義v1,v2,v3三個變量,而後將v1賦值給v2,v3:
Variable<string> v1 = new Variable<string>() { Default = "ASP.NET程序員" }; Variable<string> v2 = new Variable<string>(); Variable<string> v3 = new Variable<string>(); // 定義工做流 Activity wf = new Sequence { Variables = { v1, v2, v3 }, Activities = { //關鍵點,InArgument傳入以後賦值給v1,OutArgument傳出以後賦值給v2 new Assign<string>(){ To=new OutArgument<string>(v2), Value =new InArgument<string>(v1) }, new WriteLine() { Text = v2 }, new Assign<string>() { To = v3, Value = v2 }, new WriteLine() { Text = v3 } } }; WorkflowInvoker.Invoke(wf);
這篇算是補發文章吧,基礎文章仍是慢慢寫吧,前面的有些例子比較簡單,對於沒有用過的可能不是很熟悉,補發以後但願會好一點,文章很基礎,高手可忽略,若是你以爲文章對你有所幫助,幫忙給個推薦吧,多謝~