Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动
本文内容来自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
这时看到工具栏里面多了两个可以使用的活动AutoApprove和GetManager。
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
13.设置它的Amount属性。在Amount属性旁边单击[…]按钮,弹出设置窗口。
14.在autoApprove1活动下面添加一个IfElse活动,并设置它的(Name)属性为EvaluateExpenseReport。
15.选择左边标签标识为ifElseBranchActivity1的活动,设置(Name)属性为IfAutoApproveReport;设置Condition属性,从下拉菜单中选择Declarative Rule Condition,Condition属性旁边会出现一个加号,展开属性,设置Condition为AutoApproveCondition,设置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.exe和ExpenseHost.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项目。
24.ExpenseHost将启动并显示一个控制台窗口。
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
还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。