WF4.0(3)----變量與參數

已經寫了兩篇關於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);

 

  這篇算是補發文章吧,基礎文章仍是慢慢寫吧,前面的有些例子比較簡單,對於沒有用過的可能不是很熟悉,補發以後但願會好一點,文章很基礎,高手可忽略,若是你以爲文章對你有所幫助,幫忙給個推薦吧,多謝~

相關文章
相關標籤/搜索