代码改变世界

Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动

2007-01-08 18:01  努力学习的小熊  阅读(2451)  评论(6编辑  收藏  举报

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

Ø         创建一个新的工作流项目

Ø         在项目中添加一个费用报表接口

Ø         添加一个费用报表提交活动(ExpenseReportSubmitted Activity

Ø         在工作流中添加预先建立好的自动审核活动(AutoApprove Activity

Ø         在工作流中添加规则条件

Ø         添加一个逻辑来判断审核或者拒绝费用报表

Ø         调试配置费用工作流项目(ExpenseWorkflows

Ø         测试费用报表工作流

 

1.打开Microsoft Visual Studio 2005,新建一个工作流项目。选择Empty Workflow Project模板。

Name:   ExpenseWorkflows

Location:  C:\Windows Workflow Foundation\Labs\Lab01

2.在菜单中选择Project | Add Sequential Workflow,在打开的模板窗口中选择建立一个顺序工作流项,并且是代码和设计分离的Sequential Workflow (with code seperation)。就是用它的默认名称Workflow1.xoml

3.添加一个费用报表使用的程序集引用ExpenseLocalServices.dll。在如下路径找到这个文件:

C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin

4.在Workflow1类中添加两个变量,一个是reportArgs,用在报表提交事件参数中,存放报表对象;amount一个是用来存放提交报表中费用的数量。

5.右键选择Workflow1.xoml.cs文件,在菜单中选择View Code(查看代码)。添加如下代码:

     public partial class Workflow1 : SequentialWorkflowActivity

     {

        public ExpenseLocalServices.ExpenseReportSubmittedEventArgs reportArgs = default(ExpenseLocalServices.ExpenseReportSubmittedEventArgs);

        public int amount = default(System.Int32);

     }

6.打开workflow1.xoml的设计界面,在Toolbox中选择HandleExternalEvent活动,拖放到设计视图中。设置Name属性为expenseReportSubmitted1
   

7.点击智能标示的红色感叹号,选择其中的Property ‘InterfaceType’ is not set标签。设计器会自动转到属性面板上的InterfaceType属性,点[…]按钮将弹出.NET Type Browser对话框。在引用组件树中选择ExpenseLocalServices.IExpenseService

8.在属性窗口中设置其它的属性如下值:

EventName           ExpenseReportSubmitted

Invoked               ReportSubmitted_Invoked

(Parameter) e              Activity=Workflow1, Path=reports

设置好后属性如下
   

9.设置好Invoked属性后,VS2005会自动生成相应的函数并转到代码窗口。在函数中输入如下代码。

        private void ReportSubmitted_Invoked(object sender, ExternalDataEventArgs e)

        {

            Console.WriteLine("ReportSubmitted_Invoked");

 

            this.amount = this.reportArgs.Report.Amount;

        }

10.下面添加一个预先建立好的自定义活动,用来计算提交的报表是否可以被自动的审核通过或者不通过。AutoApprove活动使用AutoApprovalPolicy活动可以为我们做这个。

11.在菜单中选择Tools | Choose Toolbox Items…打开添加组件的对话框,选择.NET Framework Components选项卡,在如下路径位置找到ExpenseActivities.dll文件,然后单击OK添加进来。

C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin

这时看到工具栏里面多了两个可以使用的活动AutoApproveGetManager


       12
.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
   

13.设置它的Amount属性。在Amount属性旁边单击[…]按钮,弹出设置窗口。
   
   

14.在autoApprove1活动下面添加一个IfElse活动,并设置它的(Name)属性为EvaluateExpenseReport

15.选择左边标签标识为ifElseBranchActivity1的活动,设置(Name)属性为IfAutoApproveReport;设置Condition属性,从下拉菜单中选择Declarative Rule ConditionCondition属性旁边会出现一个加号,展开属性,设置ConditionAutoApproveCondition,设置Expression属性为autoApprove1.Approved
   

16.选择EvaluateExpenseReport右边标签为ifElseBranchActivity2的活动,设置(Name)属性为ElseRejected

17.从Toolbox工具箱中选择CallExternalMethod活动放到IfAutoApproveReport中。

       设置Name属性为approveExpenseReport1。设置InterfaceType属性,点击[…]按钮,在弹出的窗口种选择ExpenseLocalService.IExpenseService
   

设置MethodName属性为ApproveExpenseReport

设置report属性为reportArgs.Report

设置好后属性如下:
   

18.再添加一个CallExternalMethod活动放到ElseRejected活动中。

设置Name属性为rejectExpenseReport1

同样设置InterfaceType属性为ExpenseLocalService.IExpenseService

设置MethodName属性为RejectExpenseReport

设置参数Report属性为reportArgs.Report

19.至此工作流设计视图如下:
   

下面要做的就是配置工作流的运行和调试。

20.在如下路径找到ExpenseHost.exeExpenseHost.exe.config两个文件。

C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin

将它们拷贝到如下路径:

C:\Windows Workflow Foundation\Labs\Lab01\ExpenseWorkflows\ExpenseWorkflows\bin\Debug

21.更改ExpenseWorkflows工作流项目的启动应用程序。在Solution Explorer中右键点击ExpenseWorkflows项目,在菜单中选择属性。选择Debug选项卡,将Start Action设置为Start External Program,然后找到刚才拷贝过来的ExpenseHost.exe文件。

22.保存设置,在Workflow1.xoml文件的设计视图中,选择expenseReportSubmitted1活动并添加一个断点。

最后是测试费用报表工作流:

23.按F5或者在菜单中选择Debug | Start Debugging编译运行ExpenseWorkflows项目。

24ExpenseHost将启动并显示一个控制台窗口。
   

25.在如下路径找到ExpenseApplication.exe程序,运行。

C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin

26.点击Submit Report按钮,会自动转到刚才添加断点的expenseReportSubmitted1地方。
   

27.继续运行流程会跳转到rejectExpenseReport1活动。

因为只有费用小于1000才能被审核通过。所以Ari Bixhorn提交的1500的费用报表被审核不通过。
   

点击Refresh Reports按钮查看结果。
   

Kim Abercrombie提交的费用报表为500,小于1000,所以刷新后被自动审核通过。
   
   

 

参考资料:

Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2

 

这个练习很多不明白的地方,先列在下面,一个一个解决:

HandleExternalEvent Activity

CallExternalMethod Activity

还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。