[workflow foundation]Invoke活動

[workflow foundation]Invoke活動

1. 加入一個新的類別檔CheckEmployee

clip_image002

2. 撰寫程式碼


using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HelloWordWF
{
   public class CheckEmployee
    {
        public static string GetEmpPosition(EmployeeDataItem employees)
        {
            string position = string.Empty;
            switch (employees.EmpName)
            {
                case "李阿貓": position ="董事長";
                    break;
                case "李阿狗": position = "總經理";
                    break;
                case "李阿牛": position = "處長";
                    break;
                default: break;
            }            
            return position;
        }
    }
}

3. 拉入一個invoke活動

clip_image004

4. 修改target type

clip_image005

clip_image007

5. 設定屬性的method name為我們定義的函式GetEmpPosition

clip_image008

6. 這時候移到invoke活動上會有錯誤訊息,因為我們沒有定義輸入及輸出的參數

clip_image009

7. 定義輸入參數,注意方向為輸入

clip_image010

clip_image012

8. 建立變數接收invoke活動輸出的結果

clip_image014

9. 修改invoke活動的屬性將結果丟到變數中

clip_image015

10. 加入一個writeline活動並設定內容

clip_image016

11. 最後活動如下

clip_image017

12. 主程式不變


using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Collections.Generic;


namespace HelloWordWF
{

    class Program
    {
        static void Main(string[] args)
        {
           //建立引數物件EmployeeData
            EmployeeData empdata = new EmployeeData(){
                CompanyID = 123,
            };
            empdata.items.Add(new EmployeeDataItem()
            {
                EmpId = "a1",
                EmpName = "李阿貓",
                Salary = Decimal.Parse("1000")
            });
            empdata.items.Add(new EmployeeDataItem()
            {
                EmpId = "a2",
                EmpName = "李阿狗",
                Salary = Decimal.Parse("2000")
            });
            empdata.items.Add(new EmployeeDataItem()
            {
                EmpId = "a3",
                EmpName = "李阿牛",
                Salary = Decimal.Parse("3000")
            });
            //workflow的引數參數要用Dinctionary<,>帶入
            IDictionary<string, object> input = new Dictionary<string, object>
            {
                //注意引數名稱方向為輸入
                {"EmployeeData",empdata}
            };
            //workflow的引數參數要用Dinctionary<,>輸出
            //注意引數名稱方向為輸出
            IDictionary<string,object> output = WorkflowInvoker.Invoke(new TestForEachAndTryCatch(),input);
            Console.WriteLine("總金額為:" + ((Decimal)output["OutputData"]).ToString());
            Console.WriteLine("請按Enter鍵後離開!");
            Console.Read();
        }       
    }
   
}

13. 輸出結果

clip_image019