任务 1:定义工作流参数
工作流和宿主应用程序可以使用参数在相互之间传递数据。 在工作流端,参数是工作流类中定义的属性。 如果为属性定义了 set 方法,则宿主应用程序可以在工作流执行之前,在调用 CreateWorkflow 方法期间通过传入参数集合,来设置该属性。 若要在宿主应用程序完成运行之后,将参数返回到宿主应用程序,则可以为该属性定义一个 get 方法。 然后,宿主应用程序可以访问传递给 WorkflowCompleted 事件的 WorkflowCompletedEventArgs 对象。 WorkflowCompletedEventArgs 对象包含工作流中定义的所有属性,这些属性包含 get 方法。
在此任务中,将创建一个名为 Amount 的整数属性。 此属性将在提交费用报表时传递给工作流。 工作流将处理金额,并向工作流返回是批准还是拒绝的信息。 然后,工作流将设置其 Result 字符串属性,工作流完成运行时,宿主应用程序便可以访问该属性。
备注
虽然建议您按顺序进行下列练习,但并不要求您这么做。 您可以通过打开示例项目然后执行下节中的步骤来开始此练习。
定义工作流属性
按照以下步骤为金额定义一个整数属性,为结果定义一个字符串属性。
定义 Amount 工作流属性
在 ExpenseReportWorkflow 类中,声明一个名为 reportAmount 的 private Int32 字段。
private int reportAmount = 0;
在 ExpenseReportWorkflow 类中创建一个 public Int32 属性,然后创建一个 set 方法,该方法设置上一步中创建的 reportAmount 字段。
public int Amount { set { this.reportAmount = value; } }
定义 Result 工作流属性
在 ExpenseReportWorkflow 类中,声明一个名为 reportResult 的 private String 字段。
private string reportResult = "";
在 ExpenseReportWorkflow 类中创建一个 public String 属性,然后创建一个 get 方法,该方法返回上一步中创建的 reportResult 字段的值。
public string Result { get { return this.reportResult; } }
修改 Windows 窗体应用程序
接下来,将修改 Windows 窗体应用程序以设置 ExpenseReportWorkflow 的 Amount 属性,并在工作流完成运行时检索 Result 属性。 在创建工作流时设置 Amount 属性,在引发 WorkflowCompleted 事件时检索 Result 属性。
设置 Amount 工作流属性
在 MainForm 类的 submitButton_Click 方法中,创建一个名为 properties 的 Object 类型的泛型 Dictionary 集合,该集合使用 String 作为键。
备注
必须在调用 CreateWorkflow 方法之前添加此代码。
// Construct workflow parameters Dictionary<string, object> properties = new Dictionary<string, object>();
调用刚刚创建的 properties 集合中定义的 Add 方法,并将字符串 "Amount" 作为第一个参数传入,amount TextBox 控件的 Text 属性将转换为 Int32 值。
启动工作流时,WorkflowRuntime 将使用此信息设置工作流的 Amount 属性。
properties.Add("Amount", Int32.Parse(this.amount.Text));
在下一行中,通过将属性集合作为第二个参数传递来修改 CreateWorkflow 方法调用。
workflowInstance = workflowRuntime.CreateWorkflow(type, properties);
检索 Result 工作流属性
在 MainForm 类的 workflowRuntime_WorkflowCompleted 方法中,添加一个 If 语句,以验证 InvokeRequired 对于结果 TextBox 控件是否为 true。
在 If 语句的 true 分支中,调用结果 TextBox 控件的 Invoke 方法,以传递名为 workflowRuntime.WorkflowCompleted 的 WorkflowCompletedEventArgs 类型的新泛型 EventHandler。
将 sender 和 e 局部变量作为参数传递给事件处理程序。
在 If 语句的 else 分支中,将 result TextBox 控件的 Text 属性设置为与 e 参数中定义的 OutputParameters 集合的 "Result" 键相等。
确保将调用 ToString 方法以将该值转换为字符串。
清除 amount TextBox 控件,方法是将其 Text 属性设置为 String.Empty。
禁用 approveButton 和 rejectButton Button 控件,方法是将它们的 Enabled 属性设置为 false。
else { this.result.Text = e.OutputParameters["Result"].ToString(); // Clear fields this.amount.Text = string.Empty; // Disable buttons this.approveButton.Enabled = false; this.rejectButton.Enabled = false; }
编译代码
有关编译代码的信息,请参见编译代码。
在任务 2:定义 IExpenseReportService 接口中,将创建能使工作流和宿主应用程序之间进行通信的接口。
请参见
任务
任务 2:定义 IExpenseReportService 接口
参考
CreateWorkflow
WorkflowCompleted
WorkflowCompletedEventArgs
OutputParameters
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。