Windows Workflow Foundation之旅(二)——指南1(构造一个顺序工作流)
翻译自 ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/9c3e5551-4eff-4977-89ac-f81ab092d996.htm
顺序工作流(sequentialworkflow)是为执行一种由一系列预定义的步骤组成的任务而设计的。这种体系结构是模拟基于过程的应用程序的。这一节将用几个步骤来编写一个简单的开支报告程序,这个小程序使用WinFrom做界面,用顺序工作流做业务逻辑。 这个小程序有一个TextBox来输入开支报告的总数,一个Button点击提交报告。工作流将评估开支,如果开支小于1000则提请领班审批,如果大于等于1000则提请经理审批。之后,工作流会发送一个审批意见,此时,出现一个Label显示审批意见,两个Button分别表示通过和拒绝审批。当某一个按钮被点击的时候,应用程序会通知回应工作流,工作流继续处理发生的事件。 开始构造顺序工作流 创建工作流类 WWF SDK中定义了一个SequentialWorkFlow类,我们定义一个ExpenseRoportWorkflow类,并继 承自SequentialWorkflow,这样就创建一个顺序工作流。如:
1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System;
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Activities;
3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Activities.Rules;
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) namespace Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) [RuleConditionsAttribute(typeof(Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.ExpenseReportWorkflow))]
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public sealed partial class ExpenseReportWorkflow : System.Workflow.Activities.SequentialWorkflow
9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public ExpenseReportWorkflow()
11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 声明工作流参数 在一个工作流运行时,它可以从宿主应用程序中接收参数。参数是ParameterDeclaration类型的对象,一旦工作流初始化完成,参数的值就能通过工作流的Parameters集合来访问。 这里的开始报告程序用了两个参数。第一个参数是开支的总数;第二个是一个传出参数,用来放置审批意见。 定义一个新的方法InitializeComponent,并在构造ExpenseRoportWorkflow类的构造函数中调用它。一下的例子示范了怎样定义两个参数并把它们加到Parameters集合中。
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public ExpenseReportWorkflow()
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) InitializeComponent();
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void InitializeComponent()
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) System.Workflow.ComponentModel.ParameterDeclaration Amount = new System.Workflow.ComponentModel.ParameterDeclaration();
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) System.Workflow.ComponentModel.ParameterDeclaration Result = new System.Workflow.ComponentModel.ParameterDeclaration();
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Workflow Parameters
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Amount.Direction = System.Workflow.ComponentModel.ParameterDirection.In;
26
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 27
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Amount.Name = "Amount";
28
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 29
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Amount.Type = typeof(int);
30
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 31
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Amount.Value = null;
32
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 33
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Result.Direction = System.Workflow.ComponentModel.ParameterDirection.Out;
34
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 35
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Result.Name = "Result";
36
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 37
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Result.Type = typeof(string);
38
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 39
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Result.Value = null;
40
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 41
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Parameters.Add(Amount);
42
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 43
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Parameters.Add(Result);
44
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 45
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
46
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 47
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 使用IfElse活动 IfElse活动用条件表达式来控制工作流中流程的运行。工作流将根据条件表达式的结果来决定执行条件分支(IfElseBranch)中的哪一个活动。 例子中将使用IfElse活动。通过判断从宿主应用程序中传入的Amount参数的值是否小于1000,来决定是否将审报发送到领班,否则发送到经理。 创建IfElse活动 1.定义4个私有变量
类型 | 名称 |
IfElse | evaluateExpenseReportAmount |
IfElseBranch | ifNeedsLeadApproval |
IfElseBranch | elseNeedsManagerApproval |
CodeCondition | ifElseLogicStatement |
2.在InitializeComponent中用默认构造函数实例以上4个对象。 以下的代码示例了怎样创建IfElse活动,并用IfElseBranch活动联系两个逻辑分支。你需要把以下代码放到InitializeComponent方法底部。
1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // EvaluateExpenseReportAmount
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.EvaluateExpenseReportAmount.Activities.Add(this .ifNeedsLeadApproval);
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.EvaluateExpenseReportAmount.Activities.Add(this .elseNeedsManagerApproval);
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.EvaluateExpenseReportAmount.ID = "EvaluateExpenseReportAmount" ;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // ifNeedsLeadApproval
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ifNeedsLeadApproval.Activities.Add(this .invokeGetLeadApproval);
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) ifElseLogicStatement.Condition += new System.Workflow.Activities.ConditionalExpression(this .DetermineApprovalContact);
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ifNeedsLeadApproval.Condition = ifElseLogicStatement;
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ifNeedsLeadApproval.ID = "ifNeedsLeadApproval" ;
26
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 27
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
28
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 29
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // elseNeedsManagerApproval
30
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 31
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
32
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 33
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.elseNeedsManagerApproval.Activities.Add(this .invokeGetManagerApproval);
34
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 35
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.elseNeedsManagerApproval.Condition = null ;
36
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 37
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.elseNeedsManagerApproval.ID = "elseNeedsManagerApproval" ;
38
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) WWF在IfElse活动中,有两种评估条件表达式的方式。一种是RoleCondition,这个对象通过使用一组规则来判断条件表达式的结果;另一种就是使用CodeCondition活动。CodeCondition使用一个回调方法,这个回调方法返回一个代表评估结果的布尔值。上面的例子就是使用CodeCondition来决定条件表达式的值。如果Amount参数小于1000,回调方法返回true,否则返回false。以下的代码就是这个回调函数的定义,你可以把它加到工作流类的定义中。
1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private bool DetermineApprovalContact(object sender, EventArgs e)
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if ( Convert.ToInt32(this.Parameters["Amount"].Value) < 1000 )
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) return true;
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) return false;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 构造IfElse分支(IfElseBranch)活动 创建完IfElse活动之后,我们来构造IfElseBranch活动 在这个例子中,每一IfElse活动的分支都使用InvokeMethodActivity活动来通知宿主程序——工作流需要领班或经理的审批才能继续执行。InvokeMethodActivity被设计成调用一个在WWF运行时中的服务接口。我们在同一份代码文件中定义了这个接口。当我们在之后构造宿主程序时,宿主类将实现这个接口,以便能建立工作流和宿主程序的通信(这一段文档上写的很模糊,我reflect后看了源码才明白过来,在最后将补充描述一下)。
构建IfElseBranch活动 1. 在类中定义两个私有字段
类型 | 名称 |
InvokeMethodActivity | invokeGetLeadApproval |
InvokeMethodActivity | invokeGetManagerApproval |
2. 在InitializeComponent中用默认构造函数实例化这两个对象 以下的代码示例了怎样在父活动(IfElse)中创建IfElseBranch活动,并把两个的InvokeMethodActivity联系到对应的IfElseBranch活动上,每个InvokeMethodActivity将调用定义在IExpenseReportService接口中的方法,接口会在稍微实现。你需要把以下代码放到InitializeComponent方法底部。
1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // invokeGetLeadApproval
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetLeadApproval.ID = "invokeGetLeadApproval" ;
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetLeadApproval.InterfaceType = typeof (Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.IExpenseReportService);
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetLeadApproval.MethodName = "GetLeadApproval" ;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // invokeGetManagerApproval
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetManagerApproval.ID = "invokeGetManagerApproval" ;
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetManagerApproval.InterfaceType = typeof (Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.IExpenseReportService);
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.invokeGetManagerApproval.MethodName = "GetManagerApproval" ;
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 以下代码定义了IExpenseReportService接口 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System;
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.ComponentModel;
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Runtime.Messaging;
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) namespace Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) [DataExchangeService]
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public interface IExpenseReportService
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) void GetLeadApproval();
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) void GetManagerApproval();
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) event EventHandler<WorkflowMessageEventArgs> ExpenseReportApproved;
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) event EventHandler<WorkflowMessageEventArgs> ExpenseReportRejected;
26
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 27
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
28
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 29
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
30
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 31
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 监听宿主事件 在这个阶段,工作流已经从宿主程序接受了两个参数(译者注:其中一个为out参数,此时设为null),评估了Amount参数,作出了到底该提请谁确认审批的决定,并通知了宿主程序在继续接下来的处理之前,确认审批。这里,Listen活动和EventSinkActivity活动往往配合使用,来监听宿主程序触发指定的事件。接着,一个approval或rejection事件被引发,工作流继续执行,返回审批结果Result,并终止流程。 Listen活动的每个分支是一个EventDriven活动。EventDriven活动只能使用实现了IEventActivity接口的活动。Listen活动的每个分支中的EventDriven各有一个EventSinkActivity,它们是用来监听宿主程序触发的ExpenseReportApproved或者ExpenseReportRejected事件的。这种工作流和宿主的通信方法其实类似于之前的InvokeMethodActivity的过程,只不过前者是工作流监听宿主事件,而后者是宿主事件工作流中注册的接口。 我们已经在前面的步骤中,把接口和两个事件的定义都完成了。在这里,我们将创建一个Listen活动并和两个EventDriven分支建立连接。每个分支包含一个EventSinkActivity活动,每个EventSink监听一种对应的事件。此外,我们还将创建一些事件处理程序,来处理AfterInvoke事件(译者注:这里的AfterInvoke事件应为Invoked事件)。这些事件处理程序将会把Result参数的值设为approval或者rejected。 构造监听活动 1.在工作流类中定义5个私有字段
类型 | 名称 |
Listen | listenApproveReject |
EventDriven | approveEventDriven |
EventDriven | rejectEventDriven |
EventSinkActivity | approveEvent |
EventSinkActivity | rejectEvent |
2. 在InitializeComponent中实例化。 以下的代码示例了怎样在创建Listen活动和EventSinkActivity活动,来监听宿主程序发出的事件。你需要把以下代码放到InitializeComponent方法底部。 使用EventSinkActivity时,为了在工作流中加入一些附加逻辑,你可以为Invoked事件创建一个事件处理程序。一下是事件处理程序的代码。 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // listenApproveReject
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.listenApproveReject.Activities.Add(this .approveEventDriven);
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.listenApproveReject.Activities.Add(this .rejectEventDriven);
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.listenApproveReject.ID = "listenApproveReject" ;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // approveEventDriven
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEventDriven.Activities.Add(this .approveEvent);
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEventDriven.ID = "approveEventDriven" ;
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // approveEvent
26
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 27
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
28
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 29
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEvent.EventName = "ExpenseReportApproved" ;
30
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 31
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEvent.ID = "approveEvent" ;
32
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 33
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEvent.InterfaceType = typeof (Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.IExpenseReportService);
34
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 35
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEvent.Roles = null ;
36
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 37
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveEvent.Invoked += new System.EventHandler(this .approveEvent_Invoked);
38
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 39
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
40
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 41
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // rejectEventDriven
42
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 43
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
44
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 45
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEventDriven.Activities.Add(this .rejectEvent);
46
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 47
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEventDriven.ID = "rejectEventDriven" ;
48
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 49
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
50
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 51
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // rejectEvent
52
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 53
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
54
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 55
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEvent.EventName = "ExpenseReportRejected" ;
56
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 57
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEvent.ID = "rejectEvent" ;
58
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 59
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEvent.InterfaceType = typeof (Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.IExpenseReportService);
60
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 61
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEvent.Roles = null ;
62
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 63
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectEvent.Invoked += new System.EventHandler(this .rejectEvent_Invoked);
64
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 65
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 完成顺序工作流 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void approveEvent_Invoked(object sender, EventArgs e)
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Parameters["Result"].Value = "Report Approved";
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void rejectEvent_Invoked(object sender, EventArgs e)
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Parameters["Result"].Value = "Report Rejected";
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 这个工作流包括两个主要的步骤:第一,监听宿主程序的递交审批事件,并把传入的值作为工作流参数;第二,监听通过或拒绝审批消息。一下的代码示例了怎样通过把之前创建好的活动加到工作流活动集中,来完成工作流的构造。 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // ExpenseReportWorkflow
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Activities.Add(this .EvaluateExpenseReportAmount);
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Activities.Add(this .listenApproveReject);
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.DynamicUpdateCondition = null ;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ID = "ExpenseReportWorkflow" ;
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 创建宿主程序 WWF需要一个宿主程序来运行工作流。当程序开始运行,WWF运行时引擎也随之启动。而之前构造好的工作流,则到用户点击了Submit按钮后才真正启动。 建立一个新的源文件,取名Program。以下的代码包含了完整的WinForm应用程序。IExpenseReportService接口GetLeadApproval和GetmanagerApproval方法已经定义在另一个文件中。宿主程序实现了这个接口。在approval和rejected按钮的click事件中,将引发ExpenseReprotApproval或ExpenseReprotRejected事件。 1
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System;
2
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 3
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.ComponentModel;
4
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 5
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Drawing;
6
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 7
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Windows.Forms;
8
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 9
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Collections.Generic;
10
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 11
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Runtime;
12
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 13
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Runtime.Hosting;
14
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 15
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) using System.Workflow.Runtime.Messaging;
16
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 17
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 18
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 19
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) namespace Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflowHost
20
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 21
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
22
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 23
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public class MainForm : Form, Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.IExpenseReportService
24
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 25
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
26
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 27
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Label label1;
28
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 29
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.TextBox result;
30
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 31
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Label label2;
32
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 33
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Button submitButton;
34
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 35
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Label approvalState;
36
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 37
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Button approveButton;
38
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 39
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Button rejectButton;
40
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 41
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.TextBox amount;
42
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 43
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.Windows.Forms.Panel panel1;
44
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 45
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 46
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 47
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private System.ComponentModel.IContainer components = null;
48
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 49
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 50
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 51
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private delegate void GetApprovalDelegate();
52
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 53
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private WorkflowRuntime workflowRuntime = null;
54
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 55
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private WorkflowInstance workflowInstance = null;
56
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 57
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 58
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 59
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public MainForm()
60
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 61
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
62
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 63
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) InitializeComponent();
64
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 65
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 66
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 67
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Collapse approve/reject panel
68
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 69
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Height -= this.panel1.Height;
70
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 71
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 72
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 73
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) workflowRuntime = new WorkflowRuntime();
74
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 75
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) workflowRuntime.AddService(this);
76
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 77
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) workflowRuntime.StartRuntime();
78
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 79
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 80
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 81
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);
82
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 83
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
84
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 85
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 86
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 87
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) protected override void Dispose(bool disposing)
88
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 89
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
90
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 91
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if (disposing && (components != null))
92
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 93
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
94
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 95
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) components.Dispose();
96
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 97
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
98
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 99
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) base.Dispose(disposing);
100
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 101
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
102
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 103
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 104
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 105
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void InitializeComponent()
106
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 107
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
108
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 109
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1 = new System.Windows.Forms.Label();
110
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 111
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result = new System.Windows.Forms.TextBox();
112
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 113
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2 = new System.Windows.Forms.Label();
114
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 115
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton = new System.Windows.Forms.Button();
116
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 117
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState = new System.Windows.Forms.Label();
118
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 119
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton = new System.Windows.Forms.Button();
120
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 121
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton = new System.Windows.Forms.Button();
122
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 123
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount = new System.Windows.Forms.TextBox();
124
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 125
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1 = new System.Windows.Forms.Panel();
126
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 127
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.SuspendLayout();
128
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 129
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.SuspendLayout();
130
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 131
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
132
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 133
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // label1
134
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 135
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
136
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 137
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.AutoSize = true;
138
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 139
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.Location = new System.Drawing.Point(13, 13);
140
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 141
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.Name = "label1";
142
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 143
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.Size = new System.Drawing.Size(39, 13);
144
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 145
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.TabIndex = 1;
146
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 147
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label1.Text = "Amount";
148
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 149
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
150
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 151
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // result
152
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 153
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
154
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 155
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.Location = new System.Drawing.Point(13, 69);
156
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 157
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.Name = "result";
158
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 159
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.ReadOnly = true;
160
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 161
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.Size = new System.Drawing.Size(162, 20);
162
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 163
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.TabIndex = 1;
164
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 165
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.TabStop = false;
166
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 167
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
168
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 169
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // label2
170
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 171
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
172
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 173
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.AutoSize = true;
174
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 175
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.Location = new System.Drawing.Point(13, 54);
176
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 177
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.Name = "label2";
178
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 179
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.Size = new System.Drawing.Size(33, 13);
180
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 181
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.TabIndex = 3;
182
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 183
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.label2.Text = "Result";
184
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 185
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
186
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 187
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // submitButton
188
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 189
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
190
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 191
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Enabled = false;
192
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 193
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Location = new System.Drawing.Point(56, 95);
194
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 195
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Name = "submitButton";
196
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 197
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Size = new System.Drawing.Size(75, 23);
198
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 199
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.TabIndex = 2;
200
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 201
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Text = "Submit";
202
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 203
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Click += new System.EventHandler(this.submitButton_Click);
204
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 205
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
206
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 207
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // approvalState
208
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 209
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
210
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 211
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.AutoSize = true;
212
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 213
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Location = new System.Drawing.Point(10, 9);
214
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 215
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Name = "approvalState";
216
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 217
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Size = new System.Drawing.Size(45, 13);
218
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 219
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.TabIndex = 4;
220
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 221
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Text = "Approval";
222
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 223
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
224
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 225
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // approveButton
226
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 227
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
228
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 229
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Enabled = false;
230
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 231
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Location = new System.Drawing.Point(11, 25);
232
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 233
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Name = "approveButton";
234
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 235
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Size = new System.Drawing.Size(75, 23);
236
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 237
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.TabIndex = 0;
238
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 239
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Text = "Approve";
240
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 241
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Click += new System.EventHandler(this.approveButton_Click);
242
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 243
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
244
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 245
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // rejectButton
246
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 247
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
248
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 249
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Enabled = false;
250
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 251
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Location = new System.Drawing.Point(86, 25);
252
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 253
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Name = "rejectButton";
254
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 255
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Size = new System.Drawing.Size(75, 23);
256
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 257
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.TabIndex = 1;
258
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 259
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Text = "Reject";
260
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 261
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Click += new System.EventHandler(this.rejectButton_Click);
262
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 263
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
264
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 265
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // amount
266
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 267
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
268
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 269
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.Location = new System.Drawing.Point(13, 29);
270
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 271
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.MaxLength = 9;
272
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 273
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.Name = "amount";
274
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 275
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.Size = new System.Drawing.Size(162, 20);
276
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 277
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.TabIndex = 0;
278
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 279
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.amount_KeyPress);
280
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 281
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.TextChanged += new System.EventHandler(this.amount_TextChanged);
282
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 283
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
284
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 285
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // panel1
286
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 287
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
288
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 289
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Controls.Add(this.approvalState);
290
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 291
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Controls.Add(this.approveButton);
292
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 293
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Controls.Add(this.rejectButton);
294
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 295
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Location = new System.Drawing.Point(3, 124);
296
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 297
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Name = "panel1";
298
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 299
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.Size = new System.Drawing.Size(172, 66);
300
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 301
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.TabIndex = 8;
302
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 303
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
304
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 305
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // MainForm
306
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 307
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) //
308
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 309
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.AcceptButton = this.submitButton;
310
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 311
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
312
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 313
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
314
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 315
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ClientSize = new System.Drawing.Size(187, 201);
316
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 317
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.panel1);
318
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 319
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.amount);
320
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 321
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.submitButton);
322
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 323
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.label2);
324
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 325
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.result);
326
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 327
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Controls.Add(this.label1);
328
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 329
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
330
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 331
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.MaximizeBox = false;
332
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 333
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.MinimizeBox = false;
334
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 335
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Name = "MainForm";
336
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 337
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Text = "Simple Expense Report";
338
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 339
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.ResumeLayout(false);
340
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 341
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.panel1.PerformLayout();
342
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 343
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.ResumeLayout(false);
344
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 345
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.PerformLayout();
346
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 347
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 348
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 349
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
350
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 351
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 352
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 353
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void submitButton_Click(object sender, EventArgs e)
354
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 355
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
356
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 357
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Type type = typeof(Microsoft.Samples.Workflow.Quickstarts.SequentialWorkflow.ExpenseReportWorkflow);
358
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 359
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 360
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 361
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Construct workflow parameters
362
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 363
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Dictionary<string, object> properties = new Dictionary<string, object>();
364
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 365
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) properties.Add("Amount", Int32.Parse(this.amount.Text));
366
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 367
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) properties.Add("Result", string.Empty);
368
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 369
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 370
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 371
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Start the workflow
372
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 373
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) workflowInstance = workflowRuntime.StartWorkflow(type, properties);
374
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 375
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
376
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 377
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 378
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 379
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
380
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 381
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
382
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 383
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if (this.result.InvokeRequired)
384
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 385
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.Invoke(new EventHandler<WorkflowCompletedEventArgs>(this.workflowRuntime_WorkflowCompleted), sender, e);
386
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 387
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) else
388
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 389
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
390
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 391
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.result.Text = e.OutputParameters["Result"].ToString();
392
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 393
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 394
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 395
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Clear fields
396
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 397
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.amount.Text = string.Empty;
398
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 399
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 400
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 401
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Disable buttons
402
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 403
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Enabled = false;
404
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 405
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Enabled = false;
406
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 407
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
408
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 409
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
410
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 411
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 412
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 413
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void approveButton_Click(object sender, EventArgs e)
414
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 415
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
416
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 417
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Raise the ExpenseReportApproved event back to the workflow
418
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 419
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) ExpenseReportApproved(null, new WorkflowMessageEventArgs(this.workflowInstance.InstanceId));
420
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 421
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Height -= this.panel1.Height;
422
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 423
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Enabled = true;
424
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 425
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
426
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 427
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 428
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 429
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void rejectButton_Click(object sender, EventArgs e)
430
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 431
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
432
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 433
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // Raise the ExpenseReportRejected event back to the workflow
434
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 435
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) ExpenseReportRejected(null, new WorkflowMessageEventArgs(this.workflowInstance.InstanceId));
436
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 437
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Height -= this.panel1.Height;
438
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 439
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Enabled = true;
440
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 441
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
442
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 443
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 444
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 445
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) IExpenseReportService Members#region IExpenseReportService Members
446
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 447
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 448
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 449
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public void GetLeadApproval()
450
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 451
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
452
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 453
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if (this.approvalState.InvokeRequired)
454
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 455
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Invoke(new GetApprovalDelegate(this.GetLeadApproval));
456
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 457
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) else
458
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 459
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
460
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 461
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Text = "Lead approval needed";
462
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 463
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Enabled = true;
464
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 465
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Enabled = true;
466
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 467
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 468
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 469
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // expand the panel
470
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 471
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Height += this.panel1.Height;
472
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 473
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Enabled = false;
474
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 475
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
476
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 477
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
478
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 479
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 480
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 481
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public void GetManagerApproval()
482
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 483
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
484
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 485
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if (this.approvalState.InvokeRequired)
486
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 487
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Invoke(new GetApprovalDelegate(this.GetManagerApproval));
488
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 489
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) else
490
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 491
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
492
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 493
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approvalState.Text = "Manager approval needed";
494
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 495
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.approveButton.Enabled = true;
496
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 497
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.rejectButton.Enabled = true;
498
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 499
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 500
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 501
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) // expand the panel
502
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 503
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.Height += this.panel1.Height;
504
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 505
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) this.submitButton.Enabled = false;
506
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 507
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
508
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 509
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
510
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 511
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 512
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 513
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public event EventHandler<WorkflowMessageEventArgs> ExpenseReportApproved;
514
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 515
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) public event EventHandler<WorkflowMessageEventArgs> ExpenseReportRejected;
516
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 517
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 518
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 519
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) #endregion
520
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 521
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 522
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 523
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void amount_KeyPress(object sender, KeyPressEventArgs e)
524
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 525
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
526
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 527
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) if (!Char.IsControl(e.KeyChar) && (!Char.IsDigit(e.KeyChar)))
528
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 529
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) e.KeyChar = Char.MinValue;
530
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 531
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
532
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 533
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 534
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 535
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) private void amount_TextChanged(object sender, EventArgs e)
536
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 537
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
538
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 539
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) submitButton.Enabled = amount.Text.Length > 0;
540
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 541
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
542
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 543
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
544
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 545
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 546
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 547
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) static class Program
548
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 549
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
550
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 551
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) /// <summary>
552
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 553
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) /// The main entry point for the application.
554
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 555
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) /// </summary>
556
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 557
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) [STAThread]
558
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 559
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) static void Main()
560
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 561
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流)
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) {
562
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 563
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Application.EnableVisualStyles();
564
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 565
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Application.Run(new MainForm());
566
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 567
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
568
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 569
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
570
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 571
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) }
572
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) 573
Windows Workflow Foundation之旅(二)——指南1(创建顺序工作流) Ps:上面还有个问题没有解释清楚,我reflect了一下,看了源码才知道个大概。
那就是IfElseBranch中的InvokeMethodActivity。 InvokeMethodActivity中有一个Type类型的InterfaceType属性,使用时,需要设置这个属性,并把MethodName设为这个接口中的一个方法的名称。运行时,工作流引擎(也就是WorkflowRuntime)将通过反射调用这个接口。 但引擎怎么知道调用接口的哪个实现呢?你看 workflowRuntime = new WorkflowRuntime(); workflowRuntime.AddService(this); workflowRuntime.StartRuntime(); 原来,初始化引擎时,我们已经把实现了这个interface的类型的实例(this)注册到工作流中了。运行时,引擎就遍历所有已经注册的服务,如果实现了这个接口,这调用它。