[worflow foundation] ForEach<T>

[worflow foundation] ForEach<T>

練習一下用法

1. 加入新的類別

clip_image002

2. 輸入下列程式

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

namespace HelloWordWF
{
    /// <summary>
    /// 員工資料
    /// </summary>
    public class EmployeeDataItem
    {        
        public string EmpName { get; set; }
        public string EmpId { get; set; }
        public decimal Salary { get; set; }
    }
    /// <summary>
    /// 公司資料
    /// </summary>
    public class EmployeeData
    {
        public EmployeeData()
        {
            items = new List<EmployeeDataItem>();
        }
        public int CompanyID { get; set; }      
        //引用員工資料類別
        public List<EmployeeDataItem> items { get; set; }
    }
}

3. 加入新的流程

clip_image004

4. 建立引數,並瀏覽型別

clip_image006

5. 選擇EmployeeData

clip_image008

6. 建立第二個引數OutputData,注意方向為輸出,型態為Decimal

clip_image010

clip_image012

7. 拉入一個ForEach並設定屬性

clip_image013

clip_image014

clip_image016

8. 拉一個assign activity,目前設計畫面如下

clip_image017

9. 修改assign屬性

clip_image018

clip_image019

10. 最後設計畫面如下

clip_image020

11. 修改主程式如下

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();
        }       
    }
   
}

12. 執行結果

clip_image022