使用监听、延迟和基于事件的自定义活动

在这个练习中你将会扩展在练习三中创建的报销审核工作流,来提供给管理者审核或者拒绝大于1000美元的报销申请的管理功能。你将会熟悉一些额外的活动,如监听、延迟和一些额外的自定义活动。

任务1 —— 添加活动来请求管理者审核

  1. 在解决方案资源管理器中右键单击workflow1.xoml.cs,选择代码视图。
  2. 在Workflow1类的开始处为ReportEmployeeId、ManagerEmployeeId和reviewArgs添加声明。
    public string ReportEmployeeId = default(System.String);
    public string ManagerEmployeeId = default(System.String);
    public ExpenseLocalServices.ExpenseReportReviewedEventArgs reviewArgs =default(ExpenseLocalServices.ExpenseReportReviewedEventArgs);
  3. 在Visual Studio 2008中,右键在解决方案资源浏览器中单击Workflow1.xoml文件并选择设计视图,以Visual Studio工作流设计界面打开Workflow1.xoml文件。
  4. 右键单击rejectExpenseReport1活动,然后选择删除。
  5. 选择右侧的EvaluateExpenseReport ifElse活动(现在叫ElseRegected),然后在属性窗口中将Name属性修改为ElseManagerApproval.
  6. 从工具箱中拖拽一个GetManager(在练习三中,随着我们添加ExpenseActivities.dll,同时添加到工具箱中的)活动到工作流定义中IfElse的ElseManagerApproval一侧。
  7. 在属性窗口中输入或选择如下属性的值:a. ManagerEmployeeId —— 单击加号将它绑定到ManagerEmployeeId上;b. ReportEmployeeId —— 单击加号将它绑定到ReportEmployeeId。
  8. 修改ReportSubmitted_Invoked方法中的代码来设置ReportEmployeeId为在报销申请的EmployeeId属性中提供的值。添加如下代码到该方法。
    public void ReportSubmitted_Invoked(object sender, EventArgs e)
    {Console.WriteLine("ReportSubmitted_AfterInvoke");this.amount = this.reportArgs.Report.Amount;this.ReportEmployeeId = this.reportArgs.Report.EmployeeId;
    }
  9. 在解决方案资源管理器中双击Workflow1.xoml文件以返回Visual Studio工作流设计器。
  10. 从工具箱中拖拽一个CallExternalMethod活动添加到工作流中的getManager1活动的下方。
  11. 设置CallExternalMethod活动的Name属性为requestManagerApproval1。
  12. 首先选择InterfaceType属性,选择ExpenseLocalServices.IExpenseService。
  13. 选择方法名然后在下拉列表中选择RequestManagerApproval。
  14. 然后,再属性窗口中为如下属性输入或选择如下值:a. ManagerEmployeeId——单击加号将其绑定到ManagerEmployeId;b. Report —— 单击加号将其绑定到reprotArgs.Report。
  15. 现在EvaluateExpenseReport应该如下所示:

任务2 —— 添加一个监听活动来等待报销审批的检查

  1. 从工具箱中拖拽一个Listen活动到工作流设计器中,放置在requestManagerApproval1活动的下方。
  2. 在属性窗口中,修改listenActivity1活动的Name属性值为ListenForManagerApproval。a. 修改Listen活动的eventDrivenActivity1节的Name属性为ManagerReviewed;b. 修改Listen活动的eventDrivenActivity2节的Name属性为ReviewTimeout。
  3. 我们正在编辑的工作流定义部分应如下所示:
  4. 从工具箱中拖拽并添加一个HandleExternalEvent活动到工作流设计器的ManagerReviewed节中。
  5. 设置HandleExternalEvent活动的Name属性为expenseReportReviewed1.
  6. 保持这个新的expenseReportReviewed1选中,转向属性窗口。
  7. 修改InterfaceType属性,选择ExpenseLocalServices.IExpenseService。
  8. 修改EventName属性,然后从下拉列表中选择ExpenseReportReviewed。
  9. 然后,再属性窗口中输入或选择如下属性的值:a. e——单击加号绑定这个属性到reviewArgs。
  10. 你的工作流定义现在应如下所示:
  11. 从工具箱中拖拽Delay活动到工作流设计界面,放置Listen活动的ReviewTimeout一侧。
  12. 保持delayActivity1活动选中,转向属性窗口并设置TimeoutDuration属性为00:00:30。
  13. 你的工作流定义应该如下图所示:

任务3 —— 审批或拒绝报销申请

  1. 添加一个ifElse活动到工作流定义中expenseReportReviewed1活动的下方。
  2. 在属性窗口中,修改ifElseActivity1活动的Name属性为EvaluateReview。
  3. 选择EvaluteReview IfElse活动的左侧。
  4. 在属性窗口中输入或选择下列属性的值:a. Name —— 输入IfApproved;b. Condition —— 在下拉列表中选择CodeCondition,来表示该条件是一个基于代码的条件。
  5. 在属性窗口中展开Condition属性及其子Condition属性,输入IfReportApproved_Condition。你的属性对话框应该如下所示:当你点击回车,条件代码将会被添加并显示在代码窗口中。
  6. 在IfReportAproved_Condition事件处理程序中,设置ConditionalEventArgs.Result属性为Bool值,而这个Bool值存储在reviewArgs.Review对象的Approved属性中:
    public void IfReportApproved_Condition(object sender, ConditionalEventArgs e)
    {e.Result = this.reviewArgs.Review.Approved;
    }
  7. 现在在解决方案资源管理器中双击Workflow1.xoml,转向Visual Studio工作流设计视图。
  8. 选择EvaluateReview IfElse活动的右侧,然后在属性窗口中将Name属性修改为ElseDeclined。
  9. 你的工作流定义应该如下图所示:
  10. 添加一个CallExternalMethod活动到工作流定义的IfElse活动中IfApproved一侧。
  11. 设置CallExternalMethod活动的Name属性为approveExpenseReport2。在工作流中已经有一个approveExpenseReport1存在了。
  12. 选择Interface类型属性,选择ExpenseLocalServices.IExpenseService。
  13. 选择MethodName属性,然后在下拉列表中选择ApproveExpenseReport。
  14. 选择report属性,然后双击加号将其绑定到reportArgs.Report。
  15. 你的工作流定义应如下所示:
  16. 添加一个CallExternalMethod活动到工作流定义的IfElse中的ElseDeclined一侧。
  17. 设置CallExternalMethod活动的Name属性为rejectExpenseReport1。
  18. 选择InterfaceType属性,选择ExpenseLocalServices.IExpenseService。
  19. 选择MethodName属性,然后在下拉列表选择RejectExpenseReport。
  20. 选择report属性,然后单击加号并绑定它到reportArgs.Report。
  21. 你的工作流应该定义如下:
  22. 右键单击rejectExpenseReport1活动,在菜单中选择Copy。
  23. 右键单击Visual Studio工作流设计器中delayActivity1活动的下方,选择粘贴。
  24. 设置这个粘贴的活动的Name属性为rejectExpenseReport2.
  25. 你的工作流应该如下所示:
  26. 你的报销审批工作流现在完成了。完整的工作流应该如下所示:

任务4 —— 测试报销审批工作流

  1. 接下来,你将验证启动应用程序的正确性。
  2. 定位到项目|报销审批工作流属性菜单。
  3. 单击调试选项卡。
  4. 确定选中的是启动外部应用程序选项,且程序列表中出现如练习三中所示的ExpenseHost.exe地址。
  5. 在解决方案中双击Workflow1.xoml文件转向visual Studio 工作流设计器。
  6. 在工作流开始处的expenseReportSubmitted1活动上设置断点。工作流的顶端如图所示:
  7. 编译并运行ExpenseWorkflows项目。
  8. ExpenseHost将会启动,并显示一个控制窗口。
  9. 按照练习三中的路径,运行ExpenseApplication.exe。
  10. 下载并运行ManagerApplication.exe。
  11. 使用报销应用程序,单击提交申请按钮以创建一个新的报销申请并提交到工作流。一个新的工作流实例启动,Visual Studio 2008将会以调试模式中断在expenseReportSubmitted1活动处。
  12. 你可以按F5继续调试。到审查过期有30秒的延迟。
  13. 现在删除所有的端点,再按F5继续执行。
  14. 现在你可以提交多个不同值的报销审批。
  15. 使用Manager应用程序,单击刷新按钮来刷新报销申请列表。
  16. 从列表中选择一个报销申请,单击同意按钮以通过审核。
  17. 最后,使用Expense Reporting应用程序,单击刷新按钮来刷新状态的更改。记住,如果你在提交报销申请后等待超过30秒,工作流将会自动拒绝。因为我们添加的延迟活动已经配置好了。

转载于:https://www.cnblogs.com/zhangdong/archive/2010/01/13/1646533.html

Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)相关推荐

  1. IntelliJ IDEA快速入门 | 第四篇:图文并茂教你基于Windows 10系统安装IntelliJ IDEA

    下载IntelliJ IDEA 首先,打开IntelliJ IDEA的官网,即https://www.jetbrains.com/idea/.你会发现打开这个官网还是蛮要时间的,所以你得耐心点.打开之 ...

  2. 【ClickHouse】-01.万字带你快速入门使用CK

    文章目录 学习目标 1. Clickhouse简介 1.1 历史背景 1.1.1 版本号历史 1.2 特性 1.2.1 真正的列式数据库管理系统 1.2.2 数据压缩 1.2.3 数据的磁盘存储 1. ...

  3. Windows 8 动手实验系列教程 实验8:Windows应用商店API

    动手实验 实验 8: Windows应用商店API 2012年9月 简介 编写Windows应用商店应用最令人瞩目的理由之一是您可以方便地将它们发布到Windows应用商店.考虑到世界范围内目前有超过 ...

  4. C#——《C#语言程序设计》实验报告——Windows桌面编程

    一.实验目的 熟悉使用WPF进行界面编程的基本过程: 掌握WPF布局.控件.事件的使用. 二.实验内容 使用WPF技术,进行合理布局,设计一个窗体应用程序,完成一些常用度量单位的转换,基本模板如下图: ...

  5. 准备翻译Windows 8 动手实验系列教程

    Windows 8动手实验教程(http://msdn.microsoft.com/zh-cn/windows/apps/jj674832.aspx)包含了一个系列的 8 个动手实验模块,将为您提供 ...

  6. Windows 8 动手实验系列教程 实验6:设置和首选项

    动手实验 实验6:设置和首选项 2012年9月 简介 实验3介绍了合约并演示了应用程序如何轻松地与共享和搜索合约实现集成.合约同样包含设置超级按钮,它对活动的Windows应用商店应用的设置进行修改. ...

  7. C#——《C#语言程序设计》实验报告——Windows桌面编程——简单的计算器(仿Windows 10计算器)

    一.实验目的 熟悉使用WPF进行界面编程的基本过程: 掌握WPF布局.控件.事件的使用. 二.实验内容 运用WPF技术,模仿Windows 10系统中计算机器(Calculator)程序,开发一个类似 ...

  8. C#——《C#语言程序设计》实验报告——Windows桌面编程文件与流——简易记事本

    一.实验目的 掌握文件类的使用: 掌握文件流的操作: 掌握二进制数据.文本数据的读写: 继续应用WPF技术进行界面编程. 二.实验内容 写一个记事本程序: (1)设计界面,向窗体添加下拉式菜单.多格式 ...

  9. 计算机应用基础 第三版 实验报告,计算机应用基础实验报告(windows).doc

    计算机应用基础实验报告(windows) 实 验 报 告 计算机应用基础实验报告 姓名 于航 班级 0531132 学 实验日期2013.09.13 课程名称 计算机应用基础 指导教师 洪菁 成绩 实 ...

最新文章

  1. JQuery中的事件和选择器
  2. 微软开源可解释机器学习工具包lnterpretML
  3. EMC升级Celerra 支持闪存及重复数据删除
  4. java 输入框输入1到9_java程序设计  习题答案1到9
  5. dev gridcontrol设置过滤器下拉列表
  6. P7 计算机的性能指标
  7. 2/100. Hamming Distance
  8. php基础:查询程序运行时间并且把科学计数法转换成正常数字
  9. java 获取方法名
  10. Java连接GreenPlum
  11. Esxi直接使用vmdk文件创建虚机
  12. HDU 5974 2016ICPC大连 D: A Simple Math Problem
  13. iOS NSURLSession VS NSURLConnection
  14. XMLHttpRequest对象的open方法
  15. 博弈论(Game Theory)入门学习笔记(持续更新)
  16. java 枚举单例模式_使用枚举实现java单例模式示例代码
  17. Ubuntu系统下载(清华大学开源软件镜像站)(ubuntu-20.04.1-desktop-amd64.iso)
  18. QComboBox样式表
  19. 【转】C#调用Windows图片和传真查看器打开图片
  20. 西瓜书k-means例子matlab实现

热门文章

  1. 问题 K: 输出月历 山东科技大学OJ
  2. 工作之后如何高效的学习?
  3. readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
  4. mysql can't open file: '..frm'_mysqldump 导出数据时出现can’t opne file ‘xx.frm’ (errno:24)错误...
  5. mysql null 优化_MySQL如何优化IS NULL?
  6. java系列8:一个标准的类
  7. 数据:Uniswap V3的24小时交易量已超过2亿美元
  8. 韦氏评级:担心比特币近期价格走势的人都过于关注短期
  9. 鱼池将下线AE、HDAC矿池
  10. StarkWare发布零知识证明工具链