本文内容来自 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 中。
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第1张图片
7 .在属性窗口中设置以下属性:
       ManagerEmployeeId ——点击省略号按钮绑定刚才声明的变量 ManagerEmployeeId
       ReportEmployeeId —— 点击省略号按钮绑定刚才声明的变量 ReportEmployeeId
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第2张图片
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
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第3张图片
12 .选择 MethodName 属性,从下拉菜单中选择设置为 RequestManagerApproval
13 .然后,属性窗口中的可设置属性会增加,设置以下属性:
    ManagerEmployeeId ——设置属性值为 ManagerEmployeeId
    Report ——设置属性值为 reportArgs.Report
14 .设置后 EvaluateExpenseReport 为如下样子:
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第4张图片
任务一完成。
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
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第5张图片
任务二完成。
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 工作流完成。
Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities_第6张图片
任务三完成。
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 (拒绝)掉。
任务四完成。
 
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation RC