这一节我们将扩充上一节制作的支出报表的例子(所以继续使用第三个试验使用的例子),给他添加一个功能使管理者可以去管理大于1000的金额是通过审核还是拒绝。我们将使用一些新的活动包括 Listen, Delay等,另外还有一些定制的活动。

代码点击这里下载

添加一个请求管理者通过的活动

1. 首先我们需要在类Workflow1声明ReportEmployeeId, ManagerEmployeeIdreviewArgs3个变量,所以给workflow1.xoml.cs添加如下代码:

public string ReportEmployeeId = default(System.String);

public string ManagerEmployeeId = default(System.String);

public ExpenseLocalServices.ExpenseReportReviewedEventArgs reviewArgs =

default(ExpenseLocalServices.ExpenseReportReviewedEventArgs);

2. 打开Workflow1.xoml的设计视图,选择EvaluateExpenseReport这个IfElse活动右边的活动分支(ElseRejected),修改其Name属性为ElseManagerApproval。删除里面我们在上一节中创建的活动rejectExpenseReport1

3. 添加一个自定义活动GetManager(在我们上一节添加的自定义活动ExpenseActivities.dll中)到IfElse活动分支的ElseManagerApproval节点内,如图:

4. 设置getManager1的属性:
ManagerEmployeeId –点击[…]绑定到ManagerEmployeeId

ReportEmployeeId –点击[…]绑定到ReportEmployeeId

5. 修改Workflow1类中的ReportSubmitted_Invoked的代码,添加高亮的那行,将参数提供者提供的EmployeeId赋值给刚才我们声明的变量ReportEmployeeId。

6. Change the code in the ReportSubmitted_Invoked method to set the ReportEmployeeId to the value provided in the Expense Report’s EmployeeId property. Add the highlighted line of code below.

private void expenseReportSubmitted1_Invoked(object sender, ExternalDataEventArgs e)

{

Console.WriteLine("ReportSubmitted_Invoked");

this.amount = this.reportArgs.Report.Amount;

this.ReportEmployeeId = this.reportArgs.Report.EmployeeId;

}

7. 在工作流设计视图中从工具箱拖拽一个活动CallExternalMethodgetManager1活动的下面。

8. 设置其(Name) 属性为 requestManagerApproval1

9. InterfaceType属性为ExpenseLocalServices.IExpenseService

10. MethodName 属性从下拉列表框中选择 RequestManagerApproval

11. 还要设置如下属性:

12. ManagerEmployeeId – 设置为 ManagerEmployeeId.

13. Report – 设置为 reportArgs.Report.

14. 现在EvaluateExpenseReport 节点如下图所示:

添加一个Listen活动来等待支出报表的审核

1. 在requestManagerApproval1下添加一个Listen 活动。

2. 设置其(Name)属性为ListenForManagerApproval,修改其eventDrivenActivity1eventDrivenActivity1的(Name)属性分别为:ManagerReviewedReviewTimeout

3. 如图所示:

4. 在ManagerReviewed部分添加一个HandleExternalEvent活动,将这个新添加的活动(Name)属性设置为expenseReportReviewed1

5. 继续给我们新创建的这个活动设置属性,将

a. InterfaceType 属性设置为ExpenseLocalServices.IExpenseService.

b. EventName 属性设置为ExpenseReportReviewed

c. 绑定属性ereviewArgs

6. 从工具箱中拖拽一个Delay活动到设计视图中Listen活动下的ReviewTimeout分支。

7. 设置这个新添加的活动delayActivity1的属性TimeoutDuration值为:00:00:30

8. 现在的工作流如图所示:

批准或拒绝支出报表

1. 在expenseReportReviewed1活动下添加一个IfElse活动,修改(Name)属性为EvaluateReview

2. 选择左边的分支,设置起属性:

a. (Name) – 设置为 IfApproved

b. Condition – 选择 CodeCondition,说明我们将通过代码控制条件。

c. 展开Condition属性,在下一级Condition中输入IfReportApproved_Condition,并双击,将在Workflow1类中自动添加此事件处理程序。

d. 我们输入入下代码,表示如果通过则将条件参数值设置为通过:

public void IfReportApproved_Condition(object sender, ConditionalEventArgs e)

{

e.Result = this.reviewArgs.Review.Approved;

}

3. 选择EvaluateReview活动右边的分支设置其(Name) 属性为ElseDeclined

4. 添加一个CallExternalMethod活动到EvaluateReview活动的IfApproved分支。

a. (Name) 属性设置为 approveExpenseReport2

b. InterfaceType属性设置为ExpenseLocalServices.IExpenseService

c. MethodName属性设置为ApproveExpenseReport

d. report 属性设置为reportArgs.Report

5. 同样的,添加一个CallExternalMethod活动到EvaluateReview活动的ElseDeclined分支。

a. (Name) 属性设置为 rejectExpenseReport1

b. InterfaceType属性设置为ExpenseLocalServices.IExpenseService

c. MethodName属性设置为RejectExpenseReport

d. report 属性设置为reportArgs.Report

6. 现在如图所示:

7. 在rejectExpenseReport1活动上右键点击复制,粘贴到delayActivity1活动下面并修改这个新创建活动的(Name) 属性为 rejectExpenseReport2.

8. 如图:

9.

10. 现在我们的工作流制作完成了,他的全图如下所示

测试报表支出工作流

1. Next you will verify that the startup application is correct.

2. 察看ExpenseWorkflows项目的属性,点击调试选项卡,象上一节一样,确认在启动操作中选择启动外部程序,并导航到ExpenseWorkflows\ExpenseWorkflows\bin\Debug\ExpenseHost.exe。

3. 下面点击F5启动调试。

4. 运行ExpenseWorkflows\ExpenseApplication\bin\Debug目录下的ExpenseApplication.exe

5. 运行ExpenseWorkflows\ManagerApplication\bin\Debug 目录下的ManagerApplication.exe

6. 如图

7. 现在,我们再在Expense Reporting 中提交一条数据:

8. 在Manager Expense Report Review中通过点击刷新获得此条数据:

9. 并且,通过点击通过还是拒绝来审核此条纪录是否通过。如果超时30秒,那么就会自动拒绝。

10. 最终提交的数据如下:

11.

12.

这里我们可以学到Listen和Delay的用法,更充实了第三个试验的内容。

转载于:https://www.cnblogs.com/cxd4321/archive/2007/09/03/879724.html

跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动...相关推荐

  1. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例(转)

    和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以 ...

  2. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例

    今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以英文的占多数,所以,在学习起来似乎比较吃力,不过相信我能坚持下来,顺便提高点英语阅读能力,不过本人英文水 ...

  3. Microsoft Windows Workflow Foundation 入门:开发人员演练

    有关向 Windows 平台添加工作流支持的初步知识 Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流 ...

  4. Windows workflow foundation入门

    Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案.作为即将问世的 Microsoft WinF ...

  5. Microsoft Windows Workflow Foundation

    Dino Esposito Solid Quality Learning 适用于: Microsoft Windows Workflow Foundation Microsoft Windows Vi ...

  6. Windows Workflow Foundation 4.0

    转:http://www.cnblogs.com/foundation/category/215023.htm WF4.0 技术文章 WF4.0 流程设计器例子 (提供状态机模板) 摘要: WF4.0 ...

  7. WWF(Windows Workflow Foundation)开发环境的建立。 .NET 技术前瞻,WWF,Windows,Workflow,Foundation...

    1.安装WindowsSDK for Vista,有1.14G之巨,可以从MS的网站上下载,不过需要验证WINDOWS,可以去讯雷区用WindowsSDK为关键字搜索下载. 2.安装Virsul St ...

  8. Windows WorkFlow Foundation学习资源

    微软主站 Microsoft Windows Workflow Foundation 入门:开发人员演练 转载于:https://www.cnblogs.com/zwx/archive/2007/01 ...

  9. Microsoft Windows Workflow Foundation 入门

    Microsoft Windows Workflow Foundation 的包含在 .Net Framework 3.0 中,除此之外i,基于它做开发还要安装 Visual Studio 2005 ...

  10. 你还记得windows workflow foundation吗

    很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...

最新文章

  1. 读书笔记(2) OpenLayers中的图层
  2. 《Python数据分析》2nd
  3. oracle crm版本,ORACLE CRM ON DEMAND 19 版
  4. HD_2037今年暑假不AC
  5. python的符号lt和gt怎么输入_lt;lt;Python基础教程gt;gt;学习笔记 | 第12章 | 图形用户界面...
  6. ubuntu下软件中心闪退问题解决
  7. uni app input添加获取验证码按钮_uni-app跨平台框架对微信小程序的无障碍支持探索...
  8. 关于线程上下文切换,你知道多少?
  9. PHP初级面试题收集
  10. ajax用get刷新页面元素在IE下无效解决~~
  11. 学生渐进片add如何给_渐进片的那些事「5」——验配之前的问诊
  12. id 和 class 选择器
  13. 计算机公益活动策划书,社会公益爱心活动策划方案模板
  14. 3dmax渲染大图的过程中自动关闭怎么回事?
  15. 2019年计算机一级考试pdf,2019年计算机一级考试试题及答案.pdf
  16. Python 针对Excel操作
  17. java 实现macd算法_macd 的java版本实现 包含测试用例
  18. java学习网络编程遇到异常java.net.SocketException:Software caused connection abort: socket write error
  19. linux命令在线练习,随手练习Linux命令
  20. cadence SPB17.4 - CIS - add a new part

热门文章

  1. 基于深度学习模型+Attention机制的分类模型构建实践分析【以鸢尾花数据集为例】
  2. Java并发编程中锁的正确使用方法
  3. 2021-07-09商场主页及分类
  4. 区块链 以太坊 入门知识
  5. Hyperledger Fabric教程(11)-- 链码和背书策略
  6. html5 xml的区别,xhtml和html5区别 html与xhtml和xml有什么区别
  7. mysql 连接 互联网_互联网技术分享社区 MySQL字符串连接函数
  8. Leetcode116. 填充每个节点的下一个右侧节点指针(宽搜或深搜)
  9. String.format()方法使用
  10. 计算机秘密程序 听课反思,《编制计算机程序解决问题》的教学反思