Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动
2007-01-08 18:01
471 查看
本文内容来自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(查看代码)。添加如下代码:
[align=left] public partial class Workflow1 : SequentialWorkflowActivity[/align]
[align=left] {[/align]
[align=left] public ExpenseLocalServices.ExpenseReportSubmittedEventArgs reportArgs = default(ExpenseLocalServices.ExpenseReportSubmittedEventArgs);[/align]
[align=left] public int amount = default(System.Int32);[/align]
[align=left] }[/align]
6.打开workflow1.xoml的设计界面,在Toolbox中选择HandleExternalEvent活动,拖放到设计视图中。设置Name属性为expenseReportSubmitted1。
![](http://img1.51cto.com/attachment/201004/201004181271594320508.jpg)
7.点击智能标示的红色感叹号,选择其中的Property ‘InterfaceType’ is not set标签。设计器会自动转到属性面板上的InterfaceType属性,点[…]按钮将弹出.NET Type Browser对话框。在引用组件树中选择ExpenseLocalServices.IExpenseService。
8.在属性窗口中设置其它的属性如下值:
EventName ExpenseReportSubmitted
Invoked ReportSubmitted_Invoked
(Parameter) e Activity=Workflow1, Path=reports
![](http://img1.51cto.com/attachment/201004/201004181271594337592.jpg)
设置好后属性如下
![](http://img1.51cto.com/attachment/201004/201004181271594434782.jpg)
9.设置好Invoked属性后,VS2005会自动生成相应的函数并转到代码窗口。在函数中输入如下代码。
[align=left] private void ReportSubmitted_Invoked(object sender, ExternalDataEventArgs e)[/align]
[align=left] {[/align]
[align=left] Console.WriteLine("ReportSubmitted_Invoked");[/align]
[align=left] [/align]
[align=left] this.amount = this.reportArgs.Report.Amount;[/align]
[align=left] }[/align]
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。
![](http://img1.51cto.com/attachment/201004/201004181271594461801.jpg)
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
![](http://img1.51cto.com/attachment/201004/201004181271594492876.jpg)
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
![](http://img1.51cto.com/attachment/201004/201004181271594510541.jpg)
![](http://img1.51cto.com/attachment/201004/201004181271594545311.jpg)
14.在autoApprove1活动下面添加一个IfElse活动,并设置它的(Name)属性为EvaluateExpenseReport。
15.选择左边标签标识为ifElseBranchActivity1的活动,设置(Name)属性为IfAutoApproveReport;设置Condition属性,从下拉菜单中选择Declarative Rule Condition,Condition属性旁边会出现一个加号,展开属性,设置Condition为AutoApproveCondition,设置Expression属性为autoApprove1.Approved。
![](http://img1.51cto.com/attachment/201004/201004181271594579941.jpg)
16.选择EvaluateExpenseReport右边标签为ifElseBranchActivity2的活动,设置(Name)属性为ElseRejected。
17.从Toolbox工具箱中选择CallExternalMethod活动放到IfAutoApproveReport中。
设置Name属性为approveExpenseReport1。设置InterfaceType属性,点击[…]按钮,在弹出的窗口种选择ExpenseLocalService.IExpenseService。
![](http://img1.51cto.com/attachment/201004/201004181271594595643.jpg)
设置MethodName属性为ApproveExpenseReport。
设置report属性为reportArgs.Report。
![](http://img1.51cto.com/attachment/201004/201004181271594641179.jpg)
设置好后属性如下:
![](http://img1.51cto.com/attachment/201004/201004181271594658153.jpg)
18.再添加一个CallExternalMethod活动放到ElseRejected活动中。
设置Name属性为rejectExpenseReport1。
同样设置InterfaceType属性为ExpenseLocalService.IExpenseService。
设置MethodName属性为RejectExpenseReport。
设置参数Report属性为reportArgs.Report。
![](http://img1.51cto.com/attachment/201004/201004181271594688917.jpg)
19.至此工作流设计视图如下:
![](http://img1.51cto.com/attachment/201004/201004181271594708315.jpg)
下面要做的就是配置工作流的运行和调试。
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将启动并显示一个控制台窗口。
![](http://img1.51cto.com/attachment/201004/201004181271594755774.jpg)
25.在如下路径找到ExpenseApplication.exe程序,运行。
C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin
26.点击Submit Report按钮,会自动转到刚才添加断点的expenseReportSubmitted1地方。
![](http://img1.51cto.com/attachment/201004/201004181271594774581.jpg)
27.继续运行流程会跳转到rejectExpenseReport1活动。
因为只有费用小于1000才能被审核通过。所以Ari Bixhorn提交的1500的费用报表被审核不通过。
![](http://img1.51cto.com/attachment/201004/201004181271594813427.jpg)
点击Refresh Reports按钮查看结果。
![](http://img1.51cto.com/attachment/201004/201004181271594838653.jpg)
Kim Abercrombie提交的费用报表为500,小于1000,所以刷新后被自动审核通过。
![](http://img1.51cto.com/attachment/201004/201004181271594884369.jpg)
![](http://img1.51cto.com/attachment/201004/201004181271594900662.jpg)
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
这个练习很多不明白的地方,先列在下面,一个一个解决:
HandleExternalEvent Activity
CallExternalMethod Activity
还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。本文出自 “努力学习的小熊” 博客,转载请与作者联系!
Ø 创建一个新的工作流项目
Ø 在项目中添加一个费用报表接口
Ø 添加一个费用报表提交活动(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(查看代码)。添加如下代码:
[align=left] public partial class Workflow1 : SequentialWorkflowActivity[/align]
[align=left] {[/align]
[align=left] public ExpenseLocalServices.ExpenseReportSubmittedEventArgs reportArgs = default(ExpenseLocalServices.ExpenseReportSubmittedEventArgs);[/align]
[align=left] public int amount = default(System.Int32);[/align]
[align=left] }[/align]
6.打开workflow1.xoml的设计界面,在Toolbox中选择HandleExternalEvent活动,拖放到设计视图中。设置Name属性为expenseReportSubmitted1。
![](http://img1.51cto.com/attachment/201004/201004181271594320508.jpg)
7.点击智能标示的红色感叹号,选择其中的Property ‘InterfaceType’ is not set标签。设计器会自动转到属性面板上的InterfaceType属性,点[…]按钮将弹出.NET Type Browser对话框。在引用组件树中选择ExpenseLocalServices.IExpenseService。
8.在属性窗口中设置其它的属性如下值:
EventName ExpenseReportSubmitted
Invoked ReportSubmitted_Invoked
(Parameter) e Activity=Workflow1, Path=reports
![](http://img1.51cto.com/attachment/201004/201004181271594337592.jpg)
设置好后属性如下
![](http://img1.51cto.com/attachment/201004/201004181271594434782.jpg)
9.设置好Invoked属性后,VS2005会自动生成相应的函数并转到代码窗口。在函数中输入如下代码。
[align=left] private void ReportSubmitted_Invoked(object sender, ExternalDataEventArgs e)[/align]
[align=left] {[/align]
[align=left] Console.WriteLine("ReportSubmitted_Invoked");[/align]
[align=left] [/align]
[align=left] this.amount = this.reportArgs.Report.Amount;[/align]
[align=left] }[/align]
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。
![](http://img1.51cto.com/attachment/201004/201004181271594461801.jpg)
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
![](http://img1.51cto.com/attachment/201004/201004181271594492876.jpg)
12.选择AutoApprove活动拖放到expenseReportSubmitted1下面。
![](http://img1.51cto.com/attachment/201004/201004181271594510541.jpg)
![](http://img1.51cto.com/attachment/201004/201004181271594545311.jpg)
14.在autoApprove1活动下面添加一个IfElse活动,并设置它的(Name)属性为EvaluateExpenseReport。
15.选择左边标签标识为ifElseBranchActivity1的活动,设置(Name)属性为IfAutoApproveReport;设置Condition属性,从下拉菜单中选择Declarative Rule Condition,Condition属性旁边会出现一个加号,展开属性,设置Condition为AutoApproveCondition,设置Expression属性为autoApprove1.Approved。
![](http://img1.51cto.com/attachment/201004/201004181271594579941.jpg)
16.选择EvaluateExpenseReport右边标签为ifElseBranchActivity2的活动,设置(Name)属性为ElseRejected。
17.从Toolbox工具箱中选择CallExternalMethod活动放到IfAutoApproveReport中。
设置Name属性为approveExpenseReport1。设置InterfaceType属性,点击[…]按钮,在弹出的窗口种选择ExpenseLocalService.IExpenseService。
![](http://img1.51cto.com/attachment/201004/201004181271594595643.jpg)
设置MethodName属性为ApproveExpenseReport。
设置report属性为reportArgs.Report。
![](http://img1.51cto.com/attachment/201004/201004181271594641179.jpg)
设置好后属性如下:
![](http://img1.51cto.com/attachment/201004/201004181271594658153.jpg)
18.再添加一个CallExternalMethod活动放到ElseRejected活动中。
设置Name属性为rejectExpenseReport1。
同样设置InterfaceType属性为ExpenseLocalService.IExpenseService。
设置MethodName属性为RejectExpenseReport。
设置参数Report属性为reportArgs.Report。
![](http://img1.51cto.com/attachment/201004/201004181271594688917.jpg)
19.至此工作流设计视图如下:
![](http://img1.51cto.com/attachment/201004/201004181271594708315.jpg)
下面要做的就是配置工作流的运行和调试。
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将启动并显示一个控制台窗口。
![](http://img1.51cto.com/attachment/201004/201004181271594755774.jpg)
25.在如下路径找到ExpenseApplication.exe程序,运行。
C:\Windows Workflow Foundation\Labs\Lab01\Resources\ExpenseReporting\bin
26.点击Submit Report按钮,会自动转到刚才添加断点的expenseReportSubmitted1地方。
![](http://img1.51cto.com/attachment/201004/201004181271594774581.jpg)
27.继续运行流程会跳转到rejectExpenseReport1活动。
因为只有费用小于1000才能被审核通过。所以Ari Bixhorn提交的1500的费用报表被审核不通过。
![](http://img1.51cto.com/attachment/201004/201004181271594813427.jpg)
点击Refresh Reports按钮查看结果。
![](http://img1.51cto.com/attachment/201004/201004181271594838653.jpg)
Kim Abercrombie提交的费用报表为500,小于1000,所以刷新后被自动审核通过。
![](http://img1.51cto.com/attachment/201004/201004181271594884369.jpg)
![](http://img1.51cto.com/attachment/201004/201004181271594900662.jpg)
参考资料:
Microsoft Hands-on Labs for Windows Workflow Foundation Beta 2
这个练习很多不明白的地方,先列在下面,一个一个解决:
HandleExternalEvent Activity
CallExternalMethod Activity
还有其他的配合使用的程序怎么起作用的基本不明白,希望后面的练习能给说明。本文出自 “努力学习的小熊” 博客,转载请与作者联系!
相关文章推荐
- Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动
- Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动
- 使用find_if的自定义条件查找vector或map
- 使用自定义Comparator对TreeSet中的数据进行多条件排序
- 使用Conditional特性代替#if条件编译
- AS3自定义注解的声明与使用
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- 【C#高效编程50例】条目4: 使用Conditional特性而不是#if条件编译
- 自定义标签1——条件判断(if-else)
- if条件注释语句的使用
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- js面向对象编程:if中可以使用哪些作为判断条件呢?
- C# 使用Conditional特性而不是#if条件编译
- 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- Shell使用if条件语句
- Shell 脚本基础 - 使用 if 语句进行条件检测
- React中使用if else 条件判断
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- js在if else语句中var的变量在条件语句外可以使用吗?
- <s:iterator>标签内使用<s:if>判断条件