惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
罗磊的独立博客
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Last Week in AI
Last Week in AI
美团技术团队
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
月光博客
月光博客
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
W
WeLiveSecurity
H
Heimdal Security Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
C
Check Point Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
博客园_首页
The Last Watchdog
The Last Watchdog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
I
Intezer
K
Kaspersky official blog
M
MIT News - Artificial intelligence
J
Java Code Geeks
G
GRAHAM CLULEY
P
Palo Alto Networks Blog

博客园 - 星宿.NET

MOSS SSO -2147217900调用 SPS Single Sign-on 失败。返回的错误代码为“-2147217900”。 错误 数据关系图出现“此数据库没有有效所有者”错误的解决方法 - 星宿.NET - 博客园 SQL 语句建立连接服务器 SQL语句进行left join的时候发生Cannot resolve collation conflict for equal to operation.错误 列出域中所有用户的代码 跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动 treeview控制checkbox修改版(2) treeview控制checkbox修改版(1) [转载]Asp.Net2.0权限树中Checkbox的操作 通过WPF/E制作一个从数据库读取数据的图谱 [转载]如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据 和我一起学Windows Workflow Foundation(2)-----让WF通过参数接收数据 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 将visual studio 2005 SP1补丁整合到安装文件 初学使用sharepoint 2007 用户控件包装器 QuickPart 创建或修改WSS的主题
跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动
星宿.NET · 2007-01-26 · via 博客园 - 星宿.NET

这一节我们将扩充上一节制作的支出报表的例子(所以继续使用第三个试验使用的例子),给他添加一个功能使管理者可以去管理大于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. 现在如图所示:

Ex4Task3Step21

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

8. 如图:

9. Ex4Task3Step25

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的用法,更充实了第三个试验的内容。