Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation RC中的HOL01中的第四个练习,其中包括四个任务:
Ø 给管理者批准的请求添加一个活动
Ø 在费用报表(Expense Report)的Review添加一个监听(Listen)活动
Ø 批准(Approve)或拒绝(Reject)费用报表
Ø 测试费用报销工作流
1.在上一个应用程序中右键单击workflow1.xoml.cs文件并查看代码。
2.在Workflow1类的开始添加三个声明ReportEmployeeId、ManagerEmployeeId、reviewArgs
public string ReportEmployeeId = default(System.String);
public string ManagerEmployeeId = default(System.String);
public ExpenseLocalServices.ExpenseReportReviewedEventArgs reviewArgs =
default(ExpenseLocalServices.ExpenseReportReviewedEventArgs);
3.在Visual Studio 2005中,打开Workflow1.xoml文件的设计视图。
4.右键单击rejectExpenseReport1活动,选择删除,删除这个Activity。
5.选择EvaluateExpenseReport这个IfElse活动右边的分支(显示为ElseRejected),在属性窗口中修改Name属性为ElseManagerApproval。
6.添加一个GetManager活动在ElseManagerApproval中。
7.在属性窗口中设置以下属性:
ManagerEmployeeId——点击省略号按钮绑定刚才声明的变量ManagerEmployeeId。
ReportEmployeeId——点击省略号按钮绑定刚才声明的变量ReportEmployeeId。
8.修改ReportSubmitted_Invoked方法的代码,将ReportEmployeeId的值设置为Expense Report’s EmployeeId属性。
private void ReportSubmitted_Invoked(object sender, ExternalDataEventArgs e)
{
Console.WriteLine("ReportSubmitted_Invoked");
this.amount = this.reportArgs.Report.Amount;
this.ReportEmployeeId = this.reportArgs.Report.EmployeeId;
}
9.打开Workflow1.xoml设计视图。在getManager1活动下添加CallExternalMethod活动。
10.设置CallExternalMethod的Name属性为requestManagerApproval1。
11.选择InterfaceType属性,设置为ExpenseLocalServices.IExpenseService。
12.选择MethodName属性,从下拉菜单中选择设置为RequestManagerApproval。
13.然后,属性窗口中的可设置属性会增加,设置以下属性:
ManagerEmployeeId——设置属性值为ManagerEmployeeId。
Report——设置属性值为reportArgs.Report。
14.设置后EvaluateExpenseReport为如下样子:
任务一完成。
15.在requestManagerApproval1下添加一个Listen活动。
16.在属性窗口中设置原来的属性Name值listenActivity1修改为ListenForManagerApproval。
修改eventDrivenActivity1部分的Name属性为ManagerReviewed。
修改eventDrivenActivity2部分的Name属性为ReviewTimeout。
17.在ManagerReviewed部分添加一个HandleExternalEvent活动。
18.设置HandleExternalEvent的Name属性为expenseReportReviewed1。
19.在属性窗口中设置expenseReportReviewed1的其他属性:
InterfaceType——ExpenseLocalServices.IExpenseService
EventName——ExpenseReportReviewed
e——reviewArgs
20.在ReviewTimeout分之部分上拖放一个Delay活动。设置TimeoutDuration属性为00:00:30。
任务二完成。
21.在expenseReportReviewed1活动下再添加一个IfElse活动。设置Name属性为EvaluateReview。
22.选择这个IfElse活动的左边分支,设置以下属性:
Name——IfApproved
Condition——从下拉菜单中选择CodeCondition(代码条件)
23.展开Condition属性,设置它的子属性Condition为IfReportApproved_Condition。设置后按下回车键会自动创建相应的事件并跳转到代码窗口。编写如下代码:
private void IfReportApproved_Condition(object sender, ConditionalEventArgs e)
{
e.Result = this.reviewArgs.Review.Approved;
}
24.打开Workflow1.xoml的设计视图,选择名为EvaluateReview的IfElse活动的右边的分支,设置Name属性为ElseDeclined。
25.在IfApproved分支下添加一个CallExternalMethod活动。设置Name属性为approveExpenseReport2。设置其他属性如下:
InterfaceType——ExpenseLocalServices.IExpenseService
MethodName——ApproveExpenseReport
report——reportArgs.Report
26.在ElseDeclined分支添加一个CallExternalMethod活动。并设置相关属性:
Name——rejectExpenseReport1
InterfaceType——ExpenseLocalServices.IExpenseService
MethodName——RejectExpenseReport
report——reportArgs.Report
27.Copy一个rejectExpenseReport1活动,粘贴在右边delayActivity1活动的下面,并设置Name属性为rejectExpenseReport2。
28.至此,这个Expense Reporting Workflow工作流完成。
任务三完成。
29.下面来验证一下这个应用是否正确。
30.在菜单中选择“项目——ExpenseWorkflows属性”,然后再打开的窗口中选择Debug选项卡。找到“启动外部程序”,设置为
C:\Windows Workflow Foundation\Labs\Lab01\ExpenseWorkflows\ExpenseWorkflows\bin\Debug\ExpenseHost.exe
31.打开Workflow1.xoml设计视图,在expenseReportSubmitted1活动上添加一个断点。按F5启动调试。
32.ExpenseHost将启动。
33.在如下路径找到并运行ExpenseApplication.exe
C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin
34.在如下路径找到并运行ManagerApplication.exe
C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin
35.使用Expense Application,点击Submit Report按钮创建一个新的报销单并提交到工作流。一个新的工作流实例将启动,Visual Studio 2005在调试模式下将进入到expenseReportSubmitted1断点。
36.按下F5继续执行。会有30秒的延迟。
37.删除所有断点,现在你可以创建多个需要审批的报销单。
38.使用Manager application,点击刷新,刷新出多个报销单的状态。选择其中一个,点击批准按钮。
39.最后,使用Expense Reporting application,点击刷新按钮来查看变化。如果提交的报销单超过30秒,它会被自动rejected(拒绝)掉。
任务四完成。
参考资料: