本文内容来自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 Condition,Condition属性旁边会出现一个加号,展开属性,设置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项目。

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

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

转载于:https://www.cnblogs.com/Bear-Study-Hard/archive/2007/01/08/615071.html

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

  1. Windows Workflow RC HOL学习笔记(六):创建一个基本的活动

    本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation RC中的HOL02中的第二个练习,其中包括六个任务: 使用Activity ...

  2. Windows Workflow HOL学习笔记(十二):创建状态基工作流

    W indows Workflow HOL学习笔记(十二):创建状态基工作流 本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation ...

  3. Windows进程与线程学习笔记(三)—— KPCR

    Windows进程与线程学习笔记(三)-- KPCR KPCR +0x000 NtTib : _NT_TIB +0x120 PrcbData : _KPRCB KPCR 描述:CPU控制区(Proce ...

  4. Windows进程与线程学习笔记(九)—— 线程优先级/进程挂靠/跨进程读写

    Windows进程与线程学习笔记(九)-- 线程优先级/进程挂靠/跨进程读写 要点回顾 线程优先级 调度链表 分析 KiFindReadyThread 分析 KiSwapThread 总结 进程挂靠 ...

  5. Windows进程与线程学习笔记(七)—— 时间片管理

    Windows进程与线程学习笔记(七)-- 时间片管理 要点回顾 基本概念 CPU时间片 分析 KeUpdateRunTime 分析 KiDispatchInterrupt 备用线程 总结 要点回顾 ...

  6. Windows进程与线程学习笔记(五)—— 模拟线程切换

    Windows进程与线程学习笔记(五)-- 模拟线程切换 ThreadSwitch代码分析 ThreadSwitch.cpp ThreadCore.h ThreadCore.cpp 总结 Thread ...

  7. Windows进程与线程学习笔记(一)—— 进程结构体

    Windows进程与线程学习笔记(一)-- 进程结构体 进程结构体 EPROCESS +0x000 Pcb : _KPROCESS +0x1b0 Peb : Ptr32 _PEB 练习 解题步骤 第一 ...

  8. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  9. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

最新文章

  1. 技术图文:Python描述符 (descriptor) 详解
  2. Nginx配置文件详细说明
  3. solrcloud java_SolrCloud之zookeeper中使用java代码创建集合
  4. linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?
  5. Linux 命令解压缩
  6. 中山大学计算机系学霸,中山大学学霸双胞胎姐妹毕业了,这颜值真是逆天啊!...
  7. hadoop集群重启
  8. 最受欢迎的网管工具集
  9. UNIX 网络编程课程目录
  10. WGS84经纬度坐标转化成UTM坐标
  11. ms-sql数据类型和access数据类型大全
  12. new和delete与内存分配
  13. 明星热图|童瑶、万茜、周冬雨、宁静、吴昕、宋威龙、李荣浩等签约新品牌...
  14. 为什么不建议你给领导回复“收到”?
  15. 离散数学期末基础知识点复习
  16. 图灵完备及TypeScript图灵完备性验证
  17. OGC城市地理标记语言(CityGML)编码标准_序言+0引言
  18. 人员基础信息一体化采集设备及系统研发技术总结
  19. 山东大学暑期项目实训-基于信用评分卡算法模型的个人信用评级系统的设计与实现-第三周-9(7月16日)
  20. 微型计算机的组,微型计算机系统组的成.doc

热门文章

  1. python下载软件-python下载工具
  2. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
  3. python培训比较好的机构-学Python去哪家培训机构比较好?
  4. python可以自学吗-没有编程基础,可以自学Python吗?
  5. python搞笑代码-【转】 Python 程序员的进化--搞笑版
  6. 黑客用python还是ruby-请问为什么我选择了Ruby而不是Python?
  7. 为什么黑客用python-为什么如此多的黑客都用python?
  8. python官网下载好慢1001python官网下载好慢-Python|时间复杂度测试
  9. 学python是看书还是看视频-Python与豆瓣读书
  10. python列表切片口诀-Python-100例(7-8) 复制列表 打印乘法口诀