本文内容来自 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
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第1张图片
7 .点击智能标示的红色感叹号,选择其中的 Property ‘InterfaceType’ is not set 标签。设计器会自动转到属性面板上的 InterfaceType 属性,点 […] 按钮将弹出 .NET Type Browser 对话框。在引用组件树中选择 ExpenseLocalServices.IExpenseService
8 .在属性窗口中设置其它的属性如下值:
EventName           ExpenseReportSubmitted
Invoked               ReportSubmitted_Invoked
(Parameter) e              Activity=Workflow1, Path=reports
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第2张图片
设置好后属性如下
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第3张图片
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下面。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第4张图片
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第5张图片
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第6张图片
14 .在 autoApprove1 活动下面添加一个 IfElse 活动,并设置它的 (Name) 属性为 EvaluateExpenseReport
15 .选择左边标签标识为 ifElseBranchActivity1 的活动,设置 (Name) 属性为 IfAutoApproveReport ;设置 Condition 属性,从下拉菜单中选择 Declarative Rule Condition Condition 属性旁边会出现一个加号,展开属性,设置 Condition AutoApproveCondition ,设置 Expression 属性为 autoApprove1.Approved
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第7张图片
16 .选择 EvaluateExpenseReport 右边标签为 ifElseBranchActivity2 的活动,设置 (Name) 属性为 ElseRejected
17 .从 Toolbox 工具箱中选择 CallExternalMethod 活动放到 IfAutoApproveReport 中。
       设置 Name 属性为 approveExpenseReport1 。设置 InterfaceType 属性,点击 […] 按钮,在弹出的窗口种选择 ExpenseLocalService.IExpenseService
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第8张图片
设置 MethodName 属性为 ApproveExpenseReport
设置 report 属性为 reportArgs.Report
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第9张图片
设置好后属性如下:
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第10张图片
18 .再添加一个 CallExternalMethod 活动放到 ElseRejected 活动中。
设置 Name 属性为 rejectExpenseReport1
同样设置 InterfaceType 属性为 ExpenseLocalService.IExpenseService
设置 MethodName 属性为 RejectExpenseReport
设置参数 Report 属性为 reportArgs.Report
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第11张图片
19.至此工作流设计视图如下:
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第12张图片
下面要做的就是配置工作流的运行和调试。
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 地方。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第13张图片
27 .继续运行流程会跳转到 rejectExpenseReport1 活动。
因为只有费用小于 1000 才能被审核通过。所以 Ari Bixhorn 提交的 1500 的费用报表被审核不通过。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第14张图片
点击Refresh Reports按钮查看结果。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第15张图片
Kim Abercrombie提交的费用报表为500,小于1000,所以刷新后被自动审核通过。
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第16张图片
Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动_第17张图片
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
 
这个练习很多不明白的地方,先列在下面,一个一个解决:
HandleExternalEvent Activity
CallExternalMethod Activity
还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。