[workflow foundation]加入自定義的活動
1. 加入一個自訂的程式碼活動
2. 撰寫程式並編譯
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
namespace HelloWordWF
{
public sealed class EmpManager : CodeActivity
{
// 定義字串型別的活動輸入引數
//輸入的變數:員工姓名
public InArgument<EmployeeDataItem> empName { get; set; }
//輸出的變數:薪水
public OutArgument<decimal> totalsalary { get; set; }
// 如果您的活動要傳回值,請從 CodeActivity<TResult> 衍生該值,
// 並從 Execute 方法傳回該值。
protected override void Execute(CodeActivityContext context)
{
decimal result = new decimal(0);
EmployeeDataItem employees = context.GetValue<EmployeeDataItem>(empName);
switch( employees.EmpName)
{
case "李阿貓": result = employees.Salary * 1;
break;
case "李阿狗": result = employees.Salary * 2;
break;
case "李阿牛": result = employees.Salary * 3;
break;
default: break;
}
context.SetValue(this.totalsalary, result);
}
}
}
3. 可以看到工具箱多了自定義的活動
4. 修改在TryCatch範例中的流程,新增一個ForEach活動並修改如下
5. 在body拉入一個sequence及一個自定義的EmpManager活動
6. 增加一個變數salary定義為decimal
7. 修改empname的屬性
8. 增加一個writeline活動並設定如下
9. 修改完畢的ForEach活動如下
10. 主程式不變
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();
}
}
}
11. 輸出結果