• Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)


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

    在这个练习中你将会扩展在练习三中创建的报销审核工作流,来提供给管理者审核或者拒绝大于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一侧。clip_image002_thumb1
    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应该如下所示:clip_image0025_thumb1[1]

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

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

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

    1. 添加一个ifElse活动到工作流定义中expenseReportReviewed1活动的下方。
    2. 在属性窗口中,修改ifElseActivity1活动的Name属性为EvaluateReview。
    3. 选择EvaluteReview IfElse活动的左侧。
    4. 在属性窗口中输入或选择下列属性的值:a. Name —— 输入IfApproved;b. Condition —— 在下拉列表中选择CodeCondition,来表示该条件是一个基于代码的条件。
    5. 在属性窗口中展开Condition属性及其子Condition属性,输入IfReportApproved_Condition。你的属性对话框应该如下所示:clip_image00213_thumb1当你点击回车,条件代码将会被添加并显示在代码窗口中。
    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. 你的工作流定义应该如下图所示:clip_image00215_thumb1
    10. 添加一个CallExternalMethod活动到工作流定义的IfElse活动中IfApproved一侧。
    11. 设置CallExternalMethod活动的Name属性为approveExpenseReport2。在工作流中已经有一个approveExpenseReport1存在了。
    12. 选择Interface类型属性,选择ExpenseLocalServices.IExpenseService。
    13. 选择MethodName属性,然后在下拉列表中选择ApproveExpenseReport。
    14. 选择report属性,然后双击加号将其绑定到reportArgs.Report。
    15. 你的工作流定义应如下所示:clip_image00217_thumb1
    16. 添加一个CallExternalMethod活动到工作流定义的IfElse中的ElseDeclined一侧。
    17. 设置CallExternalMethod活动的Name属性为rejectExpenseReport1。
    18. 选择InterfaceType属性,选择ExpenseLocalServices.IExpenseService。
    19. 选择MethodName属性,然后在下拉列表选择RejectExpenseReport。
    20. 选择report属性,然后单击加号并绑定它到reportArgs.Report。
    21. 你的工作流应该定义如下:clip_image00219_thumb2
    22. 右键单击rejectExpenseReport1活动,在菜单中选择Copy。clip_image00221_thumb1
    23. 右键单击Visual Studio工作流设计器中delayActivity1活动的下方,选择粘贴。
    24. 设置这个粘贴的活动的Name属性为rejectExpenseReport2.
    25. 你的工作流应该如下所示:clip_image00223_thumb1
    26. 你的报销审批工作流现在完成了。完整的工作流应该如下所示:clip_image00225_thumb1

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

    1. 接下来,你将验证启动应用程序的正确性。
    2. 定位到项目|报销审批工作流属性菜单。
    3. 单击调试选项卡。
    4. 确定选中的是启动外部应用程序选项,且程序列表中出现如练习三中所示的ExpenseHost.exe地址。
    5. 在解决方案中双击Workflow1.xoml文件转向visual Studio 工作流设计器。
    6. 在工作流开始处的expenseReportSubmitted1活动上设置断点。工作流的顶端如图所示:clip_image0021_thumb1
    7. 编译并运行ExpenseWorkflows项目。
    8. ExpenseHost将会启动,并显示一个控制窗口。
    9. 按照练习三中的路径,运行ExpenseApplication.exe。
    10. 下载并运行ManagerApplication.execlip_image0023_thumb2
    11. 使用报销应用程序,单击提交申请按钮以创建一个新的报销申请并提交到工作流。一个新的工作流实例启动,Visual Studio 2008将会以调试模式中断在expenseReportSubmitted1活动处。clip_image0025_thumb1
    12. 你可以按F5继续调试。到审查过期有30秒的延迟。
    13. 现在删除所有的端点,再按F5继续执行。
    14. 现在你可以提交多个不同值的报销审批。clip_image0027_thumb1
    15. 使用Manager应用程序,单击刷新按钮来刷新报销申请列表。
    16. 从列表中选择一个报销申请,单击同意按钮以通过审核。clip_image0029_thumb1
    17. 最后,使用Expense Reporting应用程序,单击刷新按钮来刷新状态的更改。记住,如果你在提交报销申请后等待超过30秒,工作流将会自动拒绝。因为我们添加的延迟活动已经配置好了。clip_image00211_thumb1
  • 相关阅读:
    airprobe 安装 part2
    USRP Daugherboard: DBSRX
    电赛又见电赛!2011电赛之我见
    USRP Experiment 1: Data transmission
    How to Switch Between GDM and KDM on Ubuntu
    USRP Daugherboard: BasicRX
    Oracle Analyze 命令 详解
    Oracle SQL优化 总结
    Oracle SQL优化 总结
    Oracle 用拼接字符串更新表 测试
  • 原文地址:https://www.cnblogs.com/zhangdong/p/1646533.html
Copyright © 2020-2023  润新知