本文内容来自
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
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
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
。
下面要做的就是配置工作流的运行和调试。
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
项目。
25
.在如下路径找到
ExpenseApplication.exe
程序,运行。
C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin
26
.点击
Submit Report
按钮,会自动转到刚才添加断点的
expenseReportSubmitted1
地方。
27
.继续运行流程会跳转到
rejectExpenseReport1
活动。
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
这个练习很多不明白的地方,先列在下面,一个一个解决:
HandleExternalEvent Activity
CallExternalMethod Activity
还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。