代码改变世界

Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities

2007-05-08 11:24  努力学习的小熊  阅读(1282)  评论(1编辑  收藏  举报

本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation RC中的HOL01中的第四个练习,其中包括四个任务:

Ø         给管理者批准的请求添加一个活动

Ø         在费用报表(Expense Report)的Review添加一个监听(Listen)活动

Ø         批准(Approve)或拒绝(Reject)费用报表

Ø         测试费用报销工作流

 

1.在上一个应用程序中右键单击workflow1.xoml.cs文件并查看代码。

2.在Workflow1类的开始添加三个声明ReportEmployeeIdManagerEmployeeIdreviewArgs

        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.设置CallExternalMethodName属性为requestManagerApproval1

11.选择InterfaceType属性,设置为ExpenseLocalServices.IExpenseService
   

12.选择MethodName属性,从下拉菜单中选择设置为RequestManagerApproval

13.然后,属性窗口中的可设置属性会增加,设置以下属性:

    ManagerEmployeeId——设置属性值为ManagerEmployeeId

    Report——设置属性值为reportArgs.Report

14.设置后EvaluateExpenseReport为如下样子:
   

任务一完成。

15.在requestManagerApproval1下添加一个Listen活动。

16.在属性窗口中设置原来的属性NamelistenActivity1修改为ListenForManagerApproval

       修改eventDrivenActivity1部分的Name属性为ManagerReviewed

       修改eventDrivenActivity2部分的Name属性为ReviewTimeout

17.在ManagerReviewed部分添加一个HandleExternalEvent活动。

18.设置HandleExternalEventName属性为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属性,设置它的子属性ConditionIfReportApproved_Condition。设置后按下回车键会自动创建相应的事件并跳转到代码窗口。编写如下代码:

        private void IfReportApproved_Condition(object sender, ConditionalEventArgs e)

        {

            e.Result = this.reviewArgs.Review.Approved;

        }

24.打开Workflow1.xoml的设计视图,选择名为EvaluateReviewIfElse活动的右边的分支,设置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

27Copy一个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启动调试。

32ExpenseHost将启动。

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